shoe 0.6.1 → 0.6.2

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.
Files changed (51) hide show
  1. data/CHANGELOG.rdoc +10 -0
  2. data/README.rdoc +2 -4
  3. data/TODO.rdoc +8 -2
  4. data/data/shoe/templates/extension.erb +18 -2
  5. data/data/shoe/templates/gemspec.erb +5 -13
  6. data/data/shoe/templates/{manpage.erb → manpage_1.erb} +3 -4
  7. data/data/shoe/templates/manpage_3.erb +19 -0
  8. data/lib/shoe.rb +1 -1
  9. data/lib/shoe/extensions.rb +1 -0
  10. data/lib/shoe/extensions/option_parser.rb +5 -7
  11. data/lib/shoe/extensions/test_runner.rb +28 -0
  12. data/lib/shoe/extensions/validator.rb +16 -4
  13. data/lib/shoe/generator.rb +2 -1
  14. data/lib/shoe/tasks/clean.rb +20 -3
  15. data/lib/shoe/tasks/compile.rb +5 -1
  16. data/lib/shoe/tasks/cucumber.rb +2 -2
  17. data/lib/shoe/tasks/rdoc.rb +6 -1
  18. data/lib/shoe/tasks/release.rb +1 -1
  19. data/lib/shoe/tasks/ronn.rb +8 -4
  20. data/lib/shoe/tasks/test.rb +33 -16
  21. data/man/shoe.1 +9 -10
  22. data/man/shoe.1.ronn +13 -16
  23. data/man/shoe.3 +68 -0
  24. data/man/shoe.3.ronn +64 -0
  25. data/test/extensions/fake_rubygems_server.rb +62 -0
  26. data/test/extensions/helper_methods.rb +73 -0
  27. data/test/extensions/isolated_environment.rb +50 -0
  28. data/test/extensions/test_case.rb +40 -0
  29. data/test/helper.rb +20 -0
  30. data/test/system/rake_clean_test.rb +36 -0
  31. data/test/system/rake_compile_test.rb +25 -0
  32. data/test/system/rake_cucumber_test.rb +51 -0
  33. data/test/system/rake_rdoc_test.rb +26 -0
  34. data/test/system/rake_release_test.rb +94 -0
  35. data/test/system/rake_ronn_test.rb +25 -0
  36. data/test/system/rake_test_test.rb +45 -0
  37. data/test/system/shoe_test.rb +79 -0
  38. metadata +48 -26
  39. data/.gitignore +0 -4
  40. data/BUNDLER.rdoc +0 -16
  41. data/Gemfile +0 -9
  42. data/Gemfile.lock +0 -49
  43. data/Rakefile +0 -4
  44. data/cucumber.yml +0 -2
  45. data/features/cucumber.feature +0 -27
  46. data/features/generator.feature +0 -32
  47. data/features/release.feature +0 -33
  48. data/features/step_definitions/shoe_steps.rb +0 -39
  49. data/features/support/env.rb +0 -69
  50. data/features/test.feature +0 -18
  51. data/shoe.gemspec +0 -44
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- .bundle
2
- .rvmrc
3
- *.gem
4
- rdoc
@@ -1,16 +0,0 @@
1
- = Using Shoe with {Bundler}[http://gembundler.com]
2
-
3
- Bootstrapping is a little chicken-and-egg-y, but with the following initial <tt>Gemfile</tt>:
4
-
5
- source :rubygems
6
- gem 'shoe', :group => :development
7
-
8
- You should be able to:
9
-
10
- $ bundle install
11
- $ bundle exec shoe .
12
-
13
- From there, I've been preferring <tt>`bundle exec bash`</tt> over <tt>`bundle
14
- exec rake`</tt> or using <tt>require 'bundler/setup'</tt> in my
15
- <tt>Rakefile</tt>. But, if you're using Bundler, you're probably already used
16
- to puzzling over such things!
data/Gemfile DELETED
@@ -1,9 +0,0 @@
1
- source :rubygems
2
-
3
- gem 'rake'
4
- gem 'launchy'
5
-
6
- group :development do
7
- gem 'cucumber'
8
- gem 'ronn'
9
- end
@@ -1,49 +0,0 @@
1
- ---
2
- dependencies:
3
- ronn:
4
- group:
5
- - :development
6
- version: ">= 0"
7
- rake:
8
- group:
9
- - :default
10
- version: ">= 0"
11
- cucumber:
12
- group:
13
- - :development
14
- version: ">= 0"
15
- launchy:
16
- group:
17
- - :default
18
- version: ">= 0"
19
- specs:
20
- - rake:
21
- version: 0.8.7
22
- - builder:
23
- version: 2.1.2
24
- - configuration:
25
- version: 1.1.0
26
- - diff-lcs:
27
- version: 1.1.2
28
- - json_pure:
29
- version: 1.2.4
30
- - polyglot:
31
- version: 0.3.1
32
- - term-ansicolor:
33
- version: 1.0.5
34
- - treetop:
35
- version: 1.4.5
36
- - cucumber:
37
- version: 0.6.4
38
- - hpricot:
39
- version: 0.8.2
40
- - launchy:
41
- version: 0.3.5
42
- - rdiscount:
43
- version: 1.6.3
44
- - ronn:
45
- version: "0.5"
46
- hash: d47953731e3f472755d844fb72d2644ea08f56d9
47
- sources:
48
- - Rubygems:
49
- uri: http://gemcutter.org
data/Rakefile DELETED
@@ -1,4 +0,0 @@
1
- $:.unshift 'lib'
2
- require 'shoe'
3
-
4
- Shoe::Tasks.define('shoe.gemspec')
@@ -1,2 +0,0 @@
1
- default: --format progress --tags ~@wip
2
- wip: --tags @wip --wip
@@ -1,27 +0,0 @@
1
- Feature: Cucumber
2
- In order to use cucumber conveniently
3
- As a developer
4
- I want shoe to give me a rake task
5
-
6
- Scenario: Running rake --tasks in a shoe project without Cucumber features
7
- Given I have run shoe my_project inside "."
8
- When I run rake --tasks inside "my_project"
9
- Then I should not see "rake cucumber" on standard out
10
-
11
- Scenario: Running rake --tasks in a shoe project with Cucumber features
12
- Given I have run shoe my_project inside "."
13
- And I have run git init inside "."
14
- And I have created a file called "my_project/cucumber.yml" containing:
15
- """
16
- default: --tags ~@wip
17
- wip: --tags @wip --wip
18
- """
19
- When I run rake --tasks inside "my_project"
20
- Then I should see "rake cucumber" on standard out
21
- And I should see "rake cucumber:wip" on standard out
22
-
23
- Scenario: Running rake --tasks in a shoe project with a bad cucumber.yml
24
- Given I have run shoe my_project inside "."
25
- And I have created a file called "my_project/cucumber.yml" containing ""
26
- When I run rake --tasks inside "my_project"
27
- Then I should not see "rake cucumber" on standard out
@@ -1,32 +0,0 @@
1
- Feature: Getting started
2
- In order to start using shoe
3
- As a developer
4
- I want a little help generating my Rakefile
5
-
6
- Scenario: Running shoe to create a new project
7
- When I run shoe my_project inside "."
8
- Then I should see a file "my_project/.gitignore"
9
- And I should see a file "my_project/Rakefile"
10
- And I should see a file "my_project/README.rdoc"
11
- And I should see a file "my_project/lib/my_project.rb"
12
- And I should see a file "my_project/test/helper.rb"
13
- And I should see a file "my_project/test/my_project_test.rb"
14
- And I should see a file "my_project/my_project.gemspec"
15
-
16
- Scenario: Running shoe --application to create a new project
17
- When I run shoe --application my_project inside "."
18
- Then I should see a file "my_project/bin/my_project"
19
- And I should see a file "my_project/lib/my_project/application.rb"
20
-
21
- Scenario: Running shoe --extension to create a new project
22
- When I run shoe --extension my_project inside "."
23
- Then I should see a file "my_project/ext/my_project/extconf.rb"
24
- And I should see a file "my_project/ext/my_project/extension.c"
25
-
26
- Scenario: Running shoe with no arguments in an existing project that already has a Rakefile
27
- Given I have created a directory called "my_project"
28
- And I have created a file called "my_project/Rakefile" containing "# RAKEFILE CONTENTS"
29
- When I run shoe inside "my_project"
30
- Then I should see "WARN: not clobbering existing Rakefile" on standard error
31
- And the contents of "my_project/Rakefile" should still be "# RAKEFILE CONTENTS"
32
-
@@ -1,33 +0,0 @@
1
- Feature: Release
2
- In order to conveniently make a release of my project
3
- As a developer
4
- I want shoe to give me a rake task
5
-
6
- Background:
7
- Given I have created a directory called "origin"
8
- And I have run git init --bare inside "origin"
9
- Given I have run shoe my_project inside "."
10
- And I have run git init inside "my_project"
11
- And I have run git add . inside "my_project"
12
- And I have run git commit -m "Initial commit" inside "my_project"
13
-
14
- Scenario: I can release
15
- When I replace "0.0.0" with "0.1.0" in the file "my_project/lib/my_project.rb"
16
- And I run rake --tasks inside "my_project"
17
- Then I should see "rake release" on standard out
18
-
19
- Scenario: I cannot release when the version is 0.0.0
20
- When I run rake --tasks inside "my_project"
21
- Then I should not see "rake release" on standard out
22
-
23
- Scenario: I cannot release when I already have a tag for the current version
24
- When I run git tag v0.1.0 inside "my_project"
25
- And I replace "0.0.0" with "0.1.0" in the file "my_project/lib/my_project.rb"
26
- And I run rake --tasks inside "my_project"
27
- Then I should not see "rake release" on standard out
28
-
29
- Scenario: I cannot release from a branch other than master
30
- When I run git checkout -b topic inside "my_project"
31
- And I replace "0.0.0" with "0.1.0" in the file "my_project/lib/my_project.rb"
32
- And I run rake --tasks inside "my_project"
33
- Then I should not see "rake release" on standard out
@@ -1,39 +0,0 @@
1
- Given /^I have created a directory called "([^\"]*)"$/ do |name|
2
- create_directory(name)
3
- end
4
-
5
- Given /^I have created a file called "([^\"]*)" containing "([^\"]*)"$/ do |path, contents|
6
- create_file(path, contents)
7
- end
8
-
9
- Given /^I have created a file called "([^\"]*)" containing:$/ do |path, contents|
10
- create_file(path, contents)
11
- end
12
-
13
- Given /^I have appended "([^\"]*)" to "([^\"]*)"$/ do |contents, path|
14
- append_file(path, contents)
15
- end
16
-
17
- When /^I replace "([^\"]*)" with "([^\"]*)" in the file "([^\"]*)"$/ do |search, replace, path|
18
- edit_file(path, search, replace)
19
- end
20
-
21
- When /^I (?:have )?run (.*) inside "([^\"]*)"$/ do |command, path|
22
- run(command, path)
23
- end
24
-
25
- Then /^I should(.*) see "([^\"]*)" on (standard.*)$/ do |negate, message, standard_out_or_error|
26
- standard_out_or_error.tr!(' ', '_')
27
- am_i_expecting_to_see_something = negate.strip.empty?
28
- contents = send(standard_out_or_error)
29
-
30
- assert_equal am_i_expecting_to_see_something, contents.include?(message), contents
31
- end
32
-
33
- Then /^I should see a file "([^\"]*)"$/ do |path|
34
- assert file(path).exist?
35
- end
36
-
37
- Then /^the contents of "([^\"]*)" should still be "([^\"]*)"$/ do |path, expected|
38
- assert_equal expected, file(path).read
39
- end
@@ -1,69 +0,0 @@
1
- require 'open3'
2
- require 'pathname'
3
- require 'test/unit/assertions'
4
- require 'tmpdir'
5
-
6
- class WorkingDirectory
7
- PROJECT_ROOT = Pathname.new(File.expand_path('../../..', __FILE__))
8
-
9
- attr_reader :working_directory
10
- attr_reader :standard_out
11
- attr_reader :standard_error
12
-
13
- def initialize
14
- @working_directory = Pathname.new(Dir.mktmpdir)
15
- end
16
-
17
- def create_directory(path)
18
- file(path).mkpath
19
- end
20
-
21
- def create_file(path, contents)
22
- file(path).open('w') { |file| file.write(contents) }
23
- end
24
-
25
- def append_file(path, contents)
26
- file(path).open('a') { |file| file.write(contents) }
27
- end
28
-
29
- def edit_file(path, search, replace)
30
- old_contents = file(path).read
31
- new_contents = old_contents.gsub(search, replace)
32
- create_file(path, new_contents)
33
- end
34
-
35
- def file(path)
36
- working_directory.join(path)
37
- end
38
-
39
- def run(command, path)
40
- Dir.chdir(working_directory.join(path)) do
41
- Open3.popen3(isolate_environment(command)) do |stdin, stdout, stderr|
42
- @standard_out = stdout.read
43
- @standard_error = stderr.read
44
- end
45
- end
46
- end
47
-
48
- private
49
-
50
- def isolate_environment(command)
51
- # set the PATH so tests can just run shoe
52
- ENV['PATH'] = ENV['PATH'].split(File::PATH_SEPARATOR).
53
- unshift(PROJECT_ROOT.join('bin')).uniq.
54
- join(File::PATH_SEPARATOR)
55
- ENV['RUBYLIB'] = PROJECT_ROOT.join('lib')
56
-
57
- # whack most environment variables for good hygiene
58
- "/usr/bin/env -i #{preserve_environment 'HOME', 'PATH', 'GEM_HOME', 'GEM_PATH', 'RUBYLIB'} #{command}"
59
- end
60
-
61
- def preserve_environment(*variables)
62
- variables.map { |name| "#{name}='#{ENV[name]}'" }.join(' ')
63
- end
64
- end
65
-
66
- World(Test::Unit::Assertions)
67
- World { WorkingDirectory.new }
68
- Before { working_directory.mkpath }
69
- After { working_directory.rmtree }
@@ -1,18 +0,0 @@
1
- Feature: Test
2
- In order to run tests
3
- As a developer
4
- I want shoe to give me a rake task
5
-
6
- Scenario: Running rake --tasks in a shoe project without tests
7
- Given I have run shoe --no-test-unit my_project inside "."
8
- And I have run git init inside "my_project"
9
- When I run rake --tasks inside "my_project"
10
- Then I should not see "rake test" on standard out
11
-
12
- Scenario: Running rake --tasks in a shoe project with tests
13
- Given I have run shoe --no-test-unit my_project inside "."
14
- And I have run git init inside "my_project"
15
- And I have created a directory called "my_project/test"
16
- And I have created a file called "my_project/test/foo_test.rb" containing ""
17
- When I run rake --tasks inside "my_project"
18
- Then I should see "rake test" on standard out
@@ -1,44 +0,0 @@
1
- $:.unshift File.expand_path('../lib', __FILE__)
2
- require 'shoe'
3
-
4
- Gem::Specification.new do |spec|
5
- spec.name = 'shoe'
6
- spec.version = Shoe::VERSION
7
-
8
- spec.summary = 'An ecosystem-friendly library of Rake tasks for your gem.'
9
- spec.description = <<-END.gsub(/^ */, '')
10
- #{spec.summary}
11
-
12
- Shoe assumes you could be using any number of other tools -- bundler,
13
- cucumber, git, rip, rubygems -- and so leans hard on them for the things
14
- they do well, relegating command-line rake to mere syntactic sugar.
15
- END
16
-
17
- spec.author = 'Matthew Todd'
18
- spec.email = 'matthew.todd@gmail.com'
19
- spec.homepage = 'http://github.com/matthewtodd/shoe'
20
-
21
- spec.requirements = ['git']
22
- spec.required_rubygems_version = '>= 1.3.6'
23
- spec.add_runtime_dependency 'rake'
24
- spec.add_runtime_dependency 'launchy'
25
- spec.add_development_dependency 'cucumber'
26
- spec.add_development_dependency 'ronn'
27
-
28
- def spec.git_files(glob=nil)
29
- `git ls-files -z --cached --other --exclude-standard #{glob}`.split("\0")
30
- end
31
-
32
- spec.files = spec.git_files
33
- spec.executables = spec.git_files('bin/*').map &File.method(:basename)
34
- spec.extensions = spec.git_files('ext/**/extconf.rb')
35
- spec.test_files = spec.git_files('test/{,**/}*_test.rb')
36
-
37
- spec.extra_rdoc_files = spec.git_files('{,**/}*.rdoc')
38
- spec.rdoc_options = %W(
39
- --main README.rdoc
40
- --title #{spec.full_name}
41
- --inline-source
42
- --webcvs http://github.com/matthewtodd/shoe/blob/v#{spec.version}/
43
- )
44
- end