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