class NormalizrRuby::Converter
Public Class Methods
new(context)
click to toggle source
# File lib/normalizr_ruby/converter.rb, line 5 def initialize(context) @context = context @entities = {} @result = nil end
Public Instance Methods
normalize(resource, options)
click to toggle source
# File lib/normalizr_ruby/converter.rb, line 11 def normalize(resource, options) opts = options.presence || {} @result = walk(resource, opts) { result: @result, entities: @entities } rescue SchemaNotFound => e resource end
Private Instance Methods
init_schema(resource, options)
click to toggle source
# File lib/normalizr_ruby/converter.rb, line 38 def init_schema(resource, options) schema_klass = options[:schema].presence || schema_class(resource) schema_klass.new(resource, @context, options.except(:schema)) end
not_found(klass)
click to toggle source
# File lib/normalizr_ruby/converter.rb, line 26 def not_found(klass) raise SchemaNotFound, "#{klass.name}Schema is not found." end
recase(value)
click to toggle source
# File lib/normalizr_ruby/converter.rb, line 21 def recase(value) key_transform = NormalizrRuby.config.key_transform KeyTransform.send(key_transform, value) end
schema_class(resource)
click to toggle source
# File lib/normalizr_ruby/converter.rb, line 30 def schema_class(resource) klass = resource.class klass = klass.base_class if klass.respond_to?(:base_class) schema_klass = "#{klass.name}Schema".safe_constantize not_found(klass) if schema_klass.nil? schema_klass end
walk(resource, options)
click to toggle source
# File lib/normalizr_ruby/converter.rb, line 43 def walk(resource, options) result = nil if resource.respond_to?(:map) result = resource.map {|r| walk(r, options)} else schema = init_schema(resource, options) hash = schema.attributes schema.associations.each do |assoc, assoc_options| assoc_resource = schema.association_resource(assoc) assoc_result = nil unless assoc_resource.nil? assoc_result = walk(assoc_resource, assoc_options) end hash[assoc] = assoc_result end result = schema.object.id entity_key = recase(schema.entity_key) @entities[entity_key] ||= {} @entities[entity_key][result] = recase(hash) end result end