Module: JSONDecoder::Node::ClassMethods

Defined in:
lib/motion_json_decoder/node.rb

Instance Method Summary collapse

Instance Method Details

#collection(name, opts = {}) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/motion_json_decoder/node.rb', line 39

def collection(name, opts = {})
  klass = opts.fetch(:class_name)
  define_method name do
    # Using a block to avoid dependency reolutions problems.
    lambda do
      json.fetch(name.to_s).map { |element| klass.call.new(element) }
    end.call
  end
end

#field(field_name, opts = {}) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/motion_json_decoder/node.rb', line 22

def field(field_name, opts = {})
  type = opts[:type]
  klass = opts[:using]
  raise "Cannot use :type and :using together" if type && klass
  method_name = opts[:as] || field_name
  define_method method_name do
    result = json.fetch field_name.to_s
    if type == :date
      JSONDecoder::DateParser.new.parse(result) # TODO move this into lib if gemifying
    elsif klass
      klass.new result
    else
      result
    end
  end
end