class JSONAPI::Serializable::Resource
Public Class Methods
new(exposures = {})
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
# File lib/jsonapi/serializable/resource.rb, line 18 def initialize(exposures = {}) @_exposures = exposures @_exposures.each { |k, v| instance_variable_set("@#{k}", v) } @_id = instance_eval(&self.class.id_block).to_s @_type = if (b = self.class.type_block) instance_eval(&b).to_sym else self.class.type_val || :unknown end @_relationships = self.class.relationship_blocks .each_with_object({}) do |(k, v), h| opts = self.class.relationship_options[k] || {} h[k] = Relationship.new(@_exposures, opts, &v) end @_meta = if (b = self.class.meta_block) instance_eval(&b) else self.class.meta_val end freeze end
Public Instance Methods
as_jsonapi(fields: nil, include: [])
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
# File lib/jsonapi/serializable/resource.rb, line 44 def as_jsonapi(fields: nil, include: []) attrs = requested_attributes(fields).each_with_object({}) do |(k, v), h| h[k] = instance_eval(&v) end rels = requested_relationships(fields) .each_with_object({}) do |(k, v), h| h[k] = v.as_jsonapi(include.include?(k)) end links = link_blocks.each_with_object({}) do |(k, v), h| h[k] = Link.as_jsonapi(@_exposures, &v) end {}.tap do |hash| hash[:id] = @_id hash[:type] = @_type hash[:attributes] = attrs if attrs.any? hash[:relationships] = rels if rels.any? hash[:links] = links if links.any? hash[:meta] = @_meta unless @_meta.nil? end end
jsonapi_cache_key(options)
click to toggle source
# File lib/jsonapi/serializable/resource.rb, line 80 def jsonapi_cache_key(options) "#{jsonapi_type} - #{jsonapi_id}" \ "- #{options[:include].to_a.sort}" \ "- #{(options[:fields] || Set.new).to_a.sort}" end
jsonapi_id()
click to toggle source
# File lib/jsonapi/serializable/resource.rb, line 70 def jsonapi_id @_id end
jsonapi_type()
click to toggle source
rubocop:enable Metrics/AbcSize, Metrics/MethodLength
# File lib/jsonapi/serializable/resource.rb, line 66 def jsonapi_type @_type end
Private Instance Methods
link_blocks()
click to toggle source
@api private
# File lib/jsonapi/serializable/resource.rb, line 100 def link_blocks self.class.link_blocks end
requested_attributes(fields)
click to toggle source
@api private
# File lib/jsonapi/serializable/resource.rb, line 89 def requested_attributes(fields) self.class.attribute_blocks .select { |k, _| fields.nil? || fields.include?(k) } end
requested_relationships(fields)
click to toggle source
@api private
# File lib/jsonapi/serializable/resource.rb, line 95 def requested_relationships(fields) @_relationships.select { |k, _| fields.nil? || fields.include?(k) } end