spinach 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm --create use 1.9.3@spinach
1
+ rvm --create use 2.0.0@spinach
data/.travis.yml CHANGED
@@ -1,4 +1,3 @@
1
- env:
2
- - RBXOPT=-X19 JRUBY_OPTS="--1.9"
3
1
  rvm:
4
2
  - 1.9.3
3
+ - 2.0.0
data/CHANGELOG.md ADDED
@@ -0,0 +1,46 @@
1
+ == 0.8.0
2
+
3
+ * backwards incompatible changes
4
+ * Pending steps no longer exit with -1
5
+
6
+ * bug fix
7
+ * Nothing
8
+
9
+ * enhancements
10
+ * Add CHANGELOG
11
+ * Add progress reporter
12
+ * Add official ruby 2.0.0 support
13
+
14
+ * deprecations
15
+ * Nothing
16
+
17
+ == 0.7.0
18
+
19
+ * backwards incompatible changes
20
+ * Nothing
21
+
22
+ * bug fix
23
+ * Nothing
24
+
25
+ * enhancements
26
+ * Steps are now generated with the `step` keyword instead of `Given`, `When`, `Then`, etc..
27
+ * Generated features are namespaced to the `Spinach::Features` to prevent conflicts.
28
+
29
+ * deprecations
30
+ * Nothing
31
+
32
+ == 0.6.1
33
+
34
+ * backwards incompatible changes
35
+ * Nothing
36
+
37
+ * bug fix
38
+ * Don't run entire test suite when an inexisting feature file is given.
39
+ * Run all features from given args instead of just the first one.
40
+ * Don't run tests when the `--generate` flag is given.
41
+
42
+ * enhancements
43
+ * Add docs on how to use shared steps.
44
+
45
+ * deprecations
46
+ * Nothing
data/README.markdown CHANGED
@@ -12,8 +12,8 @@ Conceived as an alternative to Cucumber, here are some of its design goals:
12
12
  * Step reusability: In case you want to reuse steps across features, you can
13
13
  always wrap those in plain ol' Ruby modules.
14
14
 
15
- Spinach is tested against MRI 1.9.2, 1.9.3. Rubinius 2.0 support is on the
16
- works.
15
+ Spinach is tested against **MRI 1.9.3 and 2.0.0**. Rubinius 2.0 support
16
+ is on the works.
17
17
 
18
18
  We are not planning to make it compatible with MRI 1.8.7 since, you know, this
19
19
  would be irresponsible :)
@@ -314,6 +314,19 @@ class Spinach::Features::SessionTimeout < Spinach::FeatureSteps
314
314
  end
