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