lib/jb/action_view_monkeys.rb in jb-0.7.1 vs lib/jb/action_view_monkeys.rb in jb-0.8.0
- old
+ new
@@ -5,17 +5,32 @@
# A monkey-patch that converts non-partial result to a JSON String
module TemplateRenderer
module JSONizer
def render_template(_view, template, *)
rendered_template = super
- rendered_template.instance_variable_set :@body, MultiJson.dump(rendered_template.body) if template.respond_to?(:handler) && (template.handler == Jb::Handler)
+ rendered_template.instance_variable_set :@body, rendered_template.body.to_json if template.respond_to?(:handler) && (template.handler == Jb::Handler)
rendered_template
end
end
end
- # A monkey-patch for jb template collection result's `body` not to return a String but an Array
+ # Rails 6.1+: A monkey-patch for jb template collection result's `body` not to return a String but an Array
+ module CollectionRendererExtension
+ private def render_collection(_collection, _view, _path, template, _layout, _block)
+ obj = super
+ if template.respond_to?(:handler) && (template.handler == Jb::Handler)
+ if ActionView::AbstractRenderer::RenderedCollection::EmptyCollection === obj
+ def obj.body; []; end
+ else
+ def obj.body; @rendered_templates.map(&:body); end
+ end
+ end
+ obj
+ end
+ end
+
+ # Rails 6.0: A monkey-patch for jb template collection result's `body` not to return a String but an Array
module PartialRendererExtension
private def render_collection(_view, template)
obj = super
if template.respond_to?(:handler) && (template.handler == Jb::Handler)
if ActionView::AbstractRenderer::RenderedCollection::EmptyCollection === obj
@@ -28,6 +43,11 @@
end
end
end
::ActionView::TemplateRenderer.prepend ::Jb::TemplateRenderer::JSONizer
-::ActionView::PartialRenderer.prepend ::Jb::PartialRendererExtension
+begin
+ # ActionView::CollectionRenderer is a newly added class since 6.1
+ ::ActionView::CollectionRenderer.prepend ::Jb::CollectionRendererExtension
+rescue NameError
+ ::ActionView::PartialRenderer.prepend ::Jb::PartialRendererExtension
+end