Module: NestedStruct::Interface

Defined in:
lib/nested_struct/interface.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/nested_struct/interface.rb', line 3

def self.included(base)
  base.class_eval do
    @field_names ||= []
    @fields ||= []

    class << self
      attr_reader :field_names, :fields

      def field(name, coercer_expression = nil)
        if !field_names.include?(name)
          @field_names << name
          @fields << Field.new(name, coercer_expression)
          attr_accessor(name)
        end
      end
    end
  end
end

Instance Method Details

#initialize(attributes = {}) ⇒ Object



22
23
24
# File 'lib/nested_struct/interface.rb', line 22

def initialize(attributes = {})
  assign_field_values(attributes)
end

#to_hashObject



26
27
28
29
30
31
32
# File 'lib/nested_struct/interface.rb', line 26

def to_hash
  Hash[
    self.class.fields.map do |field|
      [field.name.to_sym, primitivize(public_send(field.name))]
    end
  ]
end