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