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