class EmberDataActiveModelParser::EmbedAssociations
Attributes
root_json[R]
Public Class Methods
new(root_json)
click to toggle source
# File lib/ember_data_active_model_parser/embed_associations.rb, line 5 def initialize(root_json) @root_json = root_json end
Public Instance Methods
call()
click to toggle source
# File lib/ember_data_active_model_parser/embed_associations.rb, line 9 def call root_json.each do |key, value| walk(value) end end
Private Instance Methods
association_array(association_name)
click to toggle source
# File lib/ember_data_active_model_parser/embed_associations.rb, line 59 def association_array(association_name) root_json[association_name.pluralize.to_sym] end
association_ids_key(key, value)
click to toggle source
# File lib/ember_data_active_model_parser/embed_associations.rb, line 51 def association_ids_key(key, value) key.to_s =~ /(.+)_id(s?)$/ && association_array(association_name(key)) && (value.is_a?(Array) || value.is_a?(Fixnum) || value.nil?) end
association_name(key)
click to toggle source
# File lib/ember_data_active_model_parser/embed_associations.rb, line 55 def association_name(key) key[/^(.+)_id(s?)$/, 1] end
handle_association_ids(hash, association_ids, association_name)
click to toggle source
# File lib/ember_data_active_model_parser/embed_associations.rb, line 36 def handle_association_ids(hash, association_ids, association_name) case association_ids when Array hash[association_name.pluralize.to_sym] = { association_name.pluralize.to_sym => association_ids.map { |association_id| association_array(association_name).find { |association_item| association_item[:id] == association_id } } } when Fixnum hash[association_name.to_sym] = association_array(association_name).find { |association_item| association_item[:id] == association_ids } when nil hash[association_name.to_sym] = nil end end
walk(object)
click to toggle source
# File lib/ember_data_active_model_parser/embed_associations.rb, line 19 def walk(object) case object when Array object.each { |element| walk(element) } when Hash walk_hash(object) end end
walk_hash(hash)
click to toggle source
# File lib/ember_data_active_model_parser/embed_associations.rb, line 28 def walk_hash(hash) hash.keys.each do |key| if association_ids_key(key, hash[key]) handle_association_ids(hash, hash[key], association_name(key)) end end end