class FormObj::ModelMapper::ModelAttribute

Attributes

model[R]

Public Class Methods

new(array:, classes:, default_name:, hash:, model:, names:, nesting:, read_from_model:, subform:, write_to_model:) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 9
def initialize(array:, classes:, default_name:, hash:, model:, names:, nesting:, read_from_model:, subform:, write_to_model:)
  @read_from_model = read_from_model && !(names === false)
  @write_to_model = write_to_model && !(names === false)

  @nesting = nesting
  @model = model
  @array = array

  names = (names || default_name).to_s.split('.') unless names.is_a? ::Enumerable
  classes = classes.nil? ? [] : [classes] unless classes.is_a? ::Enumerable

  if classes.size > 0
    if (subform && (names.size != classes.size)) || (!subform && (names.size != classes.size + 1))
      raise "Since the :model_attribute size is #{names.size} the :model_class size should be #{names.size - (subform ? 0 : 1)} in terms of nested items but it was #{classes.size}" unless names.size == classes.size
    end
  end

  @items = names.zip(classes, [hash], names[0..-2].map{nil} + [array]).map { |item| Item.new(name: item[0], klass: item[1], hash: item[2], array: item[3]) }

  @items.inject do |prev, item|
    prev.hash = true if item.hash_item
    item
  end
end

Public Instance Methods

create_model() click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 46
def create_model
  raise 'Creation available only for array attributes' unless @array
  @items.last.create_model
end
hash_item=(value) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 42
def hash_item=(value)
  @items[0].hash_item = value
end
last_name() click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 38
def last_name
  @items.last.name
end
names() click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 34
def names
  @items.map(&:name)
end
nesting?() click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 51
def nesting?
  @nesting
end
read_errors_from_model(model) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 92
def read_errors_from_model(model)
  @items.last.try(:read_errors_from_model,
                  @items[0..-2].reduce(model) { |last_model, item| item.read_from_model(last_model, create_nested_model_if_nil: false) }
  )
end
read_errors_from_models(models) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 98
def read_errors_from_models(models)
  read_errors_from_model(models[@model])
end
read_from_model(model, create_nested_model_if_nil: false) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 59
def read_from_model(model, create_nested_model_if_nil: false)
  @items.reduce(model) { |last_model, item| item.read_from_model(last_model, create_nested_model_if_nil: create_nested_model_if_nil) }
end
read_from_model?() click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 55
def read_from_model?
  @read_from_model
end
read_from_models(models, create_nested_model_if_nil: false) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 63
def read_from_models(models, create_nested_model_if_nil: false)
  read_from_model(models[@model], create_nested_model_if_nil: create_nested_model_if_nil)
end
to_model_hash(value) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 88
def to_model_hash(value)
  @items.reverse.reduce(value) { |value, item| item.to_hash(value) }
end
validate_primary_key!() click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 80
def validate_primary_key!
  if @items.size > 1
    raise PrimaryKeyMappingError.new('Primary key should not be mapped to nested model')
  elsif @items.size == 0
    raise PrimaryKeyMappingError.new('Primary key should not be mapped to non-mapped attribute')
  end
end
write_to_model(model, value) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 71
def write_to_model(model, value)
  model = @items[0..-2].reduce(model) { |last_model, item| item.read_from_model(last_model, create_nested_model_if_nil: true) } if @items.size > 1
  @items.last.write_to_model(model, value)
end
write_to_model?() click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 67
def write_to_model?
  @write_to_model
end
write_to_models(models, value) click to toggle source
# File lib/form_obj/model_mapper/model_attribute.rb, line 76
def write_to_models(models, value)
  write_to_model(models[@model], value)
end