| Module | Spec::Story::World |
| In: |
lib/spec/story/world.rb
|
# File lib/spec/story/world.rb, line 31
31: def add_listener(listener)
32: listeners() << listener
33: end
# File lib/spec/story/world.rb, line 23
23: def create(cls = Object, *args)
24: cls.new(*args).extend(World)
25: end
# File lib/spec/story/world.rb, line 47
47: def run_given_scenario_with_suspended_listeners(world, type, name, scenario)
48: current_listeners = Array.new(listeners)
49: begin
50: listeners.each { |l| l.found_scenario(type, name) }
51: @listeners.clear
52: scenario.perform(world, name) unless ::Spec::Story::Runner.dry_run
53: ensure
54: @listeners.replace(current_listeners)
55: end
56: end
# File lib/spec/story/world.rb, line 35
35: def step_mother
36: @step_mother ||= StepMother.new
37: end
# File lib/spec/story/world.rb, line 58
58: def store_and_call(world, type, name, *args, &block)
59: if block_given?
60: step_mother.store(type, Step.new(name, &block))
61: end
62: step = step_mother.find(type, name)
63:
64: step_name = step.name
65: step_names << step_name
66:
67: # It's important to have access to the parsed args here, so
68: # we can give them to the listeners. The HTML reporter needs
69: # the args so it can style them. See the generated output in
70: # story_server/prototype/rspec_stories.html (generated by rake stories)
71: args = step.parse_args(name) if args.empty?
72: begin
73: step.perform(world, *args) unless ::Spec::Story::Runner.dry_run
74: listeners.each { |l| l.step_succeeded(type, step_name, *args) }
75: rescue Exception => e
76: case e
77: when Spec::Example::ExamplePendingError
78: @listeners.each { |l| l.step_pending(type, step_name, *args) }
79: else
80: @listeners.each { |l| l.step_failed(type, step_name, *args) }
81: end
82: errors << e
83: end
84: end
# File lib/spec/story/world.rb, line 119
119: def And(name, *args, &block)
120: World.store_and_call self, @__previous_step, name, *args, &block
121: end
# File lib/spec/story/world.rb, line 104
104: def Given(name, *args, &block)
105: World.store_and_call self, :given, name, *args, &block
106: @__previous_step = :given
107: end
# File lib/spec/story/world.rb, line 99
99: def GivenScenario(name)
100: World.run_given_scenario_with_suspended_listeners(self, 'given scenario''given scenario', name, GivenScenario.new(name))
101: @__previous_step = :given
102: end
# File lib/spec/story/world.rb, line 114
114: def Then(name, *args, &block)
115: World.store_and_call self, :then, name, *args, &block
116: @__previous_step = :then
117: end
# File lib/spec/story/world.rb, line 109
109: def When(name, *args, &block)
110: World.store_and_call self, :when, name, *args, &block
111: @__previous_step = :when
112: end