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