32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/rspec_param.rb', line 32
def param(name, default=nil, accumulate: false, &block)
raise "One of a default param or block is required" unless default || block || accumulate
block ||= lambda { accumulate ? (default || []) : default }
let(name, &block)
define_singleton_method(name) do |value=nil, &inner_block|
raise "One of a value param or block is required" unless value || inner_block
let_block = if accumulate
ivar = "@param_context_#{name}"
existing_values = instance_variable_get(ivar) || []
existing_values << [value, inner_block]
instance_variable_set(ivar, existing_values)
lambda do
super() + existing_values.map {|v, b| b ? instance_eval(&b) : v }
end
else
inner_block || lambda { value }
end
let(name, &let_block)
end
end
|