Method: FormObj::ModelMapper::ModelAttribute#initialize
- Defined in:
- lib/form_obj/model_mapper/model_attribute.rb
#initialize(array:, classes:, default_name:, hash:, model:, names:, nesting:, read_from_model:, subform:, write_to_model:) ⇒ ModelAttribute
Returns a new instance of ModelAttribute.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# 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 |