shoe 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/{doc/bundler.rdoc → BUNDLER.rdoc} +0 -0
- data/CHANGELOG.rdoc +15 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +21 -3
- data/README.rdoc +22 -2
- data/TODO.rdoc +3 -3
- data/bin/shoe +16 -2
- data/data/shoe/templates/application.erb +23 -0
- data/data/shoe/templates/executable.erb +18 -0
- data/data/shoe/templates/extconf.erb +2 -0
- data/data/shoe/templates/extension.erb +9 -0
- data/data/shoe/templates/gemspec.erb +50 -0
- data/data/shoe/templates/gitignore.erb +4 -0
- data/data/shoe/templates/gitkeep.erb +0 -0
- data/data/shoe/templates/manpage.erb +30 -0
- data/data/shoe/templates/module.erb +31 -0
- data/data/shoe/templates/module_test.rb +7 -0
- data/data/shoe/templates/rakefile.erb +3 -0
- data/data/shoe/templates/readme.erb +3 -0
- data/data/shoe/templates/test_helper.erb +2 -0
- data/features/cucumber.feature +7 -8
- data/features/generator.feature +32 -0
- data/features/release.feature +8 -8
- data/features/step_definitions/shoe_steps.rb +0 -9
- data/features/support/env.rb +5 -9
- data/features/test.feature +4 -4
- data/lib/shoe.rb +20 -2
- data/lib/shoe/extensions.rb +10 -0
- data/lib/shoe/extensions/doc_manager.rb +11 -0
- data/lib/shoe/extensions/option_parser.rb +25 -0
- data/lib/shoe/extensions/pathname.rb +16 -0
- data/lib/shoe/extensions/source_index.rb +17 -0
- data/lib/shoe/extensions/specification.rb +19 -0
- data/lib/shoe/extensions/validator.rb +15 -0
- data/lib/shoe/generator.rb +122 -40
- data/lib/shoe/tasks.rb +2 -0
- data/lib/shoe/tasks/abstract.rb +3 -69
- data/lib/shoe/tasks/compile.rb +3 -1
- data/lib/shoe/tasks/cucumber.rb +13 -10
- data/lib/shoe/tasks/rdoc.rb +3 -22
- data/lib/shoe/tasks/release.rb +7 -12
- data/lib/shoe/tasks/ronn.rb +77 -0
- data/lib/shoe/tasks/test.rb +2 -26
- data/man/shoe.1 +64 -0
- data/man/shoe.1.ronn +63 -0
- data/shoe.gemspec +4 -1
- metadata +59 -15
- data/features/getting_started.feature +0 -29
- data/lib/shoe/templates/gemspec.erb +0 -41
- data/lib/shoe/templates/rakefile.erb +0 -3
- data/lib/shoe/templates/readme.erb +0 -3
- data/lib/shoe/templates/version.erb +0 -3
- data/lib/shoe/version.rb +0 -3
File without changes
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
== 0.6.0 -- 2010 April 20
|
2
|
+
|
3
|
+
* Add --webcvs to rdoc_options in generated gemspec.
|
4
|
+
* Move erb templates from lib to datadir.
|
5
|
+
* Generate a top-level project module.
|
6
|
+
* Move generated VERSION constant out of foo/version.rb, into foo.rb
|
7
|
+
* The shoe generator accepts an --application option to generate an executable stub.
|
8
|
+
* The shoe generator accepts a --data option to generate a data directory.
|
9
|
+
* The shoe generator accepts an --extension option to generate a C extension.
|
10
|
+
* The shoe generator accepts a --test-unit option to generate Test::Unit tests.
|
11
|
+
* Shoe::Tasks may no longer be built with a Gem::Specification object; pass the path to a gemspec file instead.
|
12
|
+
* Generate a .gitignore file.
|
13
|
+
* New `rake ronn` task to build man pages from ronn sources.
|
14
|
+
* Support running generated apps from a local checkout.
|
15
|
+
|
1
16
|
== 0.5.1 -- 2010 April 7
|
2
17
|
|
3
18
|
* Include summary in description.
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
---
|
2
2
|
dependencies:
|
3
|
+
ronn:
|
4
|
+
group:
|
5
|
+
- :development
|
6
|
+
version: ">= 0"
|
3
7
|
rake:
|
4
8
|
group:
|
5
9
|
- :default
|
@@ -8,15 +12,21 @@ dependencies:
|
|
8
12
|
group:
|
9
13
|
- :development
|
10
14
|
version: ">= 0"
|
15
|
+
launchy:
|
16
|
+
group:
|
17
|
+
- :default
|
18
|
+
version: ">= 0"
|
11
19
|
specs:
|
12
20
|
- rake:
|
13
21
|
version: 0.8.7
|
14
22
|
- builder:
|
15
23
|
version: 2.1.2
|
24
|
+
- configuration:
|
25
|
+
version: 1.1.0
|
16
26
|
- diff-lcs:
|
17
27
|
version: 1.1.2
|
18
28
|
- json_pure:
|
19
|
-
version: 1.2.
|
29
|
+
version: 1.2.4
|
20
30
|
- polyglot:
|
21
31
|
version: 0.3.1
|
22
32
|
- term-ansicolor:
|
@@ -24,8 +34,16 @@ specs:
|
|
24
34
|
- treetop:
|
25
35
|
version: 1.4.5
|
26
36
|
- cucumber:
|
27
|
-
version: 0.6.
|
28
|
-
|
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
|
29
47
|
sources:
|
30
48
|
- Rubygems:
|
31
49
|
uri: http://gemcutter.org
|
data/README.rdoc
CHANGED
@@ -16,6 +16,10 @@ Shoe is an ecosystem-friendly library of Rake tasks for your gem.
|
|
16
16
|
{the}[http://rake.rubyforge.org/classes/Rake/RDocTask.html]
|
17
17
|
{wheel}[http://rake.rubyforge.org/classes/Rake/TestTask.html].
|
18
18
|
|
19
|
+
* It <b>follows the
|
20
|
+
{Ruby Packaging Standard}[http://chneukirchen.github.com/rps/]</b>
|
21
|
+
when generating project files.
|
22
|
+
|
19
23
|
|
20
24
|
== Install
|
21
25
|
|
@@ -56,6 +60,14 @@ Shoe::Tasks::Release::
|
|
56
60
|
calls <tt>`git tag`</tt>, <tt>`git push`</tt>, <tt>`gem build`</tt> and
|
57
61
|
<tt>`gem push`</tt>, of course.
|
58
62
|
|
63
|
+
Shoe::Tasks::Ronn::
|
64
|
+
builds man pages from your <tt>{ronn}[http://rtomayko.github.com/ronn/]</tt> sources,
|
65
|
+
honoring the
|
66
|
+
<tt>date[http://docs.rubygems.org/read/chapter/20#date]</tt>
|
67
|
+
and the first
|
68
|
+
<tt>author[http://docs.rubygems.org/read/chapter/20#authors]</tt>
|
69
|
+
in your gemspec.
|
70
|
+
|
59
71
|
Shoe::Tasks::Test::
|
60
72
|
runs the
|
61
73
|
<tt>test_files[http://docs.rubygems.org/read/chapter/20#test_files]</tt> in
|
@@ -82,8 +94,16 @@ other skeleton files for your new project:
|
|
82
94
|
|
83
95
|
$ shoe my_project
|
84
96
|
|
85
|
-
|
86
|
-
|
97
|
+
For more, run:
|
98
|
+
|
99
|
+
$ shoe --help
|
100
|
+
|
101
|
+
Or, if you have <tt>{gem-man}[http://github.com/defunkt/gem-man]</tt> installed:
|
102
|
+
|
103
|
+
$ gem man shoe
|
104
|
+
|
105
|
+
Also, if you're using {Bundler}[http://gembundler.com], see
|
106
|
+
<tt>BUNDLER.rdoc</tt> for some helpful tips.
|
87
107
|
|
88
108
|
|
89
109
|
== Contribute
|
data/TODO.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= Next Up
|
2
2
|
|
3
|
-
*
|
4
|
-
* How would I incorporate Gem::Specification#add_bundler_dependencies?
|
5
|
-
* Support any extension flavor that Rubygems supports, not just extconf.rb.
|
3
|
+
* Generator should do the right thing when the base directory has a dash in it.
|
6
4
|
* Find a better way to clean; I don't want to whack .bundler and .rvmrc.
|
5
|
+
* Add :only/:except options to Shoe::Tasks.define.
|
6
|
+
* Port cucumber features to Test::Unit so they'll be run under `gem check --test shoe`.
|
data/bin/shoe
CHANGED
@@ -1,4 +1,18 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
begin
|
4
|
+
require 'shoe'
|
5
|
+
rescue LoadError
|
6
|
+
raise unless $!.message =~ /\bshoe$/
|
7
|
+
|
8
|
+
lib = File.expand_path('../../lib', __FILE__)
|
9
|
+
if !$:.include?(lib)
|
10
|
+
warn "#{$!}. Trying again with #{lib} on the $LOAD_PATH."
|
11
|
+
$:.unshift(lib)
|
12
|
+
retry
|
13
|
+
end
|
14
|
+
|
15
|
+
raise
|
16
|
+
end
|
17
|
+
|
18
|
+
Shoe::Generator.new.run(ARGV)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module <%= module_name %>
|
4
|
+
class Application
|
5
|
+
def initialize
|
6
|
+
@options = OptionParser.new do |opts|
|
7
|
+
# -h, --help, -v, --version are built into OptionParser
|
8
|
+
# Try `<%= name %> --version=all` as you require more libraries!
|
9
|
+
opts.version = <%= module_name %>::VERSION
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def run(argv)
|
14
|
+
begin
|
15
|
+
@options.parse(argv)
|
16
|
+
rescue OptionParser::ParseError
|
17
|
+
@options.abort($!)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Have at it!
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require '<%= name %>'
|
5
|
+
rescue LoadError
|
6
|
+
raise unless $!.message =~ /\b<%= name %>$/
|
7
|
+
|
8
|
+
lib = File.expand_path('../../lib', __FILE__)
|
9
|
+
if !$:.include?(lib)
|
10
|
+
warn "#{$!}. Trying again with #{lib} on the $LOAD_PATH."
|
11
|
+
$:.unshift(lib)
|
12
|
+
retry
|
13
|
+
end
|
14
|
+
|
15
|
+
raise
|
16
|
+
end
|
17
|
+
|
18
|
+
<%= module_name %>::Application.new.run(ARGV)
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#include "ruby.h"
|
2
|
+
|
3
|
+
static VALUE m<%= module_name %>;
|
4
|
+
static VALUE m<%= extension_module_name %>;
|
5
|
+
|
6
|
+
void Init_ext() {
|
7
|
+
m<%= module_name %> = rb_define_module("<%= module_name %>");
|
8
|
+
m<%= extension_module_name %> = rb_define_module_under("<%= module_name %>", "<%= extension_module_name %>");
|
9
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require '<%= name %>'
|
3
|
+
|
4
|
+
# Feel free to change whatever you like! This file is yours now.
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = '<%= name %>'
|
7
|
+
spec.version = <%= module_name %>::VERSION
|
8
|
+
|
9
|
+
spec.summary = '<%= module_name %> is one of my favorite things!'
|
10
|
+
spec.description = <<-END.gsub(/^ */, '')
|
11
|
+
#{spec.summary}
|
12
|
+
|
13
|
+
Further description here.
|
14
|
+
END
|
15
|
+
|
16
|
+
spec.author = '<%= `git config --get user.name`.chomp %>'
|
17
|
+
spec.email = '<%= `git config --get user.email`.chomp %>'
|
18
|
+
spec.homepage = 'http://github.com/<%= `git config --get github.user`.chomp %>/<%= name %>'
|
19
|
+
|
20
|
+
# You may find these helpful:
|
21
|
+
# spec.requirements = ['git'] # If your library shells out to git
|
22
|
+
# spec.required_rubygems_version = ">= 1.3.6" # If you depend on prerelease gems
|
23
|
+
# spec.add_bundler_dependencies # I'm not sure how to use this yet...
|
24
|
+
# spec.add_runtime_dependency 'nokogiri' # Or what have you
|
25
|
+
spec.add_development_dependency 'shoe'
|
26
|
+
|
27
|
+
# This may not be the best way to select files for inclusion in your gem, but
|
28
|
+
# it does at least honor your .gitignore, keeping that bit of your
|
29
|
+
# configuration DRY. Alternatively, you could use more explicit Dir.glob
|
30
|
+
# patterns or even try reading a Manifest file, hoe-style.
|
31
|
+
def spec.git_files(glob=nil)
|
32
|
+
`git ls-files -z --cached --other --exclude-standard #{glob}`.split("\0")
|
33
|
+
end
|
34
|
+
|
35
|
+
# The kooky &File.method(:basename) trick keeps us from accidentally
|
36
|
+
# shadowing a variable named "file" in the context that evaluates this
|
37
|
+
# gemspec. I actually ran into this problem with Bundler!
|
38
|
+
spec.files = spec.git_files
|
39
|
+
spec.executables = spec.git_files('bin/*').map &File.method(:basename)
|
40
|
+
spec.extensions = spec.git_files('ext/**/extconf.rb')
|
41
|
+
spec.extra_rdoc_files = spec.git_files('{,**/}*.rdoc')
|
42
|
+
spec.test_files = spec.git_files('test/{,**/}*_test.rb')
|
43
|
+
|
44
|
+
spec.rdoc_options = %W(
|
45
|
+
--main README.rdoc
|
46
|
+
--title #{spec.full_name}
|
47
|
+
--inline-source
|
48
|
+
--webcvs http://github.com/<%= `git config --get github.user`.chomp %>/<%= name %>/blob/v#{spec.version}/
|
49
|
+
)
|
50
|
+
end
|
File without changes
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<%= name %>(1) --
|
2
|
+
=================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
`<%= name %>` [_options_]
|
7
|
+
|
8
|
+
## DESCRIPTION
|
9
|
+
|
10
|
+
Write your description here.
|
11
|
+
|
12
|
+
## OPTIONS
|
13
|
+
|
14
|
+
`<%= name %>` also responds to the followng standard options:
|
15
|
+
|
16
|
+
* `-h`, `--help`:
|
17
|
+
Print a help message and exit.
|
18
|
+
|
19
|
+
* `-v`, `--version`[=all]:
|
20
|
+
Print `shoe`'s version number and exit. If `=all` is given, also print
|
21
|
+
version numbers of `shoe`'s dependencies. (This is standard `optparse` behavior
|
22
|
+
that deserves more attention!)
|
23
|
+
|
24
|
+
## AUTHOR
|
25
|
+
|
26
|
+
<%= `git config --get user.name`.chomp %> <<%= `git config --get user.email`.chomp %>>
|
27
|
+
|
28
|
+
## SEE ALSO
|
29
|
+
|
30
|
+
ruby(1)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<% if data? %>
|
2
|
+
require 'pathname'
|
3
|
+
require 'rbconfig'
|
4
|
+
require 'rbconfig/datadir'
|
5
|
+
|
6
|
+
<% end %>
|
7
|
+
module <%= module_name %>
|
8
|
+
VERSION = '<%= version %>'
|
9
|
+
<% if application? || extension? %>
|
10
|
+
|
11
|
+
<% end %>
|
12
|
+
<% if application? %>
|
13
|
+
autoload :Application, '<%= name %>/application'
|
14
|
+
<% end %>
|
15
|
+
<% if extension? %>
|
16
|
+
autoload :<%= extension_module_name %>, '<%= name %>/<%= extension_name %>'
|
17
|
+
<% end %>
|
18
|
+
<% if data? %>
|
19
|
+
|
20
|
+
def self.datadir
|
21
|
+
@@datadir ||= begin
|
22
|
+
datadir = RbConfig.datadir('<%= name %>')
|
23
|
+
if !File.exist?(datadir)
|
24
|
+
warn "#{datadir} does not exist. Trying again with data directory relative to __FILE__."
|
25
|
+
datadir = File.expand_path('../../data/<%= name %>', __FILE__)
|
26
|
+
end
|
27
|
+
Pathname.new(datadir)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
<% end %>
|
31
|
+
end
|
data/features/cucumber.feature
CHANGED
@@ -4,25 +4,24 @@ Feature: Cucumber
|
|
4
4
|
I want shoe to give me a rake task
|
5
5
|
|
6
6
|
Scenario: Running rake --tasks in a shoe project without Cucumber features
|
7
|
-
Given I have
|
8
|
-
When I run
|
7
|
+
Given I have run shoe my_project inside "."
|
8
|
+
When I run rake --tasks inside "my_project"
|
9
9
|
Then I should not see "rake cucumber" on standard out
|
10
10
|
|
11
11
|
Scenario: Running rake --tasks in a shoe project with Cucumber features
|
12
|
-
Given I have
|
13
|
-
And I have
|
12
|
+
Given I have run shoe my_project inside "."
|
13
|
+
And I have run git init inside "."
|
14
14
|
And I have created a file called "my_project/cucumber.yml" containing:
|
15
15
|
"""
|
16
16
|
default: --tags ~@wip
|
17
17
|
wip: --tags @wip --wip
|
18
18
|
"""
|
19
|
-
When I run
|
19
|
+
When I run rake --tasks inside "my_project"
|
20
20
|
Then I should see "rake cucumber" on standard out
|
21
21
|
And I should see "rake cucumber:wip" on standard out
|
22
22
|
|
23
23
|
Scenario: Running rake --tasks in a shoe project with a bad cucumber.yml
|
24
|
-
Given I have
|
25
|
-
And I have appended "gem 'cucumber'" to "my_project/Gemfile"
|
24
|
+
Given I have run shoe my_project inside "."
|
26
25
|
And I have created a file called "my_project/cucumber.yml" containing ""
|
27
|
-
When I run
|
26
|
+
When I run rake --tasks inside "my_project"
|
28
27
|
Then I should not see "rake cucumber" on standard out
|
@@ -0,0 +1,32 @@
|
|
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 "Rakefile exists. Not clobbering." on standard error
|
31
|
+
And the contents of "my_project/Rakefile" should still be "# RAKEFILE CONTENTS"
|
32
|
+
|
data/features/release.feature
CHANGED
@@ -6,28 +6,28 @@ Feature: Release
|
|
6
6
|
Background:
|
7
7
|
Given I have created a directory called "origin"
|
8
8
|
And I have run git init --bare inside "origin"
|
9
|
-
Given I have
|
9
|
+
Given I have run shoe my_project inside "."
|
10
10
|
And I have run git init inside "my_project"
|
11
11
|
And I have run git add . inside "my_project"
|
12
12
|
And I have run git commit -m "Initial commit" inside "my_project"
|
13
13
|
|
14
14
|
Scenario: I can release
|
15
|
-
When I replace "0.0.0" with "0.1.0" in the file "my_project/lib/my_project
|
16
|
-
And I run
|
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
17
|
Then I should see "rake release" on standard out
|
18
18
|
|
19
19
|
Scenario: I cannot release when the version is 0.0.0
|
20
|
-
When I run
|
20
|
+
When I run rake --tasks inside "my_project"
|
21
21
|
Then I should not see "rake release" on standard out
|
22
22
|
|
23
23
|
Scenario: I cannot release when I already have a tag for the current version
|
24
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
|
26
|
-
And I run
|
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
27
|
Then I should not see "rake release" on standard out
|
28
28
|
|
29
29
|
Scenario: I cannot release from a branch other than master
|
30
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
|
32
|
-
And I run
|
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
33
|
Then I should not see "rake release" on standard out
|