From e724c325b7c3593be1afe2d9707f3d439d821e33 Mon Sep 17 00:00:00 2001 From: Tyler Hunt Date: Fri, 30 May 2025 15:37:29 -0400 Subject: [PATCH] Pass options as keywords during block extraction Signed-off-by: Tyler Hunt --- lib/blueprinter/extractors/block_extractor.rb | 2 +- spec/integrations/shared/base_render_examples.rb | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/blueprinter/extractors/block_extractor.rb b/lib/blueprinter/extractors/block_extractor.rb index 44210262..946d7dc1 100644 --- a/lib/blueprinter/extractors/block_extractor.rb +++ b/lib/blueprinter/extractors/block_extractor.rb @@ -6,7 +6,7 @@ module Blueprinter # @api private class BlockExtractor < Extractor def extract(_field_name, object, local_options, options = {}) - options[:block].call(object, local_options) + options[:block].call(object, **local_options) end end end diff --git a/spec/integrations/shared/base_render_examples.rb b/spec/integrations/shared/base_render_examples.rb index b49e9fbd..91d0be33 100644 --- a/spec/integrations/shared/base_render_examples.rb +++ b/spec/integrations/shared/base_render_examples.rb @@ -516,6 +516,20 @@ def self.if_method(_field_name, _object, _local_opts) it('returns json with values derived from options') { should eq(result) } end + context 'Given ::render with options with keyword field option' do + subject { blueprint.render(obj, vehicle: vehicle) } + let(:result) { '{"id":' + obj_id + ',"vehicle_make":"Super Car"}' } + let(:blueprint) do + Class.new(Blueprinter::Base) do + identifier :id + field :vehicle_make do |_obj, vehicle:, **| + "#{vehicle[:make]}" + end + end + end + it('returns json with values derived from options') { should eq(result) } + end + context 'Given ::render in a nested included view, original view is accessible in options' do let(:blueprint) do Class.new(Blueprinter::Base) do