module Parsed::Parseable::ClassMethods

Attributes

parseable_fields[RW]
parseable_hash[RW]
parser[RW]

Public Instance Methods

parse(data, parser = ParsesJson) click to toggle source
# File lib/parsed/parseable.rb, line 21
def parse(data, parser = ParsesJson)
  @parser = parser
  @parseable_hash = parser.parse(data)

  instance = new
  parse_fields(instance)
  instance
end
parses(*attributes) click to toggle source

Public: Registers attributes that are to be parsed.

attributes - The fields to be parsed

Examples

class Foo
  include Parsed::Parseable
  attr_accessor :foo, :bar, :baz
  parsed :foo, :bar, :baz
end
# File lib/parsed/parseable.rb, line 42
def parses(*attributes)
  attributes.each do |attributes|
    parseable_fields << attributes
  end
end

Private Instance Methods

determine_collection_class(field) click to toggle source
# File lib/parsed/parseable.rb, line 75
def determine_collection_class(field)
  if @collection_class_cache.has_key? field
    @collection_class_cache[field]
  else
    @collection_class_cache[field] =
      field.to_s.singularize.camelize.constantize
  end
rescue NameError => e
  @collection_class_cache[field] = nil
end
parse_field(field) click to toggle source
# File lib/parsed/parseable.rb, line 57
def parse_field(field)
  clazz = determine_collection_class(field)
  if clazz
    elements = parser.parse_elements(parseable_hash, field)

    elements.map do |element|
      if element.instance_of? Hash
        clazz.parse(element)
      else
        element
      end
    end

  else
    parser.parse_value(parseable_hash, field)
  end
end
parse_fields(instance) click to toggle source
# File lib/parsed/parseable.rb, line 50
def parse_fields(instance)
  parseable_fields.each do |field|
    value = parse_field(field)
    instance.send("#{field}=".to_sym, value)
  end
end