class Normalizr::Schema
Public Class Methods
new(name, definition={})
click to toggle source
# File lib/normalizr/schema.rb, line 5 def initialize name, definition={} @name = name @definition = definition end
Public Instance Methods
unvisit(obj, id)
click to toggle source
# File lib/normalizr/schema.rb, line 23 def unvisit obj, id # TODO: Write test for why this conditional needs to be here. # I believe it has something to do with whether the root keys # are originally symbols or non-symbols. unless obj.include? @name.to_s.to_sym raise ArgumentError.new("Type '#{@name}' does not exist but foreign key '#{id}' was found") end normalized = (obj[@name.to_s.to_sym][id] || obj[@name.to_s.to_sym][id.to_s.to_sym]) if normalized.nil? raise ArgumentError.new("Type '#{@name}' does not contain record with key '#{id}'") end denormalized = @definition.keys.map do |key| value = @definition[key].unvisit(obj, normalized[key]) Hash[key, value] end.reduce({}, &:merge) normalized.merge(denormalized) end
visit(obj, bag)
click to toggle source
# File lib/normalizr/schema.rb, line 11 def visit obj, bag if obj.is_a? Hash relationships = @definition.keys.map do |key| id = @definition[key].visit(obj[key], bag) Hash[key, id] end.reduce({}, &:merge) bag.add(@name, obj.merge(relationships)) end end