lib/praxis-blueprints/renderer.rb in praxis-blueprints-3.2 vs lib/praxis-blueprints/renderer.rb in praxis-blueprints-3.3
- old
+ new
@@ -1,15 +1,16 @@
+# frozen_string_literal: true
module Praxis
class Renderer
attr_reader :include_nil
attr_reader :cache
class CircularRenderingError < StandardError
attr_reader :object
attr_reader :context
- def initialize(object,context)
+ def initialize(object, context)
@object = object
@context = context
first = Attributor.humanize_context(context[0..10])
last = Attributor.humanize_context(context[-5..-1])
@@ -17,84 +18,85 @@
super("SystemStackError in rendering #{object.class} with context: #{pretty_context}")
end
end
def initialize(include_nil: false)
- @cache = Hash.new do |hash,key|
- hash[key] = Hash.new
+ @cache = Hash.new do |hash, key|
+ hash[key] = {}
end
@include_nil = include_nil
end
# 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.
- def render_collection(collection, member_fields, view=nil, context: Attributor::DEFAULT_ROOT_CONTEXT)
- render(collection,[member_fields], view, context: context)
+ def render_collection(collection, member_fields, view = nil, context: Attributor::DEFAULT_ROOT_CONTEXT)
+ render(collection, [member_fields], view, context: context)
end
# 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
- def render(object, fields, view=nil, context: Attributor::DEFAULT_ROOT_CONTEXT)
- if fields.kind_of? Array
+ 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.kind_of? Praxis::Blueprint
- @cache[object.object_id][fields.object_id] ||= _render(object,fields, view, context: context)
+ elsif object.is_a? Praxis::Blueprint
+ @cache[object.object_id][fields.object_id] ||= _render(object, fields, view, context: context)
else
- _render(object,fields, view, context: context)
+ _render(object, fields, view, context: context)
end
rescue SystemStackError
raise CircularRenderingError.new(object, context)
end
- def _render(object, fields, view=nil, context: Attributor::DEFAULT_ROOT_CONTEXT)
+ 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
+ when Attributor::Dumpable
+ object.dump
+ else
+ object
+ end
end
notification_payload = {
blueprint: object,
fields: fields,
view: view
}
- ActiveSupport::Notifications.instrument 'praxis.blueprint.render'.freeze, notification_payload do
- fields.each_with_object(Hash.new) do |(key, subfields), hash|
+ 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, context: context, name: key, type: object.class, original_exception: e
end
- next if value.nil? && !self.include_nil
+ 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
+ when Attributor::Dumpable
+ value.dump
+ else
+ value
+ end
else
new_context = context + [key]
- hash[key] = self.render(value, subfields, context: new_context)
+ hash[key] = render(value, subfields, context: new_context)
end
-
end
end
end
-
end
end