315
315
  ```
316
316
 
317
+ ## Reporters
318
+
319
+ Spinach supports two kinds of reporters by default: `stdout` and `progress`.
320
+ You can specify them when calling the `spinach` binary:
321
+
322
+ spinach --reporter progress
323
+
324
+ When no reporter is specified, `stdout` will be used by default.
325
+
326
+ For a console reporter with no colors, try:
327
+
328
+ * [spinach-console-reporter](https://github.com/ywen/spinach-console-reporter) (to be used with Jenkins)
329
+
317
330
  ## Wanna use it with Rails 3?
318
331
 
319
332
  Use [spinach-rails](http://github.com/codegram/spinach-rails)
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  class DisplayRunSummary < Spinach::FeatureSteps
2
4
 
3
5
  feature 'automatic'
@@ -60,8 +60,8 @@ module Filesystem
60
60
  wout.close
61
61
  werr.close
62
62
 
63
- @stdout = rout.readlines.join("\n")
64
- @stderr = rerr.readlines.join("\n")
63
+ @stdout = rout.readlines.join("\n").force_encoding('utf-8')
64
+ @stderr = rerr.readlines.join("\n").force_encoding('utf-8')
65
65
 
66
66
  # dispose the read ends of the pipes
67
67
  rout.close
data/lib/spinach/cli.rb CHANGED
@@ -22,12 +22,9 @@ module Spinach
22
22
  def run
23
23
  options
24
24
 
25
- # only generating steps, do not run tests
26
- if Spinach.config.generate
27
- exit 0
28
- else
29
- Spinach::Runner.new(feature_files).run
30
- end
25
+ return true if Spinach.config.generate
26
+
27
+ Spinach::Runner.new(feature_files).run
31
28
  end
32
29
 
33
30
  # @return [Hash]
@@ -12,8 +12,8 @@ module Spinach
12
12
 
13
13
  begin
14
14
  FeatureGenerator.new(feature).store
15
- rescue FeatureGeneratorException
16
- # probably not optimal, but ignoring this
15
+ rescue FeatureGeneratorException => e
16
+ $stderr.puts e
17
17
  end
18
18
  end
19
19
  end
@@ -70,12 +70,12 @@ module Spinach
70
70
  #
71
71
  def store
72
72
  if File.exists?(filename_with_path)
73
- raise FeatureGeneratorException.new("File already exists")
73
+ raise FeatureGeneratorException.new("File #{filename_with_path} already exists.")
74
74
  else
75
75
  FileUtils.mkdir_p path
76
76
  File.open(filename_with_path, 'w') do |file|
77
77
  file.write(generate)
78
- puts "generating #{File.basename(filename_with_path)}"
78
+ puts "Generating #{File.basename(filename_with_path)}"
79
79
  end
80
80
  end
81
81
  end
@@ -93,3 +93,4 @@ module Spinach
93
93
  end
94
94
 
95
95
  require_relative 'reporter/stdout'
96
+ require_relative 'reporter/progress'
@@ -0,0 +1,155 @@
1
+ # encoding: utf-8
2
+ require_relative 'stdout/error_reporting'
3
+
4
+ module Spinach
5
+ class Reporter
6
+ # The Progress reporter outputs the runner results to the standard output
7
+ #
8
+ class Progress < Reporter
9
+
10
+ include Stdout::ErrorReporting
11
+
12
+ # The output buffers to store the reports.
13
+ attr_reader :out, :error
14
+
15
+ # The last scenario error
16
+ attr_accessor :scenario_error
17
+
18
+ # The last scenario
19
+ attr_accessor :scenario
20
+
21
+ # Initialitzes the runner
22
+ #
23
+ # @param [Hash] options
24
+ # Sets a custom output buffer by setting options[:output]
25
+ # Sets a custom error buffer by setting options[:error]
26
+ #
27
+ def initialize(*args)
28
+ super(*args)
29
+ @out = options[:output] || $stdout
30
+ @error = options[:error] || $stderr
31
+ end
32
+
33
+ # Adds a passed step to the output buffer.
34
+ #
35
+ # @param [Step] step
36
+ # The step.
37
+ #
38
+ # @param [Array] step_location
39
+ # The step source location
40
+ #
41
+ def on_successful_step(step, step_location, step_definitions = nil)
42
+ output_step('.', :green)
43
+ self.scenario = [current_feature, current_scenario, step]
44
+ successful_steps << scenario
45
+ end
46
+
47
+ # Adds a failing step to the output buffer.
48
+ #
49
+ # @param [Hash] step
50
+ # The step in a JSON Gherkin format
51
+ #
52
+ # @param [Exception] failure
53
+ # The exception that caused the failure
54
+ #
55
+ def on_failed_step(step, failure, step_location, step_definitions = nil)
56
+ output_step('F', :red)
57
+ self.scenario_error = [current_feature, current_scenario, step, failure]
58
+ failed_steps << scenario_error
59
+ end
60
+
61
+ # Adds a step that has raised an error to the output buffer.
62
+ #
63
+ # @param [Hash] step
64
+ # The step in a JSON Gherkin format
65
+ #
66
+ # @param [Exception] failure
67
+ # The exception that caused the failure
68
+ #
69
+ def on_error_step(step, failure, step_location, step_definitions = nil)
70
+ output_step('E', :red)
71
+ self.scenario_error = [current_feature, current_scenario, step, failure]
72
+ error_steps << scenario_error
73
+ end
74
+
75
+ # Adds an undefined step to the output buffer.
76
+ #
77
+ # @param [Hash] step
78
+ # The step in a JSON Gherkin format
79
+ #
80
+ def on_undefined_step(step, failure, step_definitions = nil)
81
+ output_step('U', :yellow)
82
+ self.scenario_error = [current_feature, current_scenario, step, failure]
83
+ undefined_steps << scenario_error
84
+ end
85
+
86
+ # Adds an undefined step to the output buffer.
87
+ #
88
+ # @param [Hash] step
89
+ # The step in a JSON Gherkin format
90
+ #
91
+ def on_pending_step(step, failure)
92
+ output_step('P', :yellow)
93
+ self.scenario_error = [current_feature, current_scenario, step, failure]
94
+ pending_steps << scenario_error
95
+ end
96
+
97
+ # Adds a step that has been skipped to the output buffer.
98
+ #
99
+ # @param [Hash] step
100
+ # The step that Gherkin extracts
101
+ #
102
+ def on_skipped_step(step, step_definitions = nil)
103
+ output_step('~', :cyan)
104
+ end
105
+
106
+ # Adds to the output buffer a step result
107
+ #
108
+ # @param [String] text
109
+ # A symbol to prepend before the step keyword (might be useful to
110
+ # indicate if everything went ok or not).
111
+ #
112
+ # @param [Symbol] color
113
+ # The color code to use with Colorize to colorize the output.
114
+ #
115
+ def output_step(text, color = :grey)
116
+ out.print(text.to_s.colorize(color))
117
+ end
118
+
119
+ # It prints the error summary if the run has failed
120
+ # It always print feature success summary
121
+ #
122
+ # @param [True,False] success
123
+ # whether the run has succeed or not
124
+ #
125
+ def after_run(success)
126
+ error_summary unless success
127
+ out.puts ""
128
+ run_summary
129
+ end
130
+
131
+ # Prints the feature success summary for this run.
132
+ #
133
+ def run_summary
134
+ successful_summary = format_summary(:green, successful_steps, 'Successful')
135
+ undefined_summary = format_summary(:yellow, undefined_steps, 'Undefined')
136
+ pending_summary = format_summary(:yellow, pending_steps, 'Pending')
137
+ failed_summary = format_summary(:red, failed_steps, 'Failed')
138
+ error_summary = format_summary(:red, error_steps, 'Error')
139
+
140
+ out.puts "Steps Summary: #{successful_summary}, #{undefined_summary}, #{pending_summary}, #{failed_summary}, #{error_summary}\n\n"
141
+ end
142
+
143
+ private
144
+ def format_summary(color, steps, message)
145
+ buffer = []
146
+ buffer << "(".colorize(color)
147
+ buffer << steps.length.to_s.colorize(:"light_#{color}")
148
+ buffer << ") ".colorize(color)
149
+ buffer << message.colorize(color)
150
+ buffer.join
151
+ end
152
+ end
153
+ end
154
+ end
155
+
@@ -216,17 +216,7 @@ module Spinach
216
216
  out.puts "Steps Summary: #{successful_summary}, #{undefined_summary}, #{pending_summary}, #{failed_summary}, #{error_summary}\n\n"
217
217
  end
218
218
 
219
- # Constructs the full step definition
220
- #
221
- # @param [Hash] step
222
- # The step.
223
- #
224
- def full_step(step)
225
- "#{step.keyword} #{step.name}"
226
- end
227
-
228
219
  private
229
-
230
220
  def indent(n = 1)
231
221
  " " * n
232
222
  end
@@ -24,11 +24,17 @@ module Spinach
24
24
  end
25
25
 
26
26
  def report_undefined_steps
27
- report_errors('Undefined steps', undefined_steps, :yellow) if undefined_steps.any?
27
+ if undefined_steps.any?
28
+ error.puts "\nUndefined steps summary:\n"
29
+ report_errors('Undefined steps', undefined_steps, :yellow)
30
+ end
28
31
  end
29
32
 
30
33
  def report_pending_steps
31
- report_errors('Pending steps', pending_steps, :yellow) if pending_steps.any?
34
+ if pending_steps.any?
35
+ error.puts "\nPending steps summary:\n"
36
+ report_errors('Pending steps', pending_steps, :yellow)
37
+ end
32
38
  end
33
39
 
34
40
  def report_undefined_features
@@ -141,7 +147,6 @@ module Spinach
141
147
  output
142
148
  end
143
149
 
144
-
145
150
  # Prints a information when an exception is raised.
146
151
  #
147
152
  # @param [Exception] exception
@@ -164,6 +169,14 @@ module Spinach
164
169
  end
165
170
  end
166
171
 
172
+ # Constructs the full step definition
173
+ #
174
+ # @param [Hash] step
175
+ # The step.
176
+ #
177
+ def full_step(step)
178
+ "#{step.keyword} #{step.name}"
179
+ end
167
180
  end
168
181
  end
169
182
  end
@@ -84,13 +84,11 @@ module Spinach
84
84
  Spinach.hooks.run_on_undefined_step step, @exception, step_definitions
85
85
  rescue Spinach::StepPendingException => e
86
86
  e.step = step
87
- @exception = e
88
- Spinach.hooks.run_on_pending_step step, @exception
87
+ Spinach.hooks.run_on_pending_step step, e
89
88
  rescue Exception => e
90
89
  @exception = e
91
90
  Spinach.hooks.run_on_error_step step, @exception, step_location, step_definitions
92
91
  end
93
-
94
92
  end
95
93
  end
96
94
  end
@@ -1,4 +1,4 @@
1
1
  module Spinach
2
2
  # Spinach version.
3
- VERSION = "0.7.0"
3
+ VERSION = "0.8.0"
4
4
  end
data/spinach.gemspec CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |gem|
9
9
  gem.summary = %q{Spinach is a BDD framework on top of gherkin}
10
10
  gem.homepage = "http://github.com/codegram/spinach"
11
11
 
12
- gem.add_runtime_dependency 'gherkin-ruby', '~> 0.2.0'
13
- gem.add_runtime_dependency 'colorize'
12
+ gem.add_runtime_dependency 'gherkin-ruby', '~> 0.2.1'
13
+ gem.add_runtime_dependency 'colorize', '0.5.8'
14
14
  gem.add_development_dependency 'rake'
15
15
  gem.add_development_dependency 'mocha'
16
16
  gem.add_development_dependency 'sinatra'
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.add_development_dependency 'pry'
19
19
  gem.add_development_dependency 'simplecov'
20
20
  gem.add_development_dependency 'rspec'
21
- gem.add_development_dependency 'minitest', "4.3.3"
21
+ gem.add_development_dependency 'minitest'
22
22
  gem.add_development_dependency 'turn'
23
23
 
24
24
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -142,9 +142,14 @@ tags:
142
142
  describe 'generate' do
143
143
  %w{-g --generate}.each do |opt|
144
144
  it 'inits the generator if #{opt}' do
145
+ config = Spinach::Config.new
146
+ Spinach.stubs(:config).returns(config)
147
+
145
148
  Spinach::Generators.expects(:run)
146
- cli = Spinach::Cli.new([opt])
147
- options = cli.options
149
+
150
+ Spinach::Cli.new([opt]).run
151
+
152
+ config.generate.must_equal true
148
153
  end
149
154
  end
150
155
  end
@@ -83,11 +83,14 @@ Feature: Cheezburger can I has
83
83
  file = "features/steps/cheezburger_can_i_has.rb"
84
84
  in_current_dir do
85
85
  FileUtils.mkdir_p "features/steps"
86
+
86
87
  File.open(file, 'w') do |f|
87
88
  f.write("Fake content")
88
89
  end
90
+
89
91
  Proc.new{subject.store}.must_raise(
90
92
  Spinach::Generators::FeatureGeneratorException)
93
+
91
94
  FileUtils.rm_rf("features/steps")
92
95
  end
93
96
  end
@@ -5,48 +5,23 @@ describe Spinach::Generators do
5
5
  Spinach::Generators
6
6
  end
7
7
 
8
- let(:data) do
9
- Spinach::Parser.new("""
10
- Feature: Cheezburger can I has
11
- Background:
12
- Given I liek cheezburger
13
- Scenario: Some Lulz
14
- Given I haz a sad
15
- When I get some lulz
16
- Then I haz a happy
17
- Scenario: Some sad
18
- Given I haz a happy
19
- When I get some lulz
20
- Then I am OMG ROFLMAO""").parse
21
- end
22
-
23
- describe "#bind" do
24
- it "binds the generator to the missing feature hook" do
25
- subject.expects(:generate_feature).with(data)
26
- subject.bind
27
- Spinach.hooks.run_on_undefined_feature data
28
- Spinach.hooks.reset
29
- end
30
- end
31
-
32
8
  describe "#generate_feature" do
33
- it "generates a file" do
34
- feature_data = data
35
- in_current_dir do
36
- subject.generate_feature(feature_data)
37
- File.exists?("features/steps/cheezburger_can_i_has.rb").must_equal true
38
- FileUtils.rm_rf("features/steps")
39
- end
40
- end
41
-
42
9
  it "outputs a message if feature cannot be generated" do
43
10
  in_current_dir do
44
- subject::FeatureGenerator.expects(:new).raises(
11
+ FileUtils.mkdir_p "features/steps"
12
+
13
+ File.open('features/steps/cheezburger_can_i_has.rb', 'w') do |f|
14
+ f.write("Feature: Fake feature")
15
+ end
16
+
17
+ Spinach::Generators::FeatureGenerator.any_instance.expects(:store).raises(
45
18
  Spinach::Generators::FeatureGeneratorException.new("File already exists"))
19
+
46
20
  capture_stdout do
47
- subject.generate_feature(data)
21
+ subject.run(["features/steps/cheezburger_can_i_has.rb"])
48
22
  end.must_include "File already exists"
49
- File.exists?("features/steps/cheezburger_can_i_has.rb").must_equal false
23
+
24
+ FileUtils.rm_rf("features/steps")
50
25
  end
51
26
  end
52
27
  end
@@ -0,0 +1,167 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../../test_helper'
4
+
5
+ describe Spinach::Reporter::Progress do
6
+ let(:exception) { StandardError.new('Something went wrong') }
7
+
8
+ let(:error) do
9
+ [stub(name: 'My feature'),
10
+ stub(name: 'A scenario'),
11
+ stub(keyword: 'Keyword', name: 'step name'),
12
+ exception]
13
+ end
14
+
15
+ let(:steps) do
16
+ [error]
17
+ end
18
+
19
+
20
+ before do
21
+ @out = StringIO.new
22
+ @error = StringIO.new
23
+ @reporter = Spinach::Reporter::Progress.new(
24
+ output: @out,
25
+ error: @error
26
+ )
27
+ end
28
+
29
+ describe '#on_successful_step' do
30
+ let(:step) { stub(keyword: 'Given', name: 'I am too cool') }
31
+ let(:step_location){['error_step_location', 1]}
32
+ let(:step_definitions){ stub }
33
+
34
+ it 'adds the step to the output buffer' do
35
+ @reporter.on_successful_step(step, step_location)
36
+
37
+ @out.string.must_include '.'
38
+ end
39
+
40
+ it 'sets the current scenario' do
41
+ @reporter.on_successful_step(step, step_location)
42
+
43
+ @reporter.scenario.must_include step
44
+ end
45
+
46
+ it 'adds the step to the successful steps' do
47
+ @reporter.on_successful_step(step, step_location)
48
+
49
+ @reporter.successful_steps.last.must_include step
50
+ end
51
+ end
52
+
53
+ describe '#on_failed_step' do
54
+ let(:step) { stub(keyword: 'Then', name: 'I write failing steps') }
55
+ let(:step_location){['error_step_location', 1]}
56
+
57
+ it 'adds the step to the output buffer' do
58
+ @reporter.on_failed_step(step, anything, step_location)
59
+
60
+ @out.string.must_include 'F'
61
+ end
62
+
63
+ it 'sets the current scenario error' do
64
+ @reporter.on_failed_step(step, anything, step_location)
65
+
66
+ @reporter.scenario_error.must_include step
67
+ end
68
+
69
+ it 'adds the step to the failing steps' do
70
+ @reporter.on_failed_step(step, anything, step_location)
71
+
72
+ @reporter.failed_steps.last.must_include step
73
+ end
74
+ end
75
+
76
+ describe '#on_error_step' do
77
+ let(:step) { stub(keyword: 'And', name: 'I even make syntax errors') }
78
+ let(:step_location){['error_step_location', 1]}
79
+
80
+ it 'adds the step to the output buffer' do
81
+ @reporter.on_error_step(step, anything, step_location)
82
+
83
+ @out.string.must_include 'E'
84
+ end
85
+
86
+ it 'sets the current scenario error' do
87
+ @reporter.on_error_step(step, anything, step_location)
88
+ @reporter.scenario_error.must_include step
89
+ end
90
+
91
+ it 'adds the step to the error steps' do
92
+ @reporter.on_error_step(step, anything, step_location)
93
+ @reporter.error_steps.last.must_include step
94
+ end
95
+ end
96
+
97
+ describe '#on_undefined_step' do
98
+ let(:step) { stub(keyword: 'When', name: 'I forgot to write steps') }
99
+
100
+ it 'adds the step to the output buffer' do
101
+ @reporter.on_undefined_step(step, anything)
102
+
103
+ @out.string.must_include 'U'
104
+ end
105
+
106
+ it 'sets the current scenario error' do
107
+ @reporter.on_undefined_step(step, anything)
108
+
109
+ @reporter.scenario_error.must_include step
110
+ end
111
+
112
+ it 'adds the step to the undefined steps' do
113
+ @reporter.on_undefined_step(step, anything)
114
+
115
+ @reporter.undefined_steps.last.must_include step
116
+ end
117
+ end
118
+
119
+ describe '#on_pending_step' do
120
+ let(:step) { stub(keyword: 'Given', name: 'I wrote a pending step') }
121
+
122
+ it 'adds the step to the output buffer' do
123
+ @reporter.on_pending_step(step, anything)
124
+
125
+ @out.string.must_include 'P'
126
+ end
127
+
128
+ it 'sets the current scenario error' do
129
+ @reporter.on_pending_step(step, anything)
130
+ @reporter.scenario_error.must_include step
131
+ end
132
+
133
+ it 'adds the step to the pending steps' do
134
+ @reporter.on_pending_step(step, anything)
135
+ @reporter.pending_steps.last.must_include step
136
+ end
137
+ end
138
+
139
+ describe '#on_skipped_step' do
140
+ it 'adds the step to the output buffer' do
141
+ @reporter.on_skipped_step(stub(keyword: 'Then', name: 'some steps are not even called'))
142
+
143
+ @out.string.must_include '~'
144
+ end
145
+ end
146
+
147
+ describe '#after_run' do
148
+ describe 'when the run has succeed' do
149
+ it 'display run summary' do
150
+ @reporter.expects(:error_summary).never
151
+ @reporter.expects(:run_summary)
152
+
153
+ @reporter.after_run(true)
154
+ end
155
+ end
156
+
157
+ describe 'when the run has failed' do
158
+ it 'display run and error summaries' do
159
+ @reporter.expects(:error_summary)
160
+ @reporter.expects(:run_summary)
161
+
162
+ @reporter.after_run(false)
163
+ end
164
+ end
165
+ end
166
+ end
167
+
@@ -268,7 +268,7 @@ describe Spinach::Reporter::Stdout do
268
268
  stub(keyword: 'Given', name: 'foo'),
269
269
  @exception]
270
270
  output = @reporter.full_error(@error)
271
- output.must_include "Given"
271
+ output.must_include "step"
272
272
  output.must_include "foo"
273
273
  end
274
274
  end
@@ -18,8 +18,8 @@ describe Spinach::Reporter::Stdout do
18
18
 
19
19
 
20
20
  before do
21
- @out = StringIO.new
22
- @error = StringIO.new
21
+ @out = StringIO.new("")
22
+ @error = StringIO.new("")
23
23
  @reporter = Spinach::Reporter::Stdout.new(
24
24
  output: @out,
25
25
  error: @error
@@ -149,9 +149,9 @@ module Spinach
149
149
  raises Spinach::StepPendingException, @step
150
150
  end
151
151
 
152
- it 'sets the exception' do
152
+ it 'does not set the exception' do
153
153
  subject.run_step(@step)
154
- subject.instance_variable_get(:@exception).must_be_kind_of(Spinach::StepPendingException)
154
+ subject.instance_variable_get(:@exception).must_be_kind_of(NilClass)
155
155
  end
156
156
 
157
157
  it 'runs the pending hooks' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spinach
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,184 +12,184 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-12-18 00:00:00.000000000 Z
15
+ date: 2013-03-03 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: gherkin-ruby
19
- prerelease: false
20
19
  requirement: !ruby/object:Gem::Requirement
20
+ none: false
21
21
  requirements:
22
22
  - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: 0.2.0
25
- none: false
24
+ version: 0.2.1
26
25
  type: :runtime
26
+ prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
28
29
  requirements:
29
30
  - - ~>
30
31
  - !ruby/object:Gem::Version
31
- version: 0.2.0
32
- none: false
32
+ version: 0.2.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: colorize
35
- prerelease: false
36
35
  requirement: !ruby/object:Gem::Requirement
36
+ none: false
37
37
  requirements:
38
- - - ! '>='
38
+ - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
41
- none: false
40
+ version: 0.5.8
42
41
  type: :runtime
42
+ prerelease: false
43
43
  version_requirements: !ruby/object:Gem::Requirement
44
+ none: false
44
45
  requirements:
45
- - - ! '>='
46
+ - - '='
46
47
  - !ruby/object:Gem::Version
47
- version: '0'
48
- none: false
48
+ version: 0.5.8
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rake
51
- prerelease: false
52
51
  requirement: !ruby/object:Gem::Requirement
52
+ none: false
53
53
  requirements:
54
54
  - - ! '>='
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
- none: false
58
57
  type: :development
58
+ prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
+ none: false
60
61
  requirements:
61
62
  - - ! '>='
62
63
  - !ruby/object:Gem::Version
63
64
  version: '0'
64
- none: false
65
65
  - !ruby/object:Gem::Dependency
66
66
  name: mocha
67
- prerelease: false
68
67
  requirement: !ruby/object:Gem::Requirement
68
+ none: false
69
69
  requirements:
70
70
  - - ! '>='
71
71
  - !ruby/object:Gem::Version
72
72
  version: '0'
73
- none: false
74
73
  type: :development
74
+ prerelease: false
75
75
  version_requirements: !ruby/object:Gem::Requirement
76
+ none: false
76
77
  requirements:
77
78
  - - ! '>='
78
79
  - !ruby/object:Gem::Version
79
80
  version: '0'
80
- none: false
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: sinatra
83
- prerelease: false
84
83
  requirement: !ruby/object:Gem::Requirement
84
+ none: false
85
85
  requirements:
86
86
  - - ! '>='
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
- none: false
90
89
  type: :development
90
+ prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
+ none: false
92
93
  requirements:
93
94
  - - ! '>='
94
95
  - !ruby/object:Gem::Version
95
96
  version: '0'
96
- none: false
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: capybara
99
- prerelease: false
100
99
  requirement: !ruby/object:Gem::Requirement
100
+ none: false
101
101
  requirements:
102
102
  - - ~>
103
103
  - !ruby/object:Gem::Version
104
104
  version: 2.0.0
105
- none: false
106
105
  type: :development
106
+ prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
+ none: false
108
109
  requirements:
109
110
  - - ~>
110
111
  - !ruby/object:Gem::Version
111
112
  version: 2.0.0
112
- none: false
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: pry
115
- prerelease: false
116
115
  requirement: !ruby/object:Gem::Requirement
116
+ none: false
117
117
  requirements:
118
118
  - - ! '>='
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
- none: false
122
121
  type: :development
122
+ prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
124
+ none: false
124
125
  requirements:
125
126
  - - ! '>='
126
127
  - !ruby/object:Gem::Version
127
128
  version: '0'
128
- none: false
129
129
  - !ruby/object:Gem::Dependency
130
130
  name: simplecov
131
- prerelease: false
132
131
  requirement: !ruby/object:Gem::Requirement
132
+ none: false
133
133
  requirements:
134
134
  - - ! '>='
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
- none: false
138
137
  type: :development
138
+ prerelease: false
139
139
  version_requirements: !ruby/object:Gem::Requirement
140
+ none: false
140
141
  requirements:
141
142
  - - ! '>='
142
143
  - !ruby/object:Gem::Version
143
144
  version: '0'
144
- none: false
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: rspec
147
- prerelease: false
148
147
  requirement: !ruby/object:Gem::Requirement
148
+ none: false
149
149
  requirements:
150
150
  - - ! '>='
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
- none: false
154
153
  type: :development
154
+ prerelease: false
155
155
  version_requirements: !ruby/object:Gem::Requirement
156
+ none: false
156
157
  requirements:
157
158
  - - ! '>='
158
159
  - !ruby/object:Gem::Version
159
160
  version: '0'
160
- none: false
161
161
  - !ruby/object:Gem::Dependency
162
162
  name: minitest
163
- prerelease: false
164
163
  requirement: !ruby/object:Gem::Requirement
164
+ none: false
165
165
  requirements:
166
- - - '='
166
+ - - ! '>='
167
167
  - !ruby/object:Gem::Version
168
- version: 4.3.3
169
- none: false
168
+ version: '0'
170
169
  type: :development
170
+ prerelease: false
171
171
  version_requirements: !ruby/object:Gem::Requirement
172
+ none: false
172
173
  requirements:
173
- - - '='
174
+ - - ! '>='
174
175
  - !ruby/object:Gem::Version
175
- version: 4.3.3
176
- none: false
176
+ version: '0'
177
177
  - !ruby/object:Gem::Dependency
178
178
  name: turn
179
- prerelease: false
180
179
  requirement: !ruby/object:Gem::Requirement
180
+ none: false
181
181
  requirements:
182
182
  - - ! '>='
183
183
  - !ruby/object:Gem::Version
184
184
  version: '0'
185
- none: false
186
185
  type: :development
186
+ prerelease: false
187
187
  version_requirements: !ruby/object:Gem::Requirement
188
+ none: false
188
189
  requirements:
189
190
  - - ! '>='
190
191
  - !ruby/object:Gem::Version
191
192
  version: '0'
192
- none: false
193
193
  description: Spinach is a BDD framework on top of gherkin
194
194
  email:
195
195
  - info@codegram.com
@@ -206,6 +206,7 @@ files:
206
206
  - .gitignore
207
207
  - .rvmrc
208
208
  - .travis.yml
209
+ - CHANGELOG.md
209
210
  - Gemfile
210
211
  - Guardfile
211
212
  - README.markdown
@@ -263,6 +264,7 @@ files:
263
264
  - lib/spinach/parser.rb
264
265
  - lib/spinach/parser/visitor.rb
265
266
  - lib/spinach/reporter.rb
267
+ - lib/spinach/reporter/progress.rb
266
268
  - lib/spinach/reporter/stdout.rb
267
269
  - lib/spinach/reporter/stdout/error_reporting.rb
268
270
  - lib/spinach/runner.rb
@@ -290,6 +292,7 @@ files:
290
292
  - test/spinach/hooks_test.rb
291
293
  - test/spinach/parser/visitor_test.rb
292
294
  - test/spinach/parser_test.rb
295
+ - test/spinach/reporter/progress_test.rb
293
296
  - test/spinach/reporter/stdout/error_reporting_test.rb
294
297
  - test/spinach/reporter/stdout_test.rb
295
298
  - test/spinach/reporter_test.rb
@@ -310,20 +313,26 @@ rdoc_options: []
310
313
  require_paths:
311
314
  - lib
312
315
  required_ruby_version: !ruby/object:Gem::Requirement
316
+ none: false
313
317
  requirements:
314
318
  - - ! '>='
315
319
  - !ruby/object:Gem::Version
316
320
  version: '0'
317
- none: false
321
+ segments:
322
+ - 0
323
+ hash: -4461356009493919756
318
324
  required_rubygems_version: !ruby/object:Gem::Requirement
325
+ none: false
319
326
  requirements:
320
327
  - - ! '>='
321
328
  - !ruby/object:Gem::Version
322
329
  version: '0'
323
- none: false
330
+ segments:
331
+ - 0
332
+ hash: -4461356009493919756
324
333
  requirements: []
325
334
  rubyforge_project:
326
- rubygems_version: 1.8.24
335
+ rubygems_version: 1.8.25
327
336
  signing_key:
328
337
  specification_version: 3
329
338
  summary: Spinach is a BDD framework on top of gherkin
@@ -374,6 +383,7 @@ test_files:
374
383
  - test/spinach/hooks_test.rb
375
384
  - test/spinach/parser/visitor_test.rb
376
385
  - test/spinach/parser_test.rb
386
+ - test/spinach/reporter/progress_test.rb
377
387
  - test/spinach/reporter/stdout/error_reporting_test.rb
378
388
  - test/spinach/reporter/stdout_test.rb
379
389
  - test/spinach/reporter_test.rb