class Ivy::Serializers::Formats::JSON

Public Class Methods

new(document) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 8
def initialize(document)
  @document = document
  @hash_gen = HashGenerator.new
end

Public Instance Methods

as_json(*) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 13
def as_json(*)
  @document.generate(self)
  @hash_gen.to_h
end
attribute(key, value) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 18
def attribute(key, value)
  @hash_gen.store(key, value)
end
attributes(resource) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 22
def attributes(resource)
  @document.generate_attributes(self, resource)
end
belongs_to(name, resource, options={}) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 26
def belongs_to(name, resource, options={})
  id(name, resource)
end
document(document) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 30
def document(document)
  document.generate_primary_resource(self)
  document.generate_included(self)
end
has_many(name, resources, options={}) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 35
def has_many(name, resources, options={})
  ids(name, resources)
end
id(key, resource) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 39
def id(key, resource)
  attribute(key, extract_id(resource))
end
ids(key, resources) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 43
def ids(key, resources)
  attribute(key, resources.map { |resource| extract_id(resource) })
end
included(document) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 47
def included(document)
  document.generate_included_resources(self)
end
included_resources(included_resources) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 51
def included_resources(included_resources)
  included_resources.each_pair do |resource_class, resources|
    key = key_for_collection(resource_class).to_sym
    @hash_gen.store_array(key) { resources(resources) }
  end
end
primary_resource(primary_resource_name, primary_resource) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 58
def primary_resource(primary_resource_name, primary_resource)
  @hash_gen.store_object(primary_resource_name) { resource(primary_resource) }
end
primary_resources(primary_resources_name, primary_resources) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 62
def primary_resources(primary_resources_name, primary_resources)
  @hash_gen.store_array(primary_resources_name) { resources(primary_resources) }
end
relationships(resource) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 66
def relationships(resource)
  @document.generate_relationships(self, resource)
end
resource(resource) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 70
def resource(resource)
  id(:id, resource)
  @document.generate_resource(self, resource)
end
resources(resources) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 75
def resources(resources)
  resources.each { |resource| @hash_gen.push_object { resource(resource) } }
end
type(key, resource) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 79
def type(key, resource)
  attribute(key, extract_type(resource))
end

Private Instance Methods

extract_id(resource) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 85
def extract_id(resource)
  resource.id if resource
end
extract_type(resource) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 89
def extract_type(resource)
  Inflecto.dasherize(key_for_individual(resource.class))
end
key_for_collection(resource_class) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 93
def key_for_collection(resource_class)
  Inflecto.pluralize(key_for_individual(resource_class))
end
key_for_individual(resource_class) click to toggle source
# File lib/ivy/serializers/formats/json.rb, line 97
def key_for_individual(resource_class)
  Inflecto.underscore(resource_class.name)
end