module NestedStruct::Interface

Public Class Methods

included(base) click to toggle source
# File lib/nested_struct/interface.rb, line 3
def self.included(base)
  base.extend(ClassMethods)
end
new(attributes = {}) click to toggle source
# File lib/nested_struct/interface.rb, line 27
def initialize(attributes = {})
  assign_field_values(attributes)
end

Public Instance Methods

to_hash() click to toggle source
# File lib/nested_struct/interface.rb, line 31
def to_hash
  Hash[map_fields]
end

Private Instance Methods

assign_field_values(attributes = {}) click to toggle source
# File lib/nested_struct/interface.rb, line 48
def assign_field_values(attributes = {})
  self.class.fields.each do |field|
    instance_variable_set(
      "@#{field.name}",
      field_value(field, attributes)
    )
  end
end
field_value(field, attributes) click to toggle source
# File lib/nested_struct/interface.rb, line 64
def field_value(field, attributes)
  if NestedStruct.configuration.use_empty_value
    field.with(attributes.fetch(field.name, NestedStruct::EMPTY))
  else
    field.with(attributes[field.name])
  end
end
map_fields() click to toggle source
# File lib/nested_struct/interface.rb, line 37
def map_fields
  mapped_fields = []

  self.class.fields.each do |field|
    result = [field.name.to_sym, primitivize(public_send(field.name))]
    mapped_fields << result if !result.last.is_a?(NestedStruct::Empty)
  end

  mapped_fields
end
primitivize(value) click to toggle source
# File lib/nested_struct/interface.rb, line 57
def primitivize(value)
  return nil if value.nil?
  return value.map(&:to_hash) if value.is_a?(Array)
  return value.to_hash if value.respond_to?(:to_hash)
  value
end