Class: Praxis::Renderer
- Inherits:
-
Object
- Object
- Praxis::Renderer
- Defined in:
- lib/praxis/renderer.rb
Defined Under Namespace
Classes: CircularRenderingError
Instance Attribute Summary collapse
-
#cache ⇒ Object
readonly
Returns the value of attribute cache.
-
#include_nil ⇒ Object
readonly
Returns the value of attribute include_nil.
Instance Method Summary collapse
- #_render(object, fields, context: Attributor::DEFAULT_ROOT_CONTEXT) ⇒ Object
-
#initialize(include_nil: false) ⇒ Renderer
constructor
A new instance of Renderer.
-
#render(object, fields, context: Attributor::DEFAULT_ROOT_CONTEXT) ⇒ Object
Renders an object using a given list of fields.
Constructor Details
#initialize(include_nil: false) ⇒ Renderer
Returns a new instance of Renderer.
21 22 23 24 25 26 27 |
# File 'lib/praxis/renderer.rb', line 21 def initialize(include_nil: false) @cache = Hash.new do |hash, key| hash[key] = {} end @include_nil = include_nil end |
Instance Attribute Details
#cache ⇒ Object (readonly)
Returns the value of attribute cache.
5 6 7 |
# File 'lib/praxis/renderer.rb', line 5 def cache @cache end |
#include_nil ⇒ Object (readonly)
Returns the value of attribute include_nil.
5 6 7 |
# File 'lib/praxis/renderer.rb', line 5 def include_nil @include_nil end |
Instance Method Details
#_render(object, fields, context: Attributor::DEFAULT_ROOT_CONTEXT) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/praxis/renderer.rb', line 48 def _render(object, fields, context: Attributor::DEFAULT_ROOT_CONTEXT) if fields == true return case object when Attributor::Dumpable object.dump else object end end fields.each_with_object({}) do |(key, subfields), hash| begin value = object._get_attr(key) rescue StandardError => e raise Attributor::DumpError.new(context: context, name: key, type: object.class, original_exception: e) end if value.nil? hash[key] = nil if 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 |
#render(object, fields, context: Attributor::DEFAULT_ROOT_CONTEXT) ⇒ Object
Renders an object using a given list of fields.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/praxis/renderer.rb', line 33 def render(object, fields, context: Attributor::DEFAULT_ROOT_CONTEXT) if object.is_a? Praxis::Blueprint @cache[object._cache_key][fields] ||= _render(object, fields, context: context) elsif object.class < Attributor::Collection object.each_with_index.collect do |sub_object, i| sub_context = context + ["at(#{i})"] render(sub_object, fields, context: sub_context) end else _render(object, fields, context: context) end rescue SystemStackError raise CircularRenderingError.new(object, context) end |