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