lib/lopata/step.rb in lopata-0.1.0 vs lib/lopata/step.rb in lopata-0.1.1
- old
+ new
@@ -1,30 +1,35 @@
module Lopata
class Step
- attr_reader :block, :status, :exception
+ attr_reader :block, :status, :exception, :args, :condition
- def initialize(method_name, *args, &block)
+ def initialize(method_name, *args, condition: nil, &block)
@method_name = method_name
@args = args
@status = :not_started
@block = block
@exception = nil
+ @condition = condition || Lopata::Condition::EMPTY
end
def run(scenario)
@status = :running
world.notify_observers(:step_started, self)
begin
- scenario.instance_exec(&block)
+ run_step(scenario)
@status = :passed
rescue Exception => e
@status = :failed
@exception = e
end
world.notify_observers(:step_finished, self)
end
+ def run_step(scenario)
+ scenario.instance_exec(&block) if block
+ end
+
def world
@world ||= Lopata::Config.world
end
def failed?
@@ -36,7 +41,46 @@
end
def teardown?
%i{ teardown cleanup }.include?(@method_name)
end
+
+ def pre_steps(scenario)
+ []
+ end
+ end
+
+ # Used for action, setup, teardown
+ class ActionStep < Step
+ def pre_steps(scenario)
+ steps = []
+ convert_args(scenario).each do |step|
+ if step.is_a?(String)
+ Lopata::SharedStep.find(step).steps.each do |shared_step|
+ steps += shared_step.pre_steps(scenario)
+ steps << shared_step
+ end
+ elsif step.is_a?(Proc)
+ steps << Lopata::Step.new(method_name, &step)
+ end
+ end
+ steps
+ end
+
+ def separate_args(args)
+ args.map { |a| a.is_a?(String) && a =~ /,/ ? a.split(',').map(&:strip) : a }.flatten
+ end
+
+ def convert_args(scenario)
+ flat_args = separate_args(args.flatten)
+ flat_args.map do |arg|
+ case arg
+ # trait symbols as link to metadata.
+ when Symbol then scenario.metadata[arg]
+ else
+ arg
+ end
+ end.flatten
+ end
+
end
end
\ No newline at end of file