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