changelog shortlog tags changeset manifest revisions annotate raw

vendor/plugins/rspec/lib/spec/story/runner/story_mediator.rb

changeset 15: 64acf98d15f4
author: moriq@moriq.com
date: Mon Mar 10 10:12:58 2008 +0900 (16 years ago)
permissions: -rw-r--r--
description: add plugins rspec
1 module Spec
2 module Story
3 module Runner
4
5 class StoryMediator
6 def initialize(step_group, runner, options={})
7 @step_group = step_group
8 @stories = []
9 @runner = runner
10 @options = options
11 end
12
13 def stories
14 @stories.collect { |p| p.to_proc }
15 end
16
17 def create_story(title, narrative)
18 @stories << Story.new(title, narrative, @step_group, @options)
19 end
20
21 def create_scenario(title)
22 current_story.add_scenario Scenario.new(title)
23 end
24
25 def create_given(name)
26 current_scenario.add_step Step.new('Given', name)
27 end
28
29 def create_given_scenario(name)
30 current_scenario.add_step Step.new('GivenScenario', name)
31 end
32
33 def create_when(name)
34 current_scenario.add_step Step.new('When', name)
35 end
36
37 def create_then(name)
38 current_scenario.add_step Step.new('Then', name)
39 end
40
41 def run_stories
42 stories.each { |story| @runner.instance_eval(&story) }
43 end
44
45 private
46 def current_story
47 @stories.last
48 end
49
50 def current_scenario
51 current_story.current_scenario
52 end
53
54 class Story
55 def initialize(title, narrative, step_group, options)
56 @title = title
57 @narrative = narrative
58 @scenarios = []
59 @step_group = step_group
60 @options = options
61 end
62
63 def to_proc
64 title = @title
65 narrative = @narrative
66 scenarios = @scenarios.collect { |scenario| scenario.to_proc }
67 options = @options.merge(:steps => @step_group)
68 lambda do
69 Story title, narrative, options do
70 scenarios.each { |scenario| instance_eval(&scenario) }
71 end
72 end
73 end
74
75 def add_scenario(scenario)
76 @scenarios << scenario
77 end
78
79 def current_scenario
80 @scenarios.last
81 end
82 end
83
84 class Scenario
85 def initialize(name)
86 @name = name
87 @steps = []
88 end
89
90 def to_proc
91 name = @name
92 steps = @steps.collect { |step| step.to_proc }
93 lambda do
94 Scenario name do
95 steps.each { |step| instance_eval(&step) }
96 end
97 end
98 end
99
100 def add_step(step)
101 @steps << step
102 end
103 end
104
105 class Step
106 def initialize(type, name)
107 @type = type
108 @name = name
109 end
110
111 def to_proc
112 type = @type
113 name = @name
114 lambda do
115 send(type, name)
116 end
117 end
118 end
119 end
120
121 end
122 end
123end