Implement Recipe{.,#}compose_macro
This commit is contained in:
parent
a60140a1d4
commit
52ecf4899b
15
features/recipe_compose_macro.feature
Normal file
15
features/recipe_compose_macro.feature
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
Feature: `compose_macro' recipe keyword
|
||||||
|
|
||||||
|
Scenario: allows macro composition
|
||||||
|
Given a recipe with:
|
||||||
|
"""
|
||||||
|
macro :hello do |prefix, *args|
|
||||||
|
echo 'hello %s %s' % [prefix, args.join(', ')]
|
||||||
|
end
|
||||||
|
|
||||||
|
compose_macro :hello_composed, :hello, 'composed'
|
||||||
|
|
||||||
|
hello_composed :foo, :bar
|
||||||
|
"""
|
||||||
|
When I successfully execute the recipe
|
||||||
|
Then the output must contain "hello composed foo, bar"
|
@ -5,6 +5,10 @@ module Producer
|
|||||||
def define_macro(name, block)
|
def define_macro(name, block)
|
||||||
define_method(name) { |*args| task name, *args, &block }
|
define_method(name) { |*args| task name, *args, &block }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def compose_macro(name, meth, *base_args)
|
||||||
|
define_method(name) { |*args| send meth, *(base_args + args) }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :env, :tasks
|
attr_reader :env, :tasks
|
||||||
@ -27,11 +31,17 @@ module Producer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def macro(name, &block)
|
def macro(name, &block)
|
||||||
define_singleton_method(name) do |*args|
|
define_singleton_method name do |*args|
|
||||||
task "#{name}", *args, &block
|
task "#{name}", *args, &block
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def compose_macro(name, meth, *base_args)
|
||||||
|
define_singleton_method name do |*args|
|
||||||
|
send meth, *(base_args + args)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_macro(name, &block)
|
def test_macro(name, &block)
|
||||||
Condition.define_test(name, block)
|
Condition.define_test(name, block)
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user