module AbcJsonapi::Serializer

Attributes

includes[R]
meta[R]
relationships[R]
resource[R]
resource_attributes[R]
resource_type[R]
result_hash[R]
virtual_attributes[R]

Public Class Methods

new(resource, options = {}) click to toggle source
# File lib/abc_jsonapi/serializer.rb, line 16
def initialize(resource, options = {})
  @resource = resource
  @result_hash = { data: nil }
  @resource_type = self.class.resource_type
  @resource_attributes = self.class.resource_attributes
  @relationships = self.class.relationships
  @virtual_attributes = self.class.virtual_attributes
  @includes = options[:include]
  @meta = options[:meta]
end

Public Instance Methods

serializable_hash() click to toggle source
# File lib/abc_jsonapi/serializer.rb, line 27
def serializable_hash
  result_hash[:meta] = meta if meta.present?
  result_hash[:data] = data_hash
  result_hash[:included] = included_hash if @includes.present?
  result_hash
end
serialized_json() click to toggle source
# File lib/abc_jsonapi/serializer.rb, line 34
def serialized_json
  ActiveSupport::JSON.encode(serializable_hash)
end

Private Instance Methods

data_hash() click to toggle source
# File lib/abc_jsonapi/serializer.rb, line 91
def data_hash
  if resource.is_a?(Enumerable)
    AbcJsonapi::Collection.new(
      collection: resource,
      resource_type: resource_type,
      resource_attributes: resource_attributes,
      virtual_attributes: virtual_attributes,
      relationships: relationships
    ).serializable_hash
  else
    AbcJsonapi::Model.new(
      model: resource,
      resource_type: resource_type,
      resource_attributes: resource_attributes,
      virtual_attributes: virtual_attributes,
      relationships: relationships
    ).serializable_hash
  end
end
included_hash() click to toggle source
# File lib/abc_jsonapi/serializer.rb, line 79
def included_hash
  AbcJsonapi::IncludedResource.new(
    resource: resource,
    includes: includes,
    serializer_namespace: namespace
  ).serializable_hash
end
namespace() click to toggle source
# File lib/abc_jsonapi/serializer.rb, line 87
def namespace
  self.class.name.gsub(/()?\w+Serializer$/, '')
end