class FormObj::ModelMapper::ModelAttribute::Item

Attributes

hash[RW]
hash_item[R]
name[R]

Public Class Methods

new(name:, klass:, hash:, array:) click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 13
def initialize(name:, klass:, hash:, array:)
  @array = array
  @hash = hash
  @hash_item = name[0] == ':'
  @name = (name[0] == ':' ? name[1..-1] : name).to_sym
  @klass = klass || @name.to_s.classify
end

Public Instance Methods

create_array() click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 33
def create_array
  []
end
create_model() click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 25
def create_model
  if @hash
    {}
  else
    (@klass.is_a?(String) ? @klass.constantize : @klass).try(:new)
  end
end
hash_item=(value) click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 21
def hash_item=(value)
  @hash_item ||= value
end
read_errors_from_model(model) click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 66
def read_errors_from_model(model)
  @hash_item ? [] : model.errors[@name]
end
read_from_model(model, create_nested_model_if_nil: false) click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 37
def read_from_model(model, create_nested_model_if_nil: false)
  return nil if model.nil?

  result = if @hash_item
             model[hash_attribute_name(model, @name)]
           else
             model.send(@name)
           end

  if result.nil? && create_nested_model_if_nil
    result = @array ? create_array : create_model
    write_to_model(model, result)
  end

  result
end
to_hash(value) click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 62
def to_hash(value)
  { @name => value }
end
write_to_model(model, value) click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 54
def write_to_model(model, value)
  if @hash_item
    model[hash_attribute_name(model, @name)] = value
  else
    model.send("#{@name}=", value)
  end
end

Private Instance Methods

hash_attribute_name(model, name) click to toggle source
# File lib/form_obj/model_mapper/model_attribute/item.rb, line 72
def hash_attribute_name(model, name)
  model.key?(name.to_s) && !model.key?(name.to_sym) ? name.to_s : name.to_sym
end