X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/ddd5b4cf19a92582fd114914be5bd5a04d3522a7..3f607d565bc0e2c7b1b738301c11c16d069913d5:/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_mediator.rb diff --git a/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_mediator.rb b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_mediator.rb new file mode 100644 index 000000000..1f4744b9f --- /dev/null +++ b/vendor/gems/rspec-1.1.2/lib/spec/story/runner/story_mediator.rb @@ -0,0 +1,123 @@ + module Spec + module Story + module Runner + + class StoryMediator + def initialize(step_group, runner, options={}) + @step_group = step_group + @stories = [] + @runner = runner + @options = options + end + + def stories + @stories.collect { |p| p.to_proc } + end + + def create_story(title, narrative) + @stories << Story.new(title, narrative, @step_group, @options) + end + + def create_scenario(title) + current_story.add_scenario Scenario.new(title) + end + + def create_given(name) + current_scenario.add_step Step.new('Given', name) + end + + def create_given_scenario(name) + current_scenario.add_step Step.new('GivenScenario', name) + end + + def create_when(name) + current_scenario.add_step Step.new('When', name) + end + + def create_then(name) + current_scenario.add_step Step.new('Then', name) + end + + def run_stories + stories.each { |story| @runner.instance_eval(&story) } + end + + private + def current_story + @stories.last + end + + def current_scenario + current_story.current_scenario + end + + class Story + def initialize(title, narrative, step_group, options) + @title = title + @narrative = narrative + @scenarios = [] + @step_group = step_group + @options = options + end + + def to_proc + title = @title + narrative = @narrative + scenarios = @scenarios.collect { |scenario| scenario.to_proc } + options = @options.merge(:steps => @step_group) + lambda do + Story title, narrative, options do + scenarios.each { |scenario| instance_eval(&scenario) } + end + end + end + + def add_scenario(scenario) + @scenarios << scenario + end + + def current_scenario + @scenarios.last + end + end + + class Scenario + def initialize(name) + @name = name + @steps = [] + end + + def to_proc + name = @name + steps = @steps.collect { |step| step.to_proc } + lambda do + Scenario name do + steps.each { |step| instance_eval(&step) } + end + end + end + + def add_step(step) + @steps << step + end + end + + class Step + def initialize(type, name) + @type = type + @name = name + end + + def to_proc + type = @type + name = @name + lambda do + send(type, name) + end + end + end + end + + end + end +end