class Praxis::Renderer
Attributes
cache[R]
include_nil[R]
Public Class Methods
new(include_nil: false)
click to toggle source
# File lib/praxis-blueprints/renderer.rb, line 22 def initialize(include_nil: false) @cache = Hash.new do |hash, key| hash[key] = {} end @include_nil = include_nil end
Public Instance Methods
_render(object, fields, view = nil, context: Attributor::DEFAULT_ROOT_CONTEXT)
click to toggle source
# File lib/praxis-blueprints/renderer.rb, line 58 def _render(object, fields, view = nil, context: Attributor::DEFAULT_ROOT_CONTEXT) if fields == true return case object when Attributor::Dumpable object.dump else object end end notification_payload = { blueprint: object, fields: fields, view: view } ActiveSupport::Notifications.instrument 'praxis.blueprint.render', notification_payload do fields.each_with_object({}) do |(key, subfields), hash| begin value = object._get_attr(key) rescue => e raise Attributor::DumpError.new(context: context, name: key, type: object.class, original_exception: e) end if value.nil? hash[key] = nil if self.include_nil next end if subfields == true hash[key] = case value when Attributor::Dumpable value.dump else value end else new_context = context + [key] hash[key] = render(value, subfields, context: new_context) end end end end
render(object, fields, view = nil, context: Attributor::DEFAULT_ROOT_CONTEXT)
click to toggle source
Renders an object using a given list of fields.
@param [Object] object the object to render @param [Hash] fields the correct set of fields, as from FieldExpander
# File lib/praxis-blueprints/renderer.rb, line 42 def render(object, fields, view = nil, context: Attributor::DEFAULT_ROOT_CONTEXT) if fields.is_a? Array sub_fields = fields[0] object.each_with_index.collect do |sub_object, i| sub_context = context + ["at(#{i})"] render(sub_object, sub_fields, view, context: sub_context) end elsif object.is_a? Praxis::Blueprint @cache[object._cache_key][fields] ||= _render(object, fields, view, context: context) else _render(object, fields, view, context: context) end rescue SystemStackError raise CircularRenderingError.new(object, context) end
render_collection(collection, member_fields, view = nil, context: Attributor::DEFAULT_ROOT_CONTEXT)
click to toggle source
Renders an a collection using a given list of per-member fields.
@param [Object] object the object to render @param [Hash] fields the set of fields, as from FieldExpander
, to apply to each member of the collection.
# File lib/praxis-blueprints/renderer.rb, line 34 def render_collection(collection, member_fields, view = nil, context: Attributor::DEFAULT_ROOT_CONTEXT) render(collection, [member_fields], view, context: context) end