class MultipleMan::ModelPopulator

Attributes

fields[RW]
record[RW]

Public Class Methods

new(record, fields) click to toggle source
# File lib/multiple_man/model_populator.rb, line 4
def initialize(record, fields)
  self.record = record
  self.fields = fields
end

Public Instance Methods

populate(payload) click to toggle source
# File lib/multiple_man/model_populator.rb, line 9
def populate(payload)
  data = payload[:id].merge(payload[:data])
  fields_for(data).each do |field|
    source, dest = field.is_a?(Array) ? field : [field, field]
    populate_field(dest, data[source])
  end
  record
end

Private Instance Methods

fields_for(data) click to toggle source
# File lib/multiple_man/model_populator.rb, line 40
def fields_for(data)
  fields || data.keys
end
populate_field(field, value) click to toggle source
# File lib/multiple_man/model_populator.rb, line 26
def populate_field(field, value)
  # Attempts to populate source id if id is specified
  if field.to_s == 'id' && record.respond_to?('source_id')
    field = 'source_id'
  end

  setter = "#{field}="
  if record.respond_to?(setter)
    record.send(setter, value)
  elsif should_raise?
    raise "Record #{record} does not respond to #{setter}"
  end
end
should_raise?() click to toggle source

Raise an exception if explicit fields were provided.

# File lib/multiple_man/model_populator.rb, line 22
def should_raise?
  fields.present?
end