module Sire::EntityBuilder

Constants

InvalidValueError

Public Class Methods

build(hash) click to toggle source
# File lib/sire/entity_builder.rb, line 6
def build(hash)
  create_lookup unless lookup_up_to_date?
  parse_values(hash)
end
nestables() click to toggle source
# File lib/sire/entity_builder.rb, line 11
def nestables
  @nestables ||= []
end
primitives() click to toggle source
# File lib/sire/entity_builder.rb, line 15
def primitives
  @primitves ||= [String, Numeric, Rational, Complex, Integer, Fixnum, Float, Bignum,
                  TrueClass, FalseClass, Symbol, Time, Regexp, NilClass]
end

Private Class Methods

create_lookup() click to toggle source
# File lib/sire/entity_builder.rb, line 22
def create_lookup
  @nestable_lookup = Hash[nestables.map { |n| [to_sym(n), n] }]
end
invalid(k) click to toggle source
# File lib/sire/entity_builder.rb, line 43
def invalid(k)
  fail InvalidValueError, "#{k} is invalid. Accepted types: #{primitives | nestables}"
end
lookup_up_to_date?() click to toggle source
# File lib/sire/entity_builder.rb, line 26
def lookup_up_to_date?
  @nestable_lookup.respond_to?(:values) && @nestable_lookup.values == nestables
end
nested(k, v) click to toggle source
# File lib/sire/entity_builder.rb, line 34
def nested(k, v)
  return unless nested_class = @nestable_lookup[k]
  [k, nested_class.new(v)]
end
parse_values(hash) click to toggle source
# File lib/sire/entity_builder.rb, line 30
def parse_values(hash)
  Hash[hash.map { |k, v| nested(k, v) || primitive(k, v) || invalid(k) }]
end
primitive(k, v) click to toggle source
# File lib/sire/entity_builder.rb, line 39
def primitive(k, v)
  [k, v] if primitives.include?(v.class)
end
to_sym(klass) click to toggle source
# File lib/sire/entity_builder.rb, line 49
def to_sym(klass)
  Inflecto.underscore(Inflecto.demodulize(klass.to_s)).to_sym
end