class Rails::Surrender::Render::Resource

Rendering a resource, and it's various nested components, according to the given config params.

Attributes

ability[R]
config[R]
resource[R]

Public Class Methods

new(resource:, ability:, config:) click to toggle source
# File lib/rails/surrender/render/resource.rb, line 14
def initialize(resource:, ability:, config:)
  @resource = resource
  @ability = ability
  @config  = config
end

Public Instance Methods

parse() click to toggle source
# File lib/rails/surrender/render/resource.rb, line 20
def parse
  data = case resource
         when nil? then {}
         when Hash || Array then resource
         when ActiveRecord::Relation then collection_data
         else instance_data
         end
  Response.new(data: data)
end

Private Instance Methods

collection_data() click to toggle source
# File lib/rails/surrender/render/resource.rb, line 32
def collection_data
  includes = InclusionMapper.new(resource_class: resource.klass, config: config).parse
  data = @resource.includes(includes)
  Collection.new(resource: data, config: config, ability: ability).render
end
instance_data() click to toggle source
# File lib/rails/surrender/render/resource.rb, line 38
def instance_data
  # Reloading the instance here allows us to take advantage of the eager loading
  # capabilities of ActiveRecord with our 'includes' hash to prevent N+1 queries.
  # This can save a TON of response time when the data sets begin to get large.
  data = if config.reload_resource?
           includes = InclusionMapper.new(resource_class: resource.class, config: config).parse
           @resource = resource.class.includes(includes).find_by_id(resource.id)
         else
           resource
         end

  Instance.new(resource: data, config: config, ability: ability).render
end