# 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
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
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