Skip to content

Commit f56acf5

Browse files
committed
Allow builder with argument.
1 parent 077da1d commit f56acf5

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

lib/async/service/environment.rb

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,24 @@ def self.for(*facets, **values, &block)
2424
end
2525
end
2626

27-
builder.instance_exec(&block) if block_given?
27+
# This allows for a convenient syntax, e.g.:
28+
#
29+
# Builder.for do
30+
# foo 42
31+
# end
32+
#
33+
# or:
34+
#
35+
# Builder.for do |builder|
36+
# builder.foo 42
37+
# end
38+
if block_given?
39+
if block.arity == 0
40+
builder.instance_exec(&block)
41+
else
42+
yield builder
43+
end
44+
end
2845

2946
return top
3047
end

test/async/service/environment.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ def my_method(x, y)
2828
expect(environment.to_h).to have_keys(my_key: be == 'value')
2929
end
3030

31+
it 'can use other methods' do
32+
environment = subject.build do |builder|
33+
builder.dir __dir__
34+
end
35+
36+
expect(environment.to_h).to have_keys(dir: be == __dir__)
37+
end
38+
3139
it 'can evaluate methods' do
3240
environment = subject.build do
3341
include MyEnvironment

0 commit comments

Comments
 (0)