guard-bdd 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in guard-bdd.gemspec
4
+ gemspec
@@ -0,0 +1,6 @@
1
+ guard 'bdd' do
2
+ watch(%r{lib/(.*)\.rb$}) { |m| "spec/unit/#{File.basename(m[1])}_spec.rb" }
3
+ watch(%r{spec/.*_spec\.rb$})
4
+ end
5
+
6
+
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2012 Nikolay Sturm <sturm@erisiandiscord.de>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,70 @@
1
+ Guard::BDD
2
+ ==========
3
+
4
+ BDD guard is an opinionated RSpec and Cucumber runner.
5
+
6
+ I like to partition my test suite into 3 or 4 groups:
7
+ - fast unit tests
8
+ - slower integration tests for interfaces to external libraries or services
9
+ - slow RSpec acceptance tests and/or
10
+ slow Cucumber features
11
+
12
+ Whenever the test suite goes from red to green, I like my tests to be run in
13
+ the order given above. As soon as one group of tests fails to run successfully,
14
+ test execution stops.
15
+
16
+ Install
17
+ -------
18
+
19
+ Install the gem:
20
+
21
+ $ gem install guard-bdd
22
+
23
+ or add it to your Gemfile:
24
+
25
+ ``` ruby
26
+ gem 'guard-bdd'
27
+ ```
28
+
29
+ Add guard definition to your Guardfile by running this command:
30
+
31
+ $ guard init bdd
32
+
33
+ Guardfile
34
+ ---------
35
+
36
+ ``` ruby
37
+ guard 'bdd' do
38
+ watch(%r{lib/(.*)\.rb$}) { |m| "spec/unit/#{File.basename(m[1])}_spec.rb"}
39
+ watch(%r{spec/.*_spec\.rb})
40
+ end
41
+ ```
42
+
43
+ Options
44
+ -------
45
+
46
+ You can configure the paths to the different test groups:
47
+
48
+ - `:unit_paths` defaults to `['spec/unit']`
49
+ - `:integration_paths` defaults to `['spec/integration']`
50
+ - `:acceptance_paths` defaults to `['spec/acceptance']`
51
+ - `:feature_paths` defaults to `['features']`
52
+
53
+ Development
54
+ -----------
55
+
56
+ * Source hosted at [GitHub](https://github.com/nistude/guard-bdd)
57
+ * Report Issues/Questions/Feature requests on [GitHub Issues](https://github.com/nistude/guard-bdd/issues)
58
+
59
+ Pull requests are very welcome! Make sure your patches are well tested. Please
60
+ create a topic branch for every separate change you make.
61
+
62
+ Bugs
63
+ ----
64
+
65
+ Cucumber support is still missing.
66
+
67
+ Author
68
+ ------
69
+
70
+ [Nikolay Sturm](http://blog.nistu.de/)
@@ -0,0 +1,154 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'date'
4
+
5
+ #############################################################################
6
+ #
7
+ # Helper functions
8
+ #
9
+ #############################################################################
10
+
11
+ def name
12
+ @name ||= Dir['*.gemspec'].first.split('.').first
13
+ end
14
+
15
+ def shortname
16
+ @shortname ||= name.split('-')[1]
17
+ end
18
+
19
+ def version
20
+ line = File.read("lib/guard/#{shortname}.rb")[/^\s*VERSION\s*=\s*.*/]
21
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
22
+ end
23
+
24
+ def date
25
+ Date.today.to_s
26
+ end
27
+
28
+ def rubyforge_project
29
+ name
30
+ end
31
+
32
+ def gemspec_file
33
+ "#{name}.gemspec"
34
+ end
35
+
36
+ def gem_file
37
+ "#{name}-#{version}.gem"
38
+ end
39
+
40
+ def replace_header(head, header_name)
41
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
42
+ end
43
+
44
+ #############################################################################
45
+ #
46
+ # Standard tasks
47
+ #
48
+ #############################################################################
49
+
50
+ task :default => :test
51
+
52
+ require 'rake/testtask'
53
+ Rake::TestTask.new(:test) do |test|
54
+ test.libs << 'lib' << 'test'
55
+ test.pattern = 'test/**/test_*.rb'
56
+ test.verbose = true
57
+ end
58
+
59
+ desc "Generate RCov test coverage and open in your browser"
60
+ task :coverage do
61
+ require 'rcov'
62
+ sh "rm -fr coverage"
63
+ sh "rcov test/test_*.rb"
64
+ sh "open coverage/index.html"
65
+ end
66
+
67
+ require 'rdoc/task'
68
+ Rake::RDocTask.new do |rdoc|
69
+ rdoc.rdoc_dir = 'rdoc'
70
+ rdoc.title = "#{name} #{version}"
71
+ rdoc.rdoc_files.include('README*')
72
+ rdoc.rdoc_files.include('lib/**/*.rb')
73
+ end
74
+
75
+ desc "Open an irb session preloaded with this library"
76
+ task :console do
77
+ sh "irb -rubygems -r ./lib/guard/#{shortname}.rb"
78
+ end
79
+
80
+ #############################################################################
81
+ #
82
+ # Custom tasks (add your own tasks here)
83
+ #
84
+ #############################################################################
85
+
86
+
87
+
88
+ #############################################################################
89
+ #
90
+ # Packaging tasks
91
+ #
92
+ #############################################################################
93
+
94
+ desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
95
+ task :release => :build do
96
+ unless `git branch` =~ /^\* master$/
97
+ puts "You must be on the master branch to release!"
98
+ exit!
99
+ end
100
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
101
+ sh "git tag v#{version}"
102
+ sh "git push origin master"
103
+ sh "git push origin v#{version}"
104
+ sh "gem push pkg/#{name}-#{version}.gem"
105
+ end
106
+
107
+ desc "Build #{gem_file} into the pkg directory"
108
+ task :build => :gemspec do
109
+ sh "mkdir -p pkg"
110
+ sh "gem build #{gemspec_file}"
111
+ sh "mv #{gem_file} pkg"
112
+ end
113
+
114
+ desc "Generate #{gemspec_file}"
115
+ task :gemspec => :validate do
116
+ # read spec file and split out manifest section
117
+ spec = File.read(gemspec_file)
118
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
119
+
120
+ # replace name version and date
121
+ replace_header(head, :name)
122
+ replace_header(head, :version)
123
+ replace_header(head, :date)
124
+ #comment this out if your rubyforge_project has a different name
125
+ #replace_header(head, :rubyforge_project)
126
+
127
+ # determine file list from git ls-files
128
+ files = `git ls-files`.
129
+ split("\n").
130
+ sort.
131
+ reject { |file| file =~ /^\./ }.
132
+ reject { |file| file =~ /^(rdoc|pkg)/ }.
133
+ map { |file| " #{file}" }.
134
+ join("\n")
135
+
136
+ # piece file back together and write
137
+ manifest = " s.files = %w[\n#{files}\n ]\n"
138
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
139
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
140
+ puts "Updated #{gemspec_file}"
141
+ end
142
+
143
+ desc "Validate #{gemspec_file}"
144
+ task :validate do
145
+ libfiles = Dir['lib/guard/*'] - ["lib/guard/#{shortname}.rb", "lib/guard/#{shortname}"]
146
+ unless libfiles.empty?
147
+ puts "Directory `lib/guard` should only contain a `#{shortname}.rb` file and `#{shortname}` dir."
148
+ exit!
149
+ end
150
+ unless Dir['VERSION*'].empty?
151
+ puts "A `VERSION` file at root level violates Gem best practices."
152
+ exit!
153
+ end
154
+ end
Binary file
@@ -0,0 +1,50 @@
1
+ Gem::Specification.new do |s|
2
+ s.specification_version = 2 if s.respond_to? :specification_version=
3
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
+ s.rubygems_version = '1.3.5'
5
+
6
+ s.name = 'guard-bdd'
7
+ s.version = '0.0.1'
8
+ s.date = '2012-04-15'
9
+ s.rubyforge_project = 'guard-bdd'
10
+
11
+ s.summary = "An opinionated RSpec and Cucumber runner for guard"
12
+ s.description = "Opinionated guard plugin for BDD workflow with Cucumber and RSpec"
13
+
14
+ s.authors = ["Nikolay Sturm"]
15
+ s.email = 'sturm@erisiandiscord.de'
16
+ s.homepage = 'http://github.com/nistude/guard-bdd'
17
+
18
+ s.require_paths = %w[lib]
19
+
20
+ s.rdoc_options = ["--charset=UTF-8"]
21
+ s.extra_rdoc_files = %w[README.md LICENSE]
22
+
23
+ s.add_dependency('guard', '~> 1.0')
24
+ s.add_dependency('guard-cucumber', '~> 0.7')
25
+ s.add_dependency('guard-rspec', '~> 0.7')
26
+ s.add_dependency('rspec', '~> 2.9')
27
+ s.add_dependency('state_machine', '~> 1.1')
28
+
29
+ #s.add_development_dependency('DEVDEPNAME', [">= 1.1.0", "< 2.0.0"])
30
+
31
+ # = MANIFEST =
32
+ s.files = %w[
33
+ Gemfile
34
+ Guardfile
35
+ LICENSE
36
+ README.md
37
+ Rakefile
38
+ doc/flowchart.dia
39
+ guard-bdd.gemspec
40
+ lib/guard/bdd.rb
41
+ lib/guard/bdd/state_machine.rb
42
+ lib/guard/bdd/templates/Guardfile
43
+ spec/unit/state_machine_spec.rb
44
+ ]
45
+ # = MANIFEST =
46
+
47
+ ## Test files will be grabbed from the file list. Make sure the path glob
48
+ ## matches what you actually use.
49
+ ##s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
50
+ end
@@ -0,0 +1,53 @@
1
+ require 'guard'
2
+ require 'guard/guard'
3
+ require 'guard/bdd/state_machine'
4
+
5
+ module Guard
6
+ class Bdd < Guard
7
+ VERSION = '0.0.1'
8
+
9
+ # Initialize a Guard.
10
+ # @param [Array<Guard::Watcher>] watchers the Guard file watchers
11
+ # @param [Hash] options the custom Guard options
12
+ def initialize(watchers = [], options = {})
13
+ super
14
+ options = {
15
+ :acceptance_paths => ['spec/acceptance'],
16
+ :feature_paths => ['features'],
17
+ :integration_paths => ['spec/integration'],
18
+ :unit_paths => ['spec/unit']
19
+ }.merge(options)
20
+ @state_machine = StateMachine.new(options)
21
+ end
22
+
23
+ # Call once when Guard starts. Please override initialize method to init
24
+ # stuff.
25
+ # @raise [:task_has_failed] when start has failed
26
+ def start
27
+ @state_machine.startup
28
+ end
29
+
30
+ # Called when just `enter` is pressed
31
+ # This method should be principally used for long action like running all
32
+ # specs/tests/...
33
+ # @raise [:task_has_failed] when run_all has failed
34
+ def run_all
35
+ @state_machine.run_all
36
+ end
37
+
38
+ # Called on file(s) modifications that the Guard watches.
39
+ # @param [Array<String>] paths the changes files or paths
40
+ # @raise [:task_has_failed] when run_on_change has failed
41
+ def run_on_change(paths)
42
+ @state_machine.changed_paths = paths
43
+ @state_machine.run_on_change
44
+ end
45
+
46
+ # Called on file(s) deletions that the Guard watches.
47
+ # @param [Array<String>] paths the deleted files or paths
48
+ # @raise [:task_has_failed] when run_on_change has failed
49
+ def run_on_deletion(paths)
50
+ @state_machine.remove(paths)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,180 @@
1
+ require 'state_machine'
2
+ require 'guard/rspec/runner'
3
+ require 'guard/rspec/inspector'
4
+
5
+ module Guard
6
+ class Bdd < Guard
7
+ class StateMachine
8
+ attr_writer :changed_paths
9
+
10
+ state_machine :bdd, :initial => :cold do
11
+ # startup
12
+ state :cold
13
+
14
+ event :startup do
15
+ transition :from => :cold, :to => :run_all
16
+ end
17
+
18
+ # generic states
19
+ state :run_all
20
+ after_transition :to => :run_all, :do => :run_all_unit_specs
21
+
22
+ state :test_failure
23
+ after_transition :to => :test_failure, :do => :throw_up
24
+
25
+ state :test_success
26
+
27
+ # generic events
28
+ event :run_all do
29
+ transition :to => :run_all
30
+ end
31
+
32
+ state :run_on_change_green
33
+ after_transition :to => :run_on_change_green, :do => :run_changed
34
+
35
+ state :run_on_change_red
36
+ after_transition :to => :run_on_change_red, :do => :run_changed
37
+
38
+ event :run_on_change do
39
+ transition :from => :test_success, :to => :run_on_change_green
40
+ transition :from => :test_failure, :to => :run_on_change_red
41
+ end
42
+
43
+ event :run_changed_success do
44
+ transition :from => :run_on_change_green, :to => :test_success
45
+ transition :from => :run_on_change_red, :to => :run_all
46
+ end
47
+
48
+ event :run_changed_failure do
49
+ transition :to => :test_failure
50
+ end
51
+
52
+ # unit specs
53
+ event :unit_specs_success do
54
+ transition :to => :unit_specs_green
55
+ end
56
+ event :unit_specs_failure do
57
+ transition :to => :test_failure
58
+ end
59
+
60
+ state :unit_specs_green
61
+ after_transition :to => :unit_specs_green, :do => :run_all_integration_specs
62
+
63
+ # integration specs
64
+ event :integration_specs_success do
65
+ transition :to => :integration_specs_green
66
+ end
67
+ event :integration_specs_failure do
68
+ transition :to => :test_failure
69
+ end
70
+
71
+ state :integration_specs_green
72
+ after_transition :to => :integration_specs_green, :do => :run_all_acceptance_specs
73
+
74
+ # acceptance specs
75
+ event :acceptance_specs_success do
76
+ transition :to => :acceptance_specs_green
77
+ end
78
+ event :acceptance_specs_failure do
79
+ transition :to => :test_failure
80
+ end
81
+
82
+ state :acceptance_specs_green
83
+ after_transition :to => :acceptance_specs_green, :do => :run_all_cucumber_features
84
+
85
+ # cucumber features
86
+ event :cucumber_features_success do
87
+ transition :to => :test_success
88
+ end
89
+ event :cucumber_features_failure do
90
+ transition :to => :test_failure
91
+ end
92
+ end
93
+
94
+ def initialize(options)
95
+ @options = options
96
+ @changed_paths = []
97
+ @failed_paths = []
98
+
99
+ @rspec_runner = RSpec::Runner.new(@options)
100
+
101
+ super()
102
+ end
103
+
104
+ def remove(paths)
105
+ @failed_paths -= paths
106
+ end
107
+
108
+ private
109
+ def run_all_acceptance_specs
110
+ paths = @options[:acceptance_paths].select { |path| File.exist?(path) }
111
+ if paths.empty?
112
+ acceptance_specs_success
113
+ else
114
+ passed = @rspec_runner.run(paths)
115
+ passed ? acceptance_specs_success : acceptance_specs_failure
116
+ end
117
+ end
118
+
119
+ def run_all_cucumber_features
120
+ # passed = @cucumber_runner.run(@options[:feature_paths])
121
+ # if passed
122
+ # @failed_paths = []
123
+ cucumber_features_success
124
+ # else
125
+ # cucumber_features_failure
126
+ # end
127
+ end
128
+
129
+ def run_all_integration_specs
130
+ paths = @options[:integration_paths].select { |path| File.exist?(path) }
131
+ if paths.empty?
132
+ integration_specs_success
133
+ else
134
+ passed = @rspec_runner.run(paths)
135
+ passed ? integration_specs_success : integration_specs_failure
136
+ end
137
+ end
138
+
139
+ def run_all_unit_specs
140
+ paths = @options[:unit_paths].select { |path| File.exist?(path) }
141
+ if paths.empty?
142
+ unit_specs_success
143
+ else
144
+ passed = @rspec_runner.run(paths)
145
+ passed ? unit_specs_success : unit_specs_failure
146
+ end
147
+ end
148
+
149
+ def run_changed
150
+ paths = @changed_paths
151
+ paths += @failed_paths
152
+
153
+ spec_paths = []
154
+ [:acceptance_paths, :integration_paths, :unit_paths].each do |path|
155
+ spec_paths += @options[path]
156
+ end
157
+ paths = RSpec::Inspector.new(:spec_paths => spec_paths).clean(paths)
158
+
159
+ if paths.empty?
160
+ @changed_paths = []
161
+ run_changed_success
162
+ else
163
+ passed = @rspec_runner.run(paths)
164
+ @changed_paths = []
165
+ if passed
166
+ @failed_paths -= paths
167
+ run_changed_success
168
+ else
169
+ @failed_paths = (@failed_paths + paths).uniq
170
+ run_changed_failure
171
+ end
172
+ end
173
+ end
174
+
175
+ def throw_up
176
+ throw :task_has_failed
177
+ end
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,4 @@
1
+ guard 'bdd' do
2
+ watch(%r{lib/.*\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
3
+ watch(%r{spec/.*_spec\.rb$})
4
+ end
@@ -0,0 +1,61 @@
1
+ require 'guard/bdd'
2
+
3
+ describe Guard::Bdd::StateMachine do
4
+ let(:runner) { double(Guard::RSpec::Runner) }
5
+ let(:state_machine) {
6
+ state_machine = Guard::Bdd::StateMachine.new(
7
+ :acceptance_paths => ['acceptance'],
8
+ :features_path => ['feature'],
9
+ :integration_paths => ['integration'],
10
+ :unit_paths => ['unit']
11
+ )
12
+ }
13
+
14
+ before(:each) do
15
+ runner.stub(:run).and_return(true)
16
+ Guard::RSpec::Runner.stub(:new).and_return(runner)
17
+
18
+ File.stub(:exist?).and_return(true)
19
+ end
20
+
21
+ context 'on startup' do
22
+ it 'runs all test groups' do
23
+ state_machine.startup
24
+
25
+ state_machine.bdd.should == 'test_success'
26
+ end
27
+ end
28
+
29
+ context 'when a test directory does not exist' do
30
+ %w{unit integration acceptance feature}.each do |kind|
31
+ it "skips missing #{kind} tests" do
32
+ File.stub(:exist?).with(kind).and_return(false)
33
+
34
+ runner.should_not_receive(:run).with([kind])
35
+
36
+ state_machine.startup
37
+ end
38
+ end
39
+ end
40
+
41
+ context 'when a single test fails' do
42
+ it 'keeps that test on the run list until all tests succeed' do
43
+ state_machine.bdd = 'test_success'
44
+
45
+ inspector = double(Guard::RSpec::Inspector)
46
+ inspector.stub(:clean).and_return(['foo'], ['bar', 'foo'])
47
+ Guard::RSpec::Inspector.stub(:new).and_return(inspector)
48
+
49
+ runner.stub(:run).with(['foo']).and_return(false)
50
+ state_machine.changed_paths = ['foo']
51
+ expect { state_machine.run_on_change }.to throw_symbol(:task_has_failed)
52
+ state_machine.instance_variable_get(:@failed_paths).should == ['foo']
53
+ state_machine.bdd.should == 'test_failure'
54
+
55
+ state_machine.changed_paths = ['bar']
56
+ state_machine.run_on_change
57
+ state_machine.bdd.should == 'test_success'
58
+ state_machine.instance_variable_get(:@failed_paths).should == []
59
+ end
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: guard-bdd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nikolay Sturm
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: guard
16
+ requirement: &7296460 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *7296460
25
+ - !ruby/object:Gem::Dependency
26
+ name: guard-cucumber
27
+ requirement: &7295060 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '0.7'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *7295060
36
+ - !ruby/object:Gem::Dependency
37
+ name: guard-rspec
38
+ requirement: &7294380 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '0.7'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *7294380
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &7293780 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.9'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *7293780
58
+ - !ruby/object:Gem::Dependency
59
+ name: state_machine
60
+ requirement: &7293100 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '1.1'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *7293100
69
+ description: Opinionated guard plugin for BDD workflow with Cucumber and RSpec
70
+ email: sturm@erisiandiscord.de
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files:
74
+ - README.md
75
+ - LICENSE
76
+ files:
77
+ - Gemfile
78
+ - Guardfile
79
+ - LICENSE
80
+ - README.md
81
+ - Rakefile
82
+ - doc/flowchart.dia
83
+ - guard-bdd.gemspec
84
+ - lib/guard/bdd.rb
85
+ - lib/guard/bdd/state_machine.rb
86
+ - lib/guard/bdd/templates/Guardfile
87
+ - spec/unit/state_machine_spec.rb
88
+ homepage: http://github.com/nistude/guard-bdd
89
+ licenses: []
90
+ post_install_message:
91
+ rdoc_options:
92
+ - --charset=UTF-8
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project: guard-bdd
109
+ rubygems_version: 1.8.10
110
+ signing_key:
111
+ specification_version: 2
112
+ summary: An opinionated RSpec and Cucumber runner for guard
113
+ test_files: []