45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/build/rulebook.rb', line 45
def with(superclass, **state)
task_class = Class.new(superclass)
@processes.each do |key, rules|
task_class.send(:define_method, key) do |arguments, &block|
rule = rules.find{|rule| rule.applicable? arguments }
if rule
invoke_rule(rule, arguments, &block)
else
raise NoApplicableRule.new(key, arguments)
end
end
end
@rules.each do |key, rule|
task_class.send(:define_method, rule.full_name) do |arguments, &block|
invoke_rule(rule, arguments, &block)
end
end
state.each do |key, value|
task_class.send(:define_method, key) do
value
end
end
return task_class
end
|