bddgen 0.1.0
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/.gitignore +6 -0
- data/.rvmrc +1 -0
- data/CHANGELOG +3 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +51 -0
- data/LICENSE +19 -0
- data/README.markdown +91 -0
- data/Rakefile +42 -0
- data/bddgen.gemspec +29 -0
- data/bin/bddgen +7 -0
- data/features/generate_cucumber.feature +66 -0
- data/features/generate_project.feature +76 -0
- data/features/generate_rspec.feature +54 -0
- data/features/generate_yard.feature +69 -0
- data/features/step_definitions/bddgen_steps.rb +49 -0
- data/features/support/env.rb +6 -0
- data/features/support/helpers.rb +21 -0
- data/lib/bddgen/app.rb +119 -0
- data/lib/bddgen/extensions/string.rb +13 -0
- data/lib/bddgen/tasks.rb +22 -0
- data/lib/bddgen/version.rb +3 -0
- data/lib/bddgen.rb +6 -0
- data/spec/bddgen/extensions/string_spec.rb +39 -0
- data/spec/spec_helper.rb +9 -0
- data/templates/features/support/env.rb +2 -0
- data/templates/features/support/helpers.erb +6 -0
- data/templates/lib/project.erb +2 -0
- data/templates/rake_tasks/cucumber.rb +13 -0
- data/templates/rake_tasks/rspec.rb +12 -0
- data/templates/rake_tasks/yard.rb +5 -0
- data/templates/spec/spec_helper.rb +8 -0
- metadata +195 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm 1.9.2@bddgen
|
data/CHANGELOG
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
bddgen (0.1.0)
|
5
|
+
thor
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
aruba (0.2.6)
|
11
|
+
background_process
|
12
|
+
cucumber (~> 0.9.4)
|
13
|
+
background_process (1.2)
|
14
|
+
bluecloth (2.0.9)
|
15
|
+
builder (2.1.2)
|
16
|
+
cucumber (0.9.4)
|
17
|
+
builder (~> 2.1.2)
|
18
|
+
diff-lcs (~> 1.1.2)
|
19
|
+
gherkin (~> 2.2.9)
|
20
|
+
json (~> 1.4.6)
|
21
|
+
term-ansicolor (~> 1.0.5)
|
22
|
+
diff-lcs (1.1.2)
|
23
|
+
gherkin (2.2.9)
|
24
|
+
json (~> 1.4.6)
|
25
|
+
term-ansicolor (~> 1.0.5)
|
26
|
+
json (1.4.6)
|
27
|
+
rake (0.8.7)
|
28
|
+
rspec (2.1.0)
|
29
|
+
rspec-core (~> 2.1.0)
|
30
|
+
rspec-expectations (~> 2.1.0)
|
31
|
+
rspec-mocks (~> 2.1.0)
|
32
|
+
rspec-core (2.1.0)
|
33
|
+
rspec-expectations (2.1.0)
|
34
|
+
diff-lcs (~> 1.1.2)
|
35
|
+
rspec-mocks (2.1.0)
|
36
|
+
term-ansicolor (1.0.5)
|
37
|
+
thor (0.14.4)
|
38
|
+
yard (0.6.2)
|
39
|
+
|
40
|
+
PLATFORMS
|
41
|
+
ruby
|
42
|
+
|
43
|
+
DEPENDENCIES
|
44
|
+
aruba
|
45
|
+
bddgen!
|
46
|
+
bluecloth
|
47
|
+
cucumber
|
48
|
+
rake
|
49
|
+
rspec
|
50
|
+
thor
|
51
|
+
yard
|
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2010 Justin Blake
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# BDDGen
|
2
|
+
|
3
|
+
Generate all the boilerplate for using [Cucumber](http://cukes.info) and
|
4
|
+
[RSpec](https://github.com/rspec/rspec) in a new ruby project.
|
5
|
+
|
6
|
+
Keep in mind this is intended for plain vanilla ruby projects. If you're
|
7
|
+
writing a rails app or something, there are probably generators better
|
8
|
+
suited for the job.
|
9
|
+
|
10
|
+
Also keep in mind: **This is so alpha.** Use at your own risk. Until at
|
11
|
+
least version 1, you can't use the excuse "bddgen ate my homework!" because
|
12
|
+
*I am warning you right now that might happen*.
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
The usual:
|
17
|
+
|
18
|
+
$ gem install bddgen
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
In your project's root directory...
|
23
|
+
|
24
|
+
### Cucumber
|
25
|
+
|
26
|
+
$ bddgen cucumber
|
27
|
+
|
28
|
+
This will create a `features` directory with all the files you need to hit the
|
29
|
+
ground running, add the `cucumber` gem to your `Gemfile`, and set up your
|
30
|
+
`Rakefile` with the following tasks:
|
31
|
+
|
32
|
+
rake features # Run Cucumber features
|
33
|
+
rake features:pretty # Run Cucumber features with output in pretty format
|
34
|
+
rake features:wip # Run @wip (Work In Progress) Cucumber features
|
35
|
+
|
36
|
+
If you don't already have a `Gemfile` or `Rakefile`, one will be created.
|
37
|
+
|
38
|
+
### Rspec
|
39
|
+
|
40
|
+
$ bddgen rspec
|
41
|
+
|
42
|
+
This will create a `spec` directory with a `spec_helper.rb`, add the `rspec`
|
43
|
+
gem to your `Gemfile`, and set up your `Rakefile` with the following tasks:
|
44
|
+
|
45
|
+
rake spec # Run specs
|
46
|
+
rake spec:doc # Run specs with output in documentation format
|
47
|
+
|
48
|
+
If you don't already have a `Gemfile` or `Rakefile`, one will be created.
|
49
|
+
|
50
|
+
### For added convenience, you can also set up [yard](http://yardoc.org/):
|
51
|
+
|
52
|
+
$ bddgen yard
|
53
|
+
|
54
|
+
This will add `doc/*` and `.yardoc` to your `.gitignore`, add the `yard` gem
|
55
|
+
to your Gemfile, and set up a `yard` rake task.
|
56
|
+
|
57
|
+
If you don't already have a `Gemfile`, `Rakefile`, or `.gitignore`, one will
|
58
|
+
be created.
|
59
|
+
|
60
|
+
### From scratch:
|
61
|
+
|
62
|
+
Build an entirely new project from scratch with:
|
63
|
+
|
64
|
+
$ bddgen project name
|
65
|
+
|
66
|
+
Where `name` is the name of your new project. This will set up a new
|
67
|
+
directory with that name containing a `lib` directory skeleton, a
|
68
|
+
`.gitignore`, `Gemfile`, `Rakefile`, `CHANGELOG`,
|
69
|
+
and a `README.markdown`.
|
70
|
+
|
71
|
+
You can pass options to generate the project with the boilerplate from the
|
72
|
+
other tasks:
|
73
|
+
|
74
|
+
$ bddgen project name --cucumber --rspec --yard
|
75
|
+
|
76
|
+
This would basically be the same as:
|
77
|
+
|
78
|
+
$ bddgen project name
|
79
|
+
$ cd name
|
80
|
+
$ bddgen cucumber
|
81
|
+
$ bddgen rspec
|
82
|
+
$ bddgen yard
|
83
|
+
|
84
|
+
## TODO
|
85
|
+
|
86
|
+
* support `bddgen project` options: `--cucumber`, `--rspec`, and `--yard`
|
87
|
+
* `bddgen project` should ask if/how to create a `LICENSE` file
|
88
|
+
* Add `--mock_framework=mocha` option to rspec generator.
|
89
|
+
* Add destroy tasks
|
90
|
+
* Add development dependency if a gemspec exists.
|
91
|
+
* Don't assume use of bundler...?
|
data/Rakefile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'bundler/setup'
|
4
|
+
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
# Cucumber tasks
|
8
|
+
require 'cucumber/rake/task'
|
9
|
+
Cucumber::Rake::Task.new(:features) do |features|
|
10
|
+
features.cucumber_opts = "features --tags ~@wip --format progress"
|
11
|
+
end
|
12
|
+
namespace :features do
|
13
|
+
Cucumber::Rake::Task.new(:pretty, "Run Cucumber features with output in pretty format") do |features|
|
14
|
+
features.cucumber_opts = "features --tags ~@wip --format pretty"
|
15
|
+
end
|
16
|
+
Cucumber::Rake::Task.new(:wip, "Run @wip (Work In Progress) Cucumber features") do |features|
|
17
|
+
features.cucumber_opts = "features --tags @wip --format progress"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Yardoc tasks
|
22
|
+
require 'yard'
|
23
|
+
YARD::Rake::YardocTask.new do |t|
|
24
|
+
t.files = ['lib/**/*.rb', '-', 'CHANGELOG', 'LICENSE']
|
25
|
+
t.options = ['--no-private', '--title', 'BDDGen API Documentation']
|
26
|
+
end
|
27
|
+
|
28
|
+
# Rake tasks
|
29
|
+
require 'rspec/core/rake_task'
|
30
|
+
desc "Run specs"
|
31
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
32
|
+
t.rspec_opts = %w(--color)
|
33
|
+
end
|
34
|
+
namespace :spec do
|
35
|
+
desc "Run specs with output in documentation format"
|
36
|
+
RSpec::Core::RakeTask.new(:doc) do |t|
|
37
|
+
t.rspec_opts = ["--color", "--format d"]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Default is to run all specs and features
|
42
|
+
task :default => [:spec, :features]
|
data/bddgen.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "bddgen/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "bddgen"
|
7
|
+
s.version = BDDGen::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Justin Blake"]
|
10
|
+
s.email = ["justin@hentzia.com"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/bddgen"
|
12
|
+
s.summary = %q{BDD generators for new or existing ruby projects.}
|
13
|
+
s.description = %q{Generate a new ruby project using BDD libraries like RSpec and Cucumber, or add them to existing projects.}
|
14
|
+
s.rubyforge_project = "bddgen"
|
15
|
+
|
16
|
+
s.add_dependency "thor"
|
17
|
+
|
18
|
+
s.add_development_dependency "rake"
|
19
|
+
s.add_development_dependency "rspec"
|
20
|
+
s.add_development_dependency "cucumber"
|
21
|
+
s.add_development_dependency "aruba"
|
22
|
+
s.add_development_dependency "yard"
|
23
|
+
s.add_development_dependency "bluecloth"
|
24
|
+
|
25
|
+
s.files = `git ls-files`.split("\n")
|
26
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
27
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
28
|
+
s.require_paths = ["lib"]
|
29
|
+
end
|
data/bin/bddgen
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
Feature: Generate cucumber
|
2
|
+
In order to use cucumber in my ruby project
|
3
|
+
As a developer
|
4
|
+
I want to generate the cucumber boilerplate in my project
|
5
|
+
|
6
|
+
Scenario: Run `bddgen cucumber` in an empty project
|
7
|
+
Given a current working directory named "myproject"
|
8
|
+
When I run "bddgen cucumber"
|
9
|
+
Then the following files should be created:
|
10
|
+
| features/support/env.rb |
|
11
|
+
| features/support/helpers.rb |
|
12
|
+
| features/step_definitions/myproject_steps.rb |
|
13
|
+
| Gemfile |
|
14
|
+
| Rakefile |
|
15
|
+
And the file "features/support/env.rb" should match the template "features/support/env.rb"
|
16
|
+
And the file "features/support/helpers.rb" should contain exactly:
|
17
|
+
"""
|
18
|
+
module Myproject
|
19
|
+
module CucumberHelpers
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
World(Myproject::CucumberHelpers)
|
24
|
+
|
25
|
+
"""
|
26
|
+
And the file "Gemfile" should contain exactly:
|
27
|
+
"""
|
28
|
+
source 'http://rubygems.org'
|
29
|
+
|
30
|
+
gem 'rake'
|
31
|
+
gem 'cucumber'
|
32
|
+
|
33
|
+
"""
|
34
|
+
And the file "Rakefile" should contain the bundler setup
|
35
|
+
And the file "Rakefile" should contain the cucumber tasks
|
36
|
+
And the exit status should be 0
|
37
|
+
|
38
|
+
Scenario: Run `bddgen cucumber` in a project with an existing Gemfile
|
39
|
+
Given a current working directory named "myproject"
|
40
|
+
And a file named "Gemfile" with:
|
41
|
+
"""
|
42
|
+
source 'http://custom.com'
|
43
|
+
gem 'special'
|
44
|
+
"""
|
45
|
+
When I run "bddgen cucumber"
|
46
|
+
Then the file "Gemfile" should contain exactly:
|
47
|
+
"""
|
48
|
+
source 'http://custom.com'
|
49
|
+
gem 'special'
|
50
|
+
gem 'cucumber'
|
51
|
+
|
52
|
+
"""
|
53
|
+
And the exit status should be 0
|
54
|
+
|
55
|
+
Scenario: Run `bddgen cucumber` in a project with an existing Rakefile
|
56
|
+
Given a current working directory named "myproject"
|
57
|
+
And a file named "Rakefile" with:
|
58
|
+
"""
|
59
|
+
require 'custom'
|
60
|
+
require 'special'
|
61
|
+
"""
|
62
|
+
When I run "bddgen cucumber"
|
63
|
+
Then the file "Rakefile" should contain "require 'custom'"
|
64
|
+
And the file "Rakefile" should contain "require 'special'"
|
65
|
+
And the file "Rakefile" should contain the cucumber tasks
|
66
|
+
And the exit status should be 0
|
@@ -0,0 +1,76 @@
|
|
1
|
+
Feature: Generate project
|
2
|
+
In order to quickly bootstrap a new ruby project
|
3
|
+
As a developer
|
4
|
+
I want to generate a new ruby project with all the boilerplate I need
|
5
|
+
|
6
|
+
Scenario: Run `bddgen project myproject`
|
7
|
+
When I run "bddgen project myproject"
|
8
|
+
Then the output should say the following files were created:
|
9
|
+
| myproject |
|
10
|
+
| .gitignore |
|
11
|
+
| CHANGELOG |
|
12
|
+
| Gemfile |
|
13
|
+
| lib/myproject.rb |
|
14
|
+
| Rakefile |
|
15
|
+
| README.markdown |
|
16
|
+
And the following files should exist:
|
17
|
+
| myproject/.gitignore |
|
18
|
+
| myproject/CHANGELOG |
|
19
|
+
| myproject/Gemfile |
|
20
|
+
| myproject/lib/myproject.rb |
|
21
|
+
| myproject/Rakefile |
|
22
|
+
| myproject/README.markdown |
|
23
|
+
And a directory named "myproject/lib/myproject" should exist
|
24
|
+
And the file "myproject/lib/myproject.rb" should contain exactly:
|
25
|
+
"""
|
26
|
+
module Myproject
|
27
|
+
end
|
28
|
+
|
29
|
+
"""
|
30
|
+
And the exit status should be 0
|
31
|
+
|
32
|
+
Scenario: Run `bddgen project myproject --cucumber`
|
33
|
+
When I run "bddgen project myproject --cucumber"
|
34
|
+
Then the output should say the following files were created:
|
35
|
+
| features/step_definitions/myproject_steps.rb |
|
36
|
+
| features/support/env.rb |
|
37
|
+
| features/support/helpers.rb |
|
38
|
+
And the following files should exist:
|
39
|
+
| myproject/features/step_definitions/myproject_steps.rb |
|
40
|
+
| myproject/features/support/env.rb |
|
41
|
+
| myproject/features/support/helpers.rb |
|
42
|
+
And the file "myproject/Gemfile" should contain "gem 'cucumber'"
|
43
|
+
And the file "myproject/Rakefile" should contain the cucumber tasks
|
44
|
+
|
45
|
+
Scenario: Run `bddgen project myproject --rspec`
|
46
|
+
When I run "bddgen project myproject --rspec"
|
47
|
+
Then the output should say the following files were created:
|
48
|
+
| spec/spec_helper.rb |
|
49
|
+
And the following files should exist:
|
50
|
+
| myproject/spec/spec_helper.rb |
|
51
|
+
And the file "myproject/Gemfile" should contain "gem 'rspec'"
|
52
|
+
And the file "myproject/Rakefile" should contain the rspec tasks
|
53
|
+
|
54
|
+
Scenario: Run `bddgen project myproject --yard`
|
55
|
+
When I run "bddgen project myproject --yard"
|
56
|
+
Then the file "myproject/Gemfile" should contain "gem 'yard'"
|
57
|
+
And the file "myproject/Rakefile" should contain the yard task for "myproject"
|
58
|
+
|
59
|
+
Scenario: Run `bddgen project myproject --cucumber --rspec --yard`
|
60
|
+
When I run "bddgen project myproject --cucumber --rspec --yard"
|
61
|
+
Then the output should say the following files were created:
|
62
|
+
| features/step_definitions/myproject_steps.rb |
|
63
|
+
| features/support/env.rb |
|
64
|
+
| features/support/helpers.rb |
|
65
|
+
| spec/spec_helper.rb |
|
66
|
+
And the following files should exist:
|
67
|
+
| myproject/features/step_definitions/myproject_steps.rb |
|
68
|
+
| myproject/features/support/env.rb |
|
69
|
+
| myproject/features/support/helpers.rb |
|
70
|
+
| myproject/spec/spec_helper.rb |
|
71
|
+
And the file "myproject/Gemfile" should contain "gem 'cucumber'"
|
72
|
+
And the file "myproject/Gemfile" should contain "gem 'rspec'"
|
73
|
+
And the file "myproject/Gemfile" should contain "gem 'yard'"
|
74
|
+
And the file "myproject/Rakefile" should contain the cucumber tasks
|
75
|
+
And the file "myproject/Rakefile" should contain the rspec tasks
|
76
|
+
And the file "myproject/Rakefile" should contain the yard task for "myproject"
|
@@ -0,0 +1,54 @@
|
|
1
|
+
Feature: Generate rspec
|
2
|
+
In order to use rspec in my ruby project
|
3
|
+
As a developer
|
4
|
+
I want to generate the rspec boilerplate in my project
|
5
|
+
|
6
|
+
Scenario: Run `bddgen rspec` in an empty project
|
7
|
+
Given a current working directory named "myproject"
|
8
|
+
When I run "bddgen rspec"
|
9
|
+
Then the following files should be created:
|
10
|
+
| spec/spec_helper.rb |
|
11
|
+
| Gemfile |
|
12
|
+
| Rakefile |
|
13
|
+
And the file "spec/spec_helper.rb" should match the template "spec/spec_helper.rb"
|
14
|
+
And the file "Gemfile" should contain exactly:
|
15
|
+
"""
|
16
|
+
source 'http://rubygems.org'
|
17
|
+
|
18
|
+
gem 'rake'
|
19
|
+
gem 'rspec'
|
20
|
+
|
21
|
+
"""
|
22
|
+
And the file "Rakefile" should contain the bundler setup
|
23
|
+
And the file "Rakefile" should contain the rspec tasks
|
24
|
+
And the exit status should be 0
|
25
|
+
|
26
|
+
Scenario: Run `bddgen rspec` in a project with an existing Gemfile
|
27
|
+
Given a current working directory named "myproject"
|
28
|
+
And a file named "Gemfile" with:
|
29
|
+
"""
|
30
|
+
source 'http://custom.com'
|
31
|
+
gem 'special'
|
32
|
+
"""
|
33
|
+
When I run "bddgen rspec"
|
34
|
+
Then the file "Gemfile" should contain exactly:
|
35
|
+
"""
|
36
|
+
source 'http://custom.com'
|
37
|
+
gem 'special'
|
38
|
+
gem 'rspec'
|
39
|
+
|
40
|
+
"""
|
41
|
+
And the exit status should be 0
|
42
|
+
|
43
|
+
Scenario: Run `bddgen rspec` in a project with an existing Rakefile
|
44
|
+
Given a current working directory named "myproject"
|
45
|
+
And a file named "Rakefile" with:
|
46
|
+
"""
|
47
|
+
require 'custom'
|
48
|
+
require 'special'
|
49
|
+
"""
|
50
|
+
When I run "bddgen rspec"
|
51
|
+
Then the file "Rakefile" should contain "require 'custom'"
|
52
|
+
And the file "Rakefile" should contain "require 'special'"
|
53
|
+
And the file "Rakefile" should contain the rspec tasks
|
54
|
+
And the exit status should be 0
|
@@ -0,0 +1,69 @@
|
|
1
|
+
Feature: Generate yard
|
2
|
+
In order to use yard in my ruby project
|
3
|
+
As a developer
|
4
|
+
I want to generate the yard boilerplate
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a current working directory named "myproject"
|
8
|
+
|
9
|
+
Scenario: Run `bddgen yard` in an empty project
|
10
|
+
When I run "bddgen yard"
|
11
|
+
Then the following files should be created:
|
12
|
+
| .gitignore |
|
13
|
+
And the file ".gitignore" should contain "doc/*"
|
14
|
+
And the file ".gitignore" should contain ".yardoc"
|
15
|
+
And the file "Gemfile" should contain exactly:
|
16
|
+
"""
|
17
|
+
source 'http://rubygems.org'
|
18
|
+
|
19
|
+
gem 'rake'
|
20
|
+
gem 'yard'
|
21
|
+
|
22
|
+
"""
|
23
|
+
And the file "Rakefile" should contain the bundler setup
|
24
|
+
And the file "Rakefile" should contain the yard task
|
25
|
+
And the exit status should be 0
|
26
|
+
|
27
|
+
Scenario: Run `bddgen yard` in a project with an existing .gitignore
|
28
|
+
Given a file named ".gitignore" with:
|
29
|
+
"""
|
30
|
+
pkg/*
|
31
|
+
tmp/*
|
32
|
+
"""
|
33
|
+
When I run "bddgen yard"
|
34
|
+
Then the file ".gitignore" should contain exactly:
|
35
|
+
"""
|
36
|
+
pkg/*
|
37
|
+
tmp/*
|
38
|
+
doc/*
|
39
|
+
.yardoc
|
40
|
+
|
41
|
+
"""
|
42
|
+
|
43
|
+
Scenario: Run `bddgen yard` in a project with an existing Gemfile
|
44
|
+
Given a file named "Gemfile" with:
|
45
|
+
"""
|
46
|
+
source 'http://custom.com'
|
47
|
+
gem 'special'
|
48
|
+
"""
|
49
|
+
When I run "bddgen yard"
|
50
|
+
Then the file "Gemfile" should contain exactly:
|
51
|
+
"""
|
52
|
+
source 'http://custom.com'
|
53
|
+
gem 'special'
|
54
|
+
gem 'yard'
|
55
|
+
|
56
|
+
"""
|
57
|
+
And the exit status should be 0
|
58
|
+
|
59
|
+
Scenario: Run `bddgen yard` in a project with an existing Rakefile
|
60
|
+
Given a file named "Rakefile" with:
|
61
|
+
"""
|
62
|
+
require 'custom'
|
63
|
+
require 'special'
|
64
|
+
"""
|
65
|
+
When I run "bddgen yard"
|
66
|
+
Then the file "Rakefile" should contain "require 'custom'"
|
67
|
+
And the file "Rakefile" should contain "require 'special'"
|
68
|
+
And the file "Rakefile" should contain the yard task
|
69
|
+
And the exit status should be 0
|
@@ -0,0 +1,49 @@
|
|
1
|
+
Given /^a current working directory named "([^"]*)"$/ do |directory|
|
2
|
+
@working_dir = directory
|
3
|
+
Given "a directory named \"#{directory}\""
|
4
|
+
Given "I cd to \"#{directory}\""
|
5
|
+
end
|
6
|
+
|
7
|
+
Then /^the output should say the following files were created:$/ do |table|
|
8
|
+
table.raw.each do |row|
|
9
|
+
row.each do |col|
|
10
|
+
# can't use the aruba-provided step here because of a regex gotcha
|
11
|
+
all_output.should =~ /create.+#{Regexp.escape(col)}/
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Then /^the following files should be created:$/ do |table|
|
17
|
+
Then "the output should say the following files were created:", table
|
18
|
+
Then "the following files should exist:", table
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^the file "([^"]*)" should contain the cucumber tasks$/ do |file|
|
22
|
+
read_temp_file(file).should include(BDDGen::Tasks.cucumber)
|
23
|
+
end
|
24
|
+
|
25
|
+
Then /^the file "([^"]*)" should contain the rspec tasks$/ do |file|
|
26
|
+
read_temp_file(file).should include(BDDGen::Tasks.rspec)
|
27
|
+
end
|
28
|
+
|
29
|
+
Then /^the file "([^"]*)" should contain the yard task$/ do |file|
|
30
|
+
read_temp_file(file).should include(BDDGen::Tasks.yard(@working_dir))
|
31
|
+
end
|
32
|
+
|
33
|
+
Then /^the file "([^"]*)" should contain the yard task for "([^"]*)"$/ do |file, working_dir|
|
34
|
+
read_temp_file(file).should include(BDDGen::Tasks.yard(working_dir))
|
35
|
+
end
|
36
|
+
|
37
|
+
Then /^the file "([^"]*)" should contain the bundler setup$/ do |file|
|
38
|
+
Then "the file \"#{file}\" should contain \"require 'rubygems'\""
|
39
|
+
Then "the file \"#{file}\" should contain \"require 'bundler'\""
|
40
|
+
Then "the file \"#{file}\" should contain \"require 'bundler/setup'\""
|
41
|
+
end
|
42
|
+
|
43
|
+
Then /^the file "([^"]*)" should match the template "([^"]*)"$/ do |file, template|
|
44
|
+
file_contents = read_temp_file(file)
|
45
|
+
template = File.join(template_dir, template)
|
46
|
+
File.should exist(template)
|
47
|
+
template_contents = File.read(template)
|
48
|
+
file_contents.strip.should == template_contents.strip
|
49
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module BDDGen
|
2
|
+
module CucumberHelpers
|
3
|
+
def tmp_dir
|
4
|
+
File.expand_path("../../tmp/aruba", File.dirname(__FILE__))
|
5
|
+
end
|
6
|
+
|
7
|
+
def template_dir
|
8
|
+
BDDGen::App.source_root
|
9
|
+
end
|
10
|
+
|
11
|
+
def read_temp_file(file)
|
12
|
+
if @working_dir
|
13
|
+
File.read(File.join(tmp_dir, @working_dir, file))
|
14
|
+
else
|
15
|
+
File.read(File.join(tmp_dir, file))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
World(BDDGen::CucumberHelpers)
|
data/lib/bddgen/app.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module BDDGen
|
4
|
+
class App < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
def self.source_root
|
8
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'templates'))
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "cucumber", "Generate boilerplate for cucumber"
|
12
|
+
def cucumber
|
13
|
+
init_gemfile
|
14
|
+
append_gem 'cucumber'
|
15
|
+
|
16
|
+
init_rakefile
|
17
|
+
append_task BDDGen::Tasks.cucumber
|
18
|
+
|
19
|
+
add_file "features/step_definitions/#{project_name}_steps.rb"
|
20
|
+
copy_file "features/support/env.rb"
|
21
|
+
template "features/support/helpers.erb", "features/support/helpers.rb"
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "rspec", "Generate boilerplate for rspec"
|
25
|
+
def rspec
|
26
|
+
init_gemfile
|
27
|
+
append_gem 'rspec'
|
28
|
+
|
29
|
+
init_rakefile
|
30
|
+
append_task BDDGen::Tasks.rspec
|
31
|
+
|
32
|
+
copy_file "spec/spec_helper.rb"
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "yard", "Generate boilerplate for yard"
|
36
|
+
def yard
|
37
|
+
init_gemfile
|
38
|
+
append_gem 'yard'
|
39
|
+
|
40
|
+
init_rakefile
|
41
|
+
append_task BDDGen::Tasks.yard(project_name)
|
42
|
+
|
43
|
+
init_gitignore
|
44
|
+
append_file ".gitignore", "doc/*\n"
|
45
|
+
append_file ".gitignore", ".yardoc\n"
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "project name", "Generate a new ruby project named [name]"
|
49
|
+
method_options :cucumber => :boolean, :rspec => :boolean, :yard => :boolean
|
50
|
+
def project(name)
|
51
|
+
empty_directory name
|
52
|
+
self.destination_root = name
|
53
|
+
|
54
|
+
empty_directory "lib/#{name}"
|
55
|
+
|
56
|
+
init_gitignore
|
57
|
+
init_gemfile
|
58
|
+
init_rakefile
|
59
|
+
|
60
|
+
add_file "CHANGELOG"
|
61
|
+
add_file "README.markdown"
|
62
|
+
|
63
|
+
template "lib/project.erb", "lib/#{name}.rb"
|
64
|
+
|
65
|
+
cucumber if options.cucumber?
|
66
|
+
rspec if options.rspec?
|
67
|
+
yard if options.yard?
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def project_name
|
73
|
+
destination_root.split(/\/|\\/).last
|
74
|
+
end
|
75
|
+
|
76
|
+
def init_gemfile
|
77
|
+
unless destination_file_exists?("Gemfile")
|
78
|
+
add_file "Gemfile"
|
79
|
+
append_file "Gemfile" do
|
80
|
+
"source 'http://rubygems.org'\n\n" +
|
81
|
+
"gem 'rake'\n"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def init_rakefile
|
87
|
+
unless destination_file_exists?("Rakefile")
|
88
|
+
add_file "Rakefile"
|
89
|
+
append_file "Rakefile" do
|
90
|
+
"require 'rubygems'\n" +
|
91
|
+
"require 'bundler'\n" +
|
92
|
+
"require 'bundler/setup'\n\n"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def init_gitignore
|
98
|
+
add_file ".gitignore" unless destination_file_exists?(".gitignore")
|
99
|
+
ensure_eof_newline(".gitignore")
|
100
|
+
end
|
101
|
+
|
102
|
+
def destination_file_exists?(filename)
|
103
|
+
File.exist?(File.join(destination_root, filename))
|
104
|
+
end
|
105
|
+
|
106
|
+
def append_gem(gem_name)
|
107
|
+
ensure_eof_newline("Gemfile")
|
108
|
+
append_file "Gemfile", "gem '#{gem_name}'\n"
|
109
|
+
end
|
110
|
+
|
111
|
+
def append_task(the_task)
|
112
|
+
append_file "Rakefile", "\n\n#{the_task}\n"
|
113
|
+
end
|
114
|
+
|
115
|
+
def ensure_eof_newline(filename)
|
116
|
+
gsub_file(filename, /([^\n])\z/, "\\1\n")
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module BDDGen
|
2
|
+
module Extensions
|
3
|
+
module String
|
4
|
+
# This is a really simple stupid method that can't handle much besides
|
5
|
+
# strings that have spaces, dashes, or underscores.
|
6
|
+
def camelize
|
7
|
+
self.capitalize.gsub(/[ _\-]+([a-z])?/) { $1.upcase }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
String.send(:include, BDDGen::Extensions::String)
|
data/lib/bddgen/tasks.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module BDDGen
|
2
|
+
class Tasks
|
3
|
+
def self.cucumber
|
4
|
+
@cucumber_tasks ||= read_task_file('cucumber.rb')
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.rspec
|
8
|
+
@rspec_tasks ||= read_task_file('rspec.rb')
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.yard(project_name)
|
12
|
+
@yard_tasks ||= read_task_file('yard.rb').gsub(
|
13
|
+
'{{project_name}}', project_name
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def self.read_task_file(filename)
|
19
|
+
File.read(File.join(BDDGen::App.source_root, 'rake_tasks', filename))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/bddgen.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BDDGen::Extensions::String do
|
4
|
+
it "adds a #camelize method to all strings" do
|
5
|
+
"my string".methods.should include(:camelize)
|
6
|
+
"your string".methods.should include(:camelize)
|
7
|
+
"our string".methods.should include(:camelize)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#camelize' do
|
11
|
+
it "returns a capitilzed version of a simple string" do
|
12
|
+
"yo".camelize.should == "Yo"
|
13
|
+
"skullcrusher".camelize.should == "Skullcrusher"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns a camel-cased version of an underscored string" do
|
17
|
+
"voices_that_control_me".camelize.should == "VoicesThatControlMe"
|
18
|
+
"fashion_police".camelize.should == "FashionPolice"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns a camel-cased version of a dashed string" do
|
22
|
+
"use-passenger".camelize.should == "UsePassenger"
|
23
|
+
"send-my-regards".camelize.should == "SendMyRegards"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns a camel-cased version of a string with spaces" do
|
27
|
+
"the youth fountain".camelize.should == "TheYouthFountain"
|
28
|
+
"it hurts".camelize.should == "ItHurts"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns a camel-cased version of a string with underscores, dashes, and spaces" do
|
32
|
+
"shuffled up-sixth_street".camelize.should == "ShuffledUpSixthStreet"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "doesn't choke on multiple sequential dashes, spaces, or underscores" do
|
36
|
+
" they___come-_ out to__-smoke".camelize.should == "TheyComeOutToSmoke"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'cucumber/rake/task'
|
2
|
+
Cucumber::Rake::Task.new(:features) do |features|
|
3
|
+
features.cucumber_opts = "features --tags ~@wip --format progress"
|
4
|
+
end
|
5
|
+
namespace :features do
|
6
|
+
Cucumber::Rake::Task.new(:pretty, "Run Cucumber features with output in pretty format") do |features|
|
7
|
+
features.cucumber_opts = "features --tags ~@wip --format pretty"
|
8
|
+
end
|
9
|
+
Cucumber::Rake::Task.new(:wip, "Run @wip (Work In Progress) Cucumber features") do |features|
|
10
|
+
features.cucumber_opts = "features --tags @wip --format progress"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
desc "Run specs"
|
3
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
4
|
+
t.rspec_opts = %w(--color)
|
5
|
+
end
|
6
|
+
namespace :spec do
|
7
|
+
desc "Run specs with output in documentation format"
|
8
|
+
RSpec::Core::RakeTask.new(:doc) do |t|
|
9
|
+
t.rspec_opts = ["--color", "--format d"]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
metadata
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bddgen
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Justin Blake
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-11-23 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: thor
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
prerelease: false
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
42
|
+
version: "0"
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: cucumber
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
type: :development
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: *id004
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: aruba
|
74
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
version: "0"
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: *id005
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: yard
|
87
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
segments:
|
93
|
+
- 0
|
94
|
+
version: "0"
|
95
|
+
type: :development
|
96
|
+
prerelease: false
|
97
|
+
version_requirements: *id006
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: bluecloth
|
100
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
version: "0"
|
108
|
+
type: :development
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: *id007
|
111
|
+
description: Generate a new ruby project using BDD libraries like RSpec and Cucumber, or add them to existing projects.
|
112
|
+
email:
|
113
|
+
- justin@hentzia.com
|
114
|
+
executables:
|
115
|
+
- bddgen
|
116
|
+
extensions: []
|
117
|
+
|
118
|
+
extra_rdoc_files: []
|
119
|
+
|
120
|
+
files:
|
121
|
+
- .gitignore
|
122
|
+
- .rvmrc
|
123
|
+
- CHANGELOG
|
124
|
+
- Gemfile
|
125
|
+
- Gemfile.lock
|
126
|
+
- LICENSE
|
127
|
+
- README.markdown
|
128
|
+
- Rakefile
|
129
|
+
- bddgen.gemspec
|
130
|
+
- bin/bddgen
|
131
|
+
- features/generate_cucumber.feature
|
132
|
+
- features/generate_project.feature
|
133
|
+
- features/generate_rspec.feature
|
134
|
+
- features/generate_yard.feature
|
135
|
+
- features/step_definitions/bddgen_steps.rb
|
136
|
+
- features/support/env.rb
|
137
|
+
- features/support/helpers.rb
|
138
|
+
- lib/bddgen.rb
|
139
|
+
- lib/bddgen/app.rb
|
140
|
+
- lib/bddgen/extensions/string.rb
|
141
|
+
- lib/bddgen/tasks.rb
|
142
|
+
- lib/bddgen/version.rb
|
143
|
+
- spec/bddgen/extensions/string_spec.rb
|
144
|
+
- spec/spec_helper.rb
|
145
|
+
- templates/features/support/env.rb
|
146
|
+
- templates/features/support/helpers.erb
|
147
|
+
- templates/lib/project.erb
|
148
|
+
- templates/rake_tasks/cucumber.rb
|
149
|
+
- templates/rake_tasks/rspec.rb
|
150
|
+
- templates/rake_tasks/yard.rb
|
151
|
+
- templates/spec/spec_helper.rb
|
152
|
+
has_rdoc: true
|
153
|
+
homepage: http://rubygems.org/gems/bddgen
|
154
|
+
licenses: []
|
155
|
+
|
156
|
+
post_install_message:
|
157
|
+
rdoc_options: []
|
158
|
+
|
159
|
+
require_paths:
|
160
|
+
- lib
|
161
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
hash: 3661949598000053515
|
167
|
+
segments:
|
168
|
+
- 0
|
169
|
+
version: "0"
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
+
none: false
|
172
|
+
requirements:
|
173
|
+
- - ">="
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
hash: 3661949598000053515
|
176
|
+
segments:
|
177
|
+
- 0
|
178
|
+
version: "0"
|
179
|
+
requirements: []
|
180
|
+
|
181
|
+
rubyforge_project: bddgen
|
182
|
+
rubygems_version: 1.3.7
|
183
|
+
signing_key:
|
184
|
+
specification_version: 3
|
185
|
+
summary: BDD generators for new or existing ruby projects.
|
186
|
+
test_files:
|
187
|
+
- features/generate_cucumber.feature
|
188
|
+
- features/generate_project.feature
|
189
|
+
- features/generate_rspec.feature
|
190
|
+
- features/generate_yard.feature
|
191
|
+
- features/step_definitions/bddgen_steps.rb
|
192
|
+
- features/support/env.rb
|
193
|
+
- features/support/helpers.rb
|
194
|
+
- spec/bddgen/extensions/string_spec.rb
|
195
|
+
- spec/spec_helper.rb
|