24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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
|
# File 'lib/stepstepstep.rb', line 24
def step(opts, opts2 = nil, &blk)
opts = opts2.merge(opts => nil) if opts2.is_a?(Hash)
__opts = {}
if opts.is_a?(Hash)
[:only, :except, :if].each do |symbol|
__opts[symbol] = opts.delete(symbol) if opts[symbol]
end
step_name, __deps = opts.first
step_name = step_name.to_sym
add_step_to_dep step_name, __deps
self._before_filter_opts_hash[step_name] = __opts
elsif opts.is_a?(Symbol) || opts.is_a?(String)
step_name = opts.to_sym
add_step_to_dep step_name
else
raise "Please use Hash, Symbol, String for opts"
end
if self._steps_set.include?(step_name)
if not self.instance_methods.include?(step_name)
blk ||= (Proc.new {})
define_method(step_name, blk)
else
Rails.logger.info "#{self.class.name}##{step_name} is already defined!"
end
end
send(:before_filter, step_name, self._before_filter_opts_hash[step_name])
self._steps_set.each {|n1| self.skip_before_filter n1 }
_steps = self._step_to_deps.tsort
_steps.each do |n1|
if self.instance_methods.include?(n1)
puts "filter to opts: #{n1}, #{self._before_filter_opts_hash}" if ENV['DEBUG_STEPSTEPSTE']
self.send(:before_filter, n1, self._before_filter_opts_hash[n1])
end
end
end
|