Feature: generated Rakefile
In order to start a new gem
A user should be able to
generate a Rakefile
Background:
Given a working directory
And I have configured git sanely
Scenario: shared
When I generate a project named 'the-perfect-gem' that is 'zomg, so good' and described as 'Descriptive'
Then 'Rakefile' requires 'bundler'
And 'Rakefile' sets up bundler using the default and development groups
And 'Rakefile' requires 'rubygems'
And 'Rakefile' requires 'rake'
And 'Rakefile' requires 'rdoc/task'
And Rakefile has 'the-perfect-gem' for the Jeweler::Tasks name
And Rakefile has '[email protected]' for the Jeweler::Tasks email
And Rakefile has 'zomg, so good' for the Jeweler::Tasks summary
And Rakefile has 'Descriptive' for the Jeweler::Tasks description
And Rakefile has 'http://github.com/technicalpickles/the-perfect-gem' for the Jeweler::Tasks homepage
And Rakefile has 'MIT' for the Jeweler::Tasks license
And Rakefile instantiates a Jeweler::RubygemsDotOrgTasks
And Rakefile has a magic comment for UTF-8
Scenario: bacon
When I generate a bacon project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' requires 'rcov/rcovtask'
And Rakefile has 'spec/**/*_spec.rb' for the Rake::TestTask pattern
And Rakefile has 'spec/**/*_spec.rb' for the Rcov::RcovTask pattern
And Rakefile has 'spec' in the Rcov::RcovTask libs
And Rakefile has "spec" as the default task
Scenario: minitest
When I generate a minitest project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' requires 'rcov/rcovtask'
And Rakefile has 'test/**/test_*.rb' for the Rake::TestTask pattern
And Rakefile has 'test/**/test_*.rb' for the Rcov::RcovTask pattern
And Rakefile has 'test' in the Rcov::RcovTask libs
And Rakefile has "test" as the default task
@rspec
Scenario: rspec
When I generate a rspec project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' requires 'rspec/core'
And 'Rakefile' requires 'rspec/core/rake_task'
And Rakefile has 'spec/**/*_spec.rb' for the RSpec::Core::RakeTask pattern
And Rakefile has "spec" as the default task
Scenario: shoulda
When I generate a shoulda project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' requires 'rcov/rcovtask'
And Rakefile has 'test/**/test_*.rb' for the Rake::TestTask pattern
And Rakefile has 'test/**/test_*.rb' for the Rcov::RcovTask pattern
And Rakefile has 'test' in the Rcov::RcovTask libs
And Rakefile has "test" as the default task
Scenario: micronaut
When I generate a micronaut project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' requires 'micronaut/rake_task'
And Rakefile has 'examples/**/*_example.rb' for the Micronaut::RakeTask pattern
And Rakefile has "examples" as the default task
Scenario: testunit
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' requires 'rcov/rcovtask'
Then Rakefile has 'test/**/test_*.rb' for the Rake::TestTask pattern
And Rakefile has 'test/**/test_*.rb' for the Rcov::RcovTask pattern
And Rakefile has 'test' in the Rcov::RcovTask libs
And Rakefile has '--exclude "gems/*"' in the Rcov::RcovTask rcov_opts
And Rakefile has "test" as the default task
Scenario: no cucumber
Given I do not want cucumber stories
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile does not require 'cucumber/rake/task'
And Rakefile does not instantiate a Cucumber::Rake::Task
Scenario: cucumber
Given I want cucumber stories
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile requires 'cucumber/rake/task'
And Rakefile instantiates a Cucumber::Rake::Task
Scenario: no reek
Given I do not want reek
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile does not require 'reek/rake/task'
And Rakefile does not instantiate a Reek::Rake::Task
Scenario: reek
Given I want reek
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile requires 'reek/rake/task'
And Rakefile instantiates a Reek::Rake::Task
Scenario: no roodi
Given I do not want roodi
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile does not require 'roodi'
And Rakefile does not require 'roodi_task'
And Rakefile does not instantiate a RoodiTask
Scenario: roodi
Given I want roodi
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile requires 'roodi'
And Rakefile requires 'roodi_task'
And Rakefile instantiates a RoodiTask
Scenario: no rubyforge
Given I do not want rubyforge setup
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile does not instantiate a Jeweler::RubyforgeTasks
Scenario: yard
Given I want to use yard instead of rdoc
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' does not require 'rdoc/task'
And 'Rakefile' requires 'yard'
And Rakefile instantiates a YARD::Rake::YardocTask
Scenario: rdoc
Given I want to use rdoc instead of yard
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' does not require 'yard'
And 'Rakefile' requires 'rdoc/task'
And Rakefile does not instantiate a YARD::Rake::YardocTask
And Rakefile instantiates a Rake::RDocTask.new
Scenario: shindo
When I generate a shindo project named 'the-perfect-gem' that is 'zomg, so good'
And 'Rakefile' requires 'shindo/rake'
And Rakefile instantiates a Shindo::Rake.new
And Rakefile has "tests" as the default task
Scenario: bundler
Given I want bundler
When I generate a project named 'the-perfect-gem' that is 'zomg, so good' and described as 'Descriptive'
Then 'Rakefile' requires 'bundler'
And 'Rakefile' sets up bundler using the default and development groups
And Rakefile does not add 'jeweler' as a development dependency to Jeweler::Tasks
Scenario: no bundler
Given I do not want bundler
When I generate a project named 'the-perfect-gem' that is 'zomg, so good' and described as 'Descriptive'
Then 'Rakefile' does not require 'bundler'
And 'Rakefile' does not setup bundler
And Rakefile adds 'jeweler' as a development dependency to Jeweler::Tasks