class ActiveModelSerializers::Adapter::Normalizr

Public Class Methods

default_key_transform() click to toggle source
# File lib/active_model_serializers/adapter/normalizr.rb, line 2
def self.default_key_transform
  :camel_lower
end

Public Instance Methods

serializable_hash(options = nil) click to toggle source
# File lib/active_model_serializers/adapter/normalizr.rb, line 6
def serializable_hash(options = nil)
  options = serialization_options(options)

  serialized_hash = {
    'result' => result,
    'entities' => entities(options)
  }

  self.class.transform_key_casing!(serialized_hash, options)
end

Private Instance Methods

entities(options = nil) click to toggle source
# File lib/active_model_serializers/adapter/normalizr.rb, line 27
def entities(options = nil)
  h = {}

  serializers = serializer.respond_to?(:each) ? serializer : Array(serializer)

  serializers.each do |ser|
    # Main object(s) to be serialized
    main_entity_name = ser.json_key.pluralize
    main_entity_id = ser.object.id

    h[main_entity_name] ||= {}
    h[main_entity_name][main_entity_id] = ser.attributes.stringify_keys

    # Associated objects
    ser.associations.each do |assoc|
      entity_name = assoc.name.to_s
      entities_name = entity_name.pluralize
      entity_object = ser.object.send(assoc.name)
      assoc_ids =
        if entity_object.nil?
          nil
        elsif entity_object.respond_to?(:each)
          entity_object.map(&:id)
        else
          entity_object.id
        end

      # Ensure that objects contain ids of their associated models
      h[main_entity_name][main_entity_id][entity_name] = assoc_ids
      h[entities_name] ||= {}

      if assoc.serializer.nil?
        Array(assoc.options[:virtual_value]).each do |v_value|
          h[entities_name][v_value['id']] = v_value.stringify_keys
        end
      else
        Array(assoc.serializer).try(:each) do |assoc_ser|
          h[entities_name][assoc_ser.object.id] = assoc_ser.as_json.stringify_keys
        end
      end
    end
  end

  h
end
obj() click to toggle source
# File lib/active_model_serializers/adapter/normalizr.rb, line 19
def obj
  serializer.object
end
object_key(object) click to toggle source
# File lib/active_model_serializers/adapter/normalizr.rb, line 73
def object_key(object)
  if object.is_a? ActiveRecord::Relation
    object.model.model_name.plural
  else
    object.class.model_name.plural
  end
end
result() click to toggle source
# File lib/active_model_serializers/adapter/normalizr.rb, line 23
def result
  obj.respond_to?(:each) ? obj.map(&:id) : obj.id
end