module Stepstepstep::ClassMethods
Public Instance Methods
step(opts, opts2 = nil, &blk)
click to toggle source
# File lib/stepstepstep.rb, line 24 def step(opts, opts2 = nil, &blk) # adjust params opts = opts2.merge(opts => nil) if opts2.is_a?(Hash) # prepare data __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 # define method 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 # 1. append first send(:before_filter, step_name, self._before_filter_opts_hash[step_name]) # 2. extract all self._steps_set.each {|n1| self.skip_before_filter n1 } # 3. resort _steps = self._step_to_deps.tsort _steps.each do |n1| # 4. reappend all 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
Private Instance Methods
add_step_to_dep(n1, deps = nil)
click to toggle source
# File lib/stepstepstep.rb, line 73 def add_step_to_dep n1, deps = nil self._steps_set.add n1 deps = Array(deps).compact deps.each {|i| self._steps_set.add i } self._step_to_deps[n1] = deps end