shoe 0.3.0 → 0.4.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 +4 -0
- data/BUNDLER.rdoc +16 -0
- data/CHANGELOG.rdoc +7 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +31 -0
- data/README.rdoc +40 -53
- data/Rakefile +2 -6
- data/TODO.rdoc +8 -0
- data/bin/shoe +2 -2
- data/features/getting_started.feature +2 -2
- data/features/step_definitions/shoe_steps.rb +1 -1
- data/lib/shoe.rb +2 -8
- data/lib/shoe/generator.rb +64 -0
- data/lib/shoe/tasks.rb +4 -86
- data/lib/shoe/tasks/abstract.rb +88 -0
- data/lib/shoe/tasks/clean.rb +1 -1
- data/lib/shoe/tasks/compile.rb +2 -7
- data/lib/shoe/tasks/cucumber.rb +1 -5
- data/lib/shoe/tasks/rdoc.rb +1 -19
- data/lib/shoe/tasks/release.rb +2 -11
- data/lib/shoe/tasks/test.rb +1 -5
- data/lib/shoe/templates/gemspec.erb +35 -0
- data/lib/shoe/templates/rakefile.erb +1 -5
- data/lib/shoe/templates/readme.erb +2 -2
- data/lib/shoe/templates/version.erb +1 -1
- data/lib/shoe/version.rb +1 -1
- data/shoe.gemspec +27 -27
- metadata +40 -24
- data/lib/shoe/cli.rb +0 -94
- data/lib/shoe/project.rb +0 -26
- data/lib/shoe/tasks/bin.rb +0 -14
- data/lib/shoe/tasks/gemspec.rb +0 -14
- data/lib/shoe/tasks/resources.rb +0 -11
- data/lib/shoe/tasks/shell.rb +0 -20
- data/lib/shoe/tasks/shoulda.rb +0 -12
- data/lib/shoe/templates/gemfile.erb +0 -1
data/.gitignore
ADDED
data/BUNDLER.rdoc
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
= Using Shoe with Bundler
|
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/CHANGELOG.rdoc
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
---
|
2
|
+
dependencies:
|
3
|
+
rake:
|
4
|
+
group:
|
5
|
+
- :default
|
6
|
+
version: ">= 0"
|
7
|
+
cucumber:
|
8
|
+
group:
|
9
|
+
- :development
|
10
|
+
version: ">= 0"
|
11
|
+
specs:
|
12
|
+
- rake:
|
13
|
+
version: 0.8.7
|
14
|
+
- builder:
|
15
|
+
version: 2.1.2
|
16
|
+
- diff-lcs:
|
17
|
+
version: 1.1.2
|
18
|
+
- json_pure:
|
19
|
+
version: 1.2.3
|
20
|
+
- polyglot:
|
21
|
+
version: 0.3.1
|
22
|
+
- term-ansicolor:
|
23
|
+
version: 1.0.5
|
24
|
+
- treetop:
|
25
|
+
version: 1.4.5
|
26
|
+
- cucumber:
|
27
|
+
version: 0.6.3
|
28
|
+
hash: bec7b29765230914672db7983d163d805c4afdb1
|
29
|
+
sources:
|
30
|
+
- Rubygems:
|
31
|
+
uri: http://gemcutter.org
|
data/README.rdoc
CHANGED
@@ -1,79 +1,66 @@
|
|
1
1
|
= Shoe
|
2
2
|
|
3
|
-
Shoe
|
4
|
-
|
3
|
+
Shoe is a library of Rake tasks that (unlike
|
4
|
+
Hoe[http://seattlerb.rubyforge.org/hoe] and
|
5
|
+
Jeweler[http://github.com/technicalpickles/jeweler]) honors your gemspec.
|
6
|
+
(Background[http://yehudakatz.com/2010/04/02/using-gemspecs-as-intended/].)
|
7
|
+
|
8
|
+
Shoe's Rake tasks accept *zero* configuration parameters. All configuration
|
9
|
+
should be performed in your (checked into version control) gemspec. This way,
|
10
|
+
Shoe can lean on Rubygems for the things it's already good at, using
|
11
|
+
{Gem::Ext::ExtConfBuilder}[http://rubygems.rubyforge.org/rubygems-update/Gem/Ext/ExtConfBuilder.html]
|
12
|
+
and
|
13
|
+
{Gem::DocManager}[http://rubygems.rubyforge.org/rubygems-update/Gem/DocManager.html]
|
14
|
+
instead of {ad-hoc}[http://github.com/luislavena/rake-compiler/] {Rake
|
15
|
+
tasks}[http://rake.rubyforge.org/classes/Rake/RDocTask.html] -- indeed, this is
|
16
|
+
what your users will be doing when they install your gem!
|
17
|
+
|
18
|
+
(I have a pipe dream of one day running tests strictly with
|
19
|
+
{Gem::Validator}[http://rubygems.rubyforge.org/rubygems-update/Gem/Validator.html].)
|
20
|
+
|
21
|
+
== Install
|
5
22
|
|
6
|
-
|
7
|
-
hoe[http://seattlerb.rubyforge.org/hoe] and
|
8
|
-
jeweler[http://github.com/technicalpickles/jeweler]. I had an itch to scratch,
|
9
|
-
you understand.
|
23
|
+
$ gem install shoe
|
10
24
|
|
11
|
-
==
|
25
|
+
== Use
|
12
26
|
|
13
|
-
|
27
|
+
In your <tt>Rakefile</tt>:
|
14
28
|
|
15
|
-
require 'my_project/version'
|
16
29
|
require 'shoe'
|
17
30
|
|
18
|
-
Shoe.
|
19
|
-
# do whatever you want with the Gem::Specification here, for example:
|
20
|
-
# spec.add_runtime_dependency 'dnssd'
|
21
|
-
end
|
31
|
+
Shoe::Tasks.define('my_project.gemspec')
|
22
32
|
|
23
|
-
|
33
|
+
Then you'll see (at most) the following rake tasks available:
|
24
34
|
|
25
35
|
rake clean # Remove ignored files
|
26
36
|
rake compile # Compile C extensions
|
27
37
|
rake cucumber:ok # Run features
|
28
38
|
rake cucumber:wip # Run work-in-progress features
|
29
|
-
rake default # Run features
|
30
|
-
rake gemspec # Show latest gemspec contents
|
39
|
+
rake default # Run tests / Run features
|
31
40
|
rake rdoc # Generate documentation
|
32
41
|
rake release # Release myproject-0.1.0
|
33
|
-
rake shell # Run an irb console
|
34
42
|
rake test # Run tests
|
35
43
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
See what I mean by clicking through the various <tt>Shoe::Tasks</tt>.
|
40
|
-
|
41
|
-
== Getting Started
|
42
|
-
|
43
|
-
=== With Bundler[http://github.com/carlhuda/bundler]
|
44
|
-
|
45
|
-
1. Start with just shoe in your +Gemfile+:
|
46
|
-
|
47
|
-
source :rubygems
|
48
|
-
gem 'shoe'
|
44
|
+
I say "at most" because, when possible, tasks are conditionally defined: you
|
45
|
+
won't see "rake compile" if you don't specify any extensions in your gemspec,
|
46
|
+
for example.
|
49
47
|
|
50
|
-
|
48
|
+
== Bootstrap
|
51
49
|
|
52
|
-
|
50
|
+
If you like, you can also use the provided <tt>shoe</tt> executable to generate
|
51
|
+
some starter files for your new project:
|
53
52
|
|
54
|
-
|
55
|
-
|
53
|
+
$ mkdir foo
|
54
|
+
$ cd foo
|
55
|
+
$ shoe
|
56
56
|
|
57
|
-
|
57
|
+
This will generate <tt>README.rdoc</tt>, <tt>Rakefile</tt>,
|
58
|
+
<tt>foo.gemspec</tt>, and <tt>lib/foo/version.rb</tt>.
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
4. And then you can poke around with
|
62
|
-
|
63
|
-
$ rake -T
|
64
|
-
|
65
|
-
=== Without Bundler
|
66
|
-
|
67
|
-
If you're not using bundler, it's probably best not to use the +shoe+
|
68
|
-
generator. Instead, just install shoe normally:
|
69
|
-
|
70
|
-
$ gem install shoe
|
60
|
+
If you're using Bundler, see {BUNDLER.rdoc}[link:files/BUNDLER_rdoc.html] for more.
|
71
61
|
|
72
|
-
|
62
|
+
== Send Me Feedback
|
73
63
|
|
74
|
-
|
75
|
-
# spec.add_runtime_dependency 'dnssd' # or whatever...
|
76
|
-
end
|
64
|
+
A number of these tasks are maybe less useful for you than they could be, probably because you and I use different conventions. If you have some ideas for making Shoe better, I'd love to hear them! Feel free to send issues / pull requests / messages through GitHub.
|
77
65
|
|
78
|
-
|
79
|
-
want to avoid warnings running <tt>`rake rdoc`</tt>.
|
66
|
+
All the best, -- Matthew
|
data/Rakefile
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
+
$:.unshift 'lib'
|
1
2
|
require 'shoe'
|
2
|
-
require 'shoe/version'
|
3
3
|
|
4
|
-
Shoe.
|
5
|
-
spec.requirements = ['git']
|
6
|
-
spec.required_rubygems_version = '>= 1.3.6'
|
7
|
-
spec.add_runtime_dependency 'rake'
|
8
|
-
end
|
4
|
+
Shoe::Tasks.define('shoe.gemspec')
|
data/TODO.rdoc
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
= Next Up
|
2
|
+
|
3
|
+
* Help generate man pages?
|
4
|
+
* Ditch cucumber tasks? (This moves us more into the pure-gemspec space.)
|
5
|
+
* Use Gem::Validator to run tests.
|
6
|
+
* Find a nicer way to express task dependencies; then maybe tasks could be used a la carte?
|
7
|
+
* How would I incorporate Gem::Specification#add_bundler_dependencies?
|
8
|
+
* Require a path argument for the shoe executable.
|
data/bin/shoe
CHANGED
@@ -8,7 +8,7 @@ Feature: Getting started
|
|
8
8
|
And I have created a file called "my_project/Gemfile" containing:
|
9
9
|
"""
|
10
10
|
source :rubygems
|
11
|
-
gem 'shoe'
|
11
|
+
gem 'shoe', :group => :development
|
12
12
|
"""
|
13
13
|
When I run bundle exec shoe inside "my_project"
|
14
14
|
Then I should see a file "my_project/Rakefile"
|
@@ -21,7 +21,7 @@ Feature: Getting started
|
|
21
21
|
And I have created a file called "my_project/Gemfile" containing:
|
22
22
|
"""
|
23
23
|
source :rubygems
|
24
|
-
gem 'shoe'
|
24
|
+
gem 'shoe', :group => :development
|
25
25
|
"""
|
26
26
|
And I have created a file called "my_project/Rakefile" containing "# RAKEFILE CONTENTS"
|
27
27
|
When I run bundle exec shoe inside "my_project"
|
data/lib/shoe.rb
CHANGED
@@ -1,10 +1,4 @@
|
|
1
1
|
module Shoe
|
2
|
-
autoload :
|
3
|
-
autoload :Tasks,
|
4
|
-
|
5
|
-
def self.tie(name, version, summary)
|
6
|
-
project = Project.new(name, version, summary)
|
7
|
-
yield project.spec if block_given?
|
8
|
-
project.define_tasks
|
9
|
-
end
|
2
|
+
autoload :Generator, 'shoe/generator'
|
3
|
+
autoload :Tasks, 'shoe/tasks'
|
10
4
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module Shoe
|
5
|
+
class Generator
|
6
|
+
def initialize
|
7
|
+
@root = Pathname.pwd.expand_path
|
8
|
+
@template_path = Pathname.new(__FILE__).dirname.join('templates')
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
path('README.rdoc').install template('readme.erb')
|
13
|
+
path('Rakefile').install template('rakefile.erb')
|
14
|
+
path(version_path).install template('version.erb')
|
15
|
+
path(gemspec_path).install template('gemspec.erb')
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def project_name
|
21
|
+
@root.basename.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
def project_module
|
25
|
+
project_name.capitalize.gsub(/_(\w)/) { $1.upcase }
|
26
|
+
end
|
27
|
+
|
28
|
+
def project_version
|
29
|
+
'0.0.0'
|
30
|
+
end
|
31
|
+
|
32
|
+
def version_path
|
33
|
+
"lib/#{project_name}/version.rb"
|
34
|
+
end
|
35
|
+
|
36
|
+
def gemspec_path
|
37
|
+
"#{project_name}.gemspec"
|
38
|
+
end
|
39
|
+
|
40
|
+
def template(name)
|
41
|
+
ERB.new(template_contents(name)).result(binding)
|
42
|
+
end
|
43
|
+
|
44
|
+
def template_contents(name)
|
45
|
+
@template_path.join(name).read
|
46
|
+
end
|
47
|
+
|
48
|
+
def path(name)
|
49
|
+
path = @root.join(name)
|
50
|
+
path.dirname.mkpath
|
51
|
+
path.extend(PathExtensions)
|
52
|
+
end
|
53
|
+
|
54
|
+
module PathExtensions #:nodoc:
|
55
|
+
def install(contents)
|
56
|
+
if exist?
|
57
|
+
$stderr.puts "#{to_s} exists. Not clobbering."
|
58
|
+
else
|
59
|
+
open('w') { |file| file.write(contents) }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/shoe/tasks.rb
CHANGED
@@ -1,108 +1,26 @@
|
|
1
1
|
module Shoe
|
2
2
|
module Tasks
|
3
3
|
|
4
|
-
autoload :
|
4
|
+
autoload :Abstract, 'shoe/tasks/abstract'
|
5
5
|
autoload :Clean, 'shoe/tasks/clean'
|
6
6
|
autoload :Compile, 'shoe/tasks/compile'
|
7
7
|
autoload :Cucumber, 'shoe/tasks/cucumber'
|
8
|
-
autoload :Gemspec, 'shoe/tasks/gemspec'
|
9
8
|
autoload :Rdoc, 'shoe/tasks/rdoc'
|
10
9
|
autoload :Release, 'shoe/tasks/release'
|
11
|
-
autoload :Resources, 'shoe/tasks/resources'
|
12
|
-
autoload :Shell, 'shoe/tasks/shell'
|
13
|
-
autoload :Shoulda, 'shoe/tasks/shoulda'
|
14
10
|
autoload :Test, 'shoe/tasks/test'
|
15
11
|
|
16
12
|
LOAD_ORDER = %w(
|
17
|
-
Bin
|
18
13
|
Clean
|
19
|
-
Gemspec
|
20
14
|
Rdoc
|
21
15
|
Release
|
22
|
-
Resources
|
23
|
-
Shell
|
24
|
-
Shoulda
|
25
16
|
Test
|
26
17
|
Cucumber
|
27
18
|
Compile
|
28
19
|
)
|
29
20
|
|
30
|
-
def self.
|
31
|
-
LOAD_ORDER.map { |name| const_get
|
32
|
-
each { |task|
|
33
|
-
end
|
34
|
-
|
35
|
-
class AbstractTask
|
36
|
-
def self.define(spec)
|
37
|
-
task = new(spec)
|
38
|
-
|
39
|
-
if task.active?
|
40
|
-
task.update_spec
|
41
|
-
task.define
|
42
|
-
end
|
43
|
-
|
44
|
-
task
|
45
|
-
end
|
46
|
-
|
47
|
-
attr_reader :spec
|
48
|
-
|
49
|
-
def initialize(spec)
|
50
|
-
@spec = spec
|
51
|
-
end
|
52
|
-
|
53
|
-
def active?
|
54
|
-
true
|
55
|
-
end
|
56
|
-
|
57
|
-
def define
|
58
|
-
# no-op
|
59
|
-
end
|
60
|
-
|
61
|
-
def update_spec
|
62
|
-
# no-op
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
def before(name, dependency)
|
68
|
-
desc Rake::Task[dependency].comment
|
69
|
-
task name => dependency
|
70
|
-
end
|
71
|
-
|
72
|
-
def before_existing(name, dependency)
|
73
|
-
if Rake::Task.task_defined?(name)
|
74
|
-
task name => dependency
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def warn(subject, *paragraphs)
|
79
|
-
message = StringIO.new
|
80
|
-
width = 72
|
81
|
-
|
82
|
-
message.puts '-' * width
|
83
|
-
message.puts "#{subject} warning from shoe".upcase
|
84
|
-
paragraphs.each do |paragraph|
|
85
|
-
message.puts
|
86
|
-
message.puts wrap(paragraph, width)
|
87
|
-
end
|
88
|
-
message.puts '-' * width
|
89
|
-
|
90
|
-
$stderr.write yellow(message.string)
|
91
|
-
$stderr.flush
|
92
|
-
end
|
93
|
-
|
94
|
-
# blatantly stolen from Gem::Command
|
95
|
-
def wrap(text, width)
|
96
|
-
text.gsub(/(.{1,#{width}})( +|$\n?)|(.{1,#{width}})/, "\\1\\3\n")
|
97
|
-
end
|
98
|
-
|
99
|
-
def yellow(string)
|
100
|
-
if $stderr.tty?
|
101
|
-
"\e[33m#{string}\e[0m"
|
102
|
-
else
|
103
|
-
string
|
104
|
-
end
|
105
|
-
end
|
21
|
+
def self.define(spec)
|
22
|
+
LOAD_ORDER.map { |name| const_get(name) }.
|
23
|
+
each { |task| task.new(spec) }
|
106
24
|
end
|
107
25
|
|
108
26
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Shoe
|
2
|
+
module Tasks
|
3
|
+
|
4
|
+
class Abstract
|
5
|
+
attr_reader :spec
|
6
|
+
|
7
|
+
def initialize(spec)
|
8
|
+
@spec = if spec.respond_to?(:rubygems_version)
|
9
|
+
spec
|
10
|
+
else
|
11
|
+
Gem::Specification.load(spec)
|
12
|
+
end
|
13
|
+
|
14
|
+
if active?
|
15
|
+
define
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def active?
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def before(name, dependency)
|
26
|
+
desc Rake::Task[dependency].comment
|
27
|
+
task name => dependency
|
28
|
+
end
|
29
|
+
|
30
|
+
def before_existing(name, dependency)
|
31
|
+
if Rake::Task.task_defined?(name)
|
32
|
+
task name => dependency
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def warn(subject, *paragraphs)
|
37
|
+
$stderr.extend(Colored).
|
38
|
+
extend(Formatted).
|
39
|
+
message(subject, paragraphs)
|
40
|
+
end
|
41
|
+
|
42
|
+
module Colored #:nodoc:
|
43
|
+
YELLOW = "\e[33m"
|
44
|
+
CLEAR = "\e[0m"
|
45
|
+
|
46
|
+
def write(string)
|
47
|
+
super(YELLOW) if tty?
|
48
|
+
super
|
49
|
+
super(CLEAR) if tty?
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
module Formatted #:nodoc:
|
54
|
+
WIDTH = 72
|
55
|
+
WRAP = /(.{1,#{WIDTH}})( +|$\n?)|(.{1,#{WIDTH}})/
|
56
|
+
|
57
|
+
def message(subject, paragraphs)
|
58
|
+
border
|
59
|
+
heading(subject)
|
60
|
+
body(paragraphs)
|
61
|
+
border
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def border
|
67
|
+
puts '-' * WIDTH
|
68
|
+
end
|
69
|
+
|
70
|
+
def heading(string)
|
71
|
+
puts "#{string} warning from shoe".upcase
|
72
|
+
end
|
73
|
+
|
74
|
+
def body(paragraphs)
|
75
|
+
paragraphs.each do |paragraph|
|
76
|
+
puts
|
77
|
+
puts wrap(paragraph)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def wrap(string)
|
82
|
+
string.gsub(WRAP, "\\1\\3\n")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
data/lib/shoe/tasks/clean.rb
CHANGED
data/lib/shoe/tasks/compile.rb
CHANGED
@@ -3,9 +3,9 @@ require 'rubygems/ext'
|
|
3
3
|
module Shoe
|
4
4
|
module Tasks
|
5
5
|
|
6
|
-
class Compile <
|
6
|
+
class Compile < Abstract
|
7
7
|
def active?
|
8
|
-
|
8
|
+
!spec.extensions.empty?
|
9
9
|
end
|
10
10
|
|
11
11
|
def define
|
@@ -35,11 +35,6 @@ module Shoe
|
|
35
35
|
before_existing(name, :compile)
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
39
|
-
def update_spec
|
40
|
-
spec.files += Rake::FileList['ext/**/extconf.rb', 'ext/**/*.c']
|
41
|
-
spec.extensions += Rake::FileList['ext/**/extconf.rb']
|
42
|
-
end
|
43
38
|
end
|
44
39
|
|
45
40
|
end
|
data/lib/shoe/tasks/cucumber.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Shoe
|
2
2
|
module Tasks
|
3
3
|
|
4
|
-
class Cucumber <
|
4
|
+
class Cucumber < Abstract
|
5
5
|
def active?
|
6
6
|
File.directory?('features')
|
7
7
|
end
|
@@ -18,10 +18,6 @@ module Shoe
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def update_spec
|
22
|
-
spec.files += Rake::FileList['features/**/*']
|
23
|
-
end
|
24
|
-
|
25
21
|
private
|
26
22
|
|
27
23
|
def define_tasks
|
data/lib/shoe/tasks/rdoc.rb
CHANGED
@@ -3,11 +3,7 @@ require 'rubygems/doc_manager'
|
|
3
3
|
module Shoe
|
4
4
|
module Tasks
|
5
5
|
|
6
|
-
class Rdoc <
|
7
|
-
def active?
|
8
|
-
File.directory?('lib')
|
9
|
-
end
|
10
|
-
|
6
|
+
class Rdoc < Abstract
|
11
7
|
def define
|
12
8
|
desc 'Generate documentation'
|
13
9
|
task :rdoc do
|
@@ -24,20 +20,6 @@ module Shoe
|
|
24
20
|
end
|
25
21
|
end
|
26
22
|
|
27
|
-
def update_spec
|
28
|
-
spec.files += Rake::FileList['**/*.rdoc', 'examples/**/*']
|
29
|
-
|
30
|
-
spec.rdoc_options = %W(
|
31
|
-
--main README.rdoc
|
32
|
-
--title #{spec.full_name}
|
33
|
-
--inline-source
|
34
|
-
)
|
35
|
-
|
36
|
-
spec.extra_rdoc_files += Rake::FileList['**/*.rdoc']
|
37
|
-
|
38
|
-
spec.has_rdoc = true
|
39
|
-
end
|
40
|
-
|
41
23
|
private
|
42
24
|
|
43
25
|
# Using Gem::DocManager instead of Rake::RDocTask means you get to see your
|
data/lib/shoe/tasks/release.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Shoe
|
2
2
|
module Tasks
|
3
3
|
|
4
|
-
class Release <
|
4
|
+
class Release < Abstract
|
5
5
|
def active?
|
6
6
|
spec.extend(VersionExtensions)
|
7
7
|
|
@@ -13,11 +13,6 @@ module Shoe
|
|
13
13
|
def define
|
14
14
|
desc "Release #{spec.full_name}"
|
15
15
|
task :release do
|
16
|
-
File.open("#{spec.name}.gemspec", 'w') do |stream|
|
17
|
-
stream.write(spec.to_ruby)
|
18
|
-
end
|
19
|
-
|
20
|
-
sh "git add #{spec.name}.gemspec"
|
21
16
|
sh "git commit -a -m 'Release #{spec.version}'"
|
22
17
|
sh "git tag #{version_tag(spec.version)}"
|
23
18
|
|
@@ -38,13 +33,9 @@ module Shoe
|
|
38
33
|
end
|
39
34
|
end
|
40
35
|
|
41
|
-
def update_spec
|
42
|
-
spec.files += Rake::FileList['*.gemspec']
|
43
|
-
end
|
44
|
-
|
45
36
|
private
|
46
37
|
|
47
|
-
module VersionExtensions
|
38
|
+
module VersionExtensions #:nodoc:
|
48
39
|
def has_version_greater_than?(string)
|
49
40
|
version > Gem::Version.new(string)
|
50
41
|
end
|
data/lib/shoe/tasks/test.rb
CHANGED
@@ -5,7 +5,7 @@ module Shoe
|
|
5
5
|
|
6
6
|
# MAYBE be a little more forgiving in test selection, using
|
7
7
|
# test/**/*_test.rb. Or create suites based on subdirectory?
|
8
|
-
class Test <
|
8
|
+
class Test < Abstract
|
9
9
|
def active?
|
10
10
|
File.directory?('test')
|
11
11
|
end
|
@@ -18,10 +18,6 @@ module Shoe
|
|
18
18
|
|
19
19
|
before(:default, :test)
|
20
20
|
end
|
21
|
-
|
22
|
-
def update_spec
|
23
|
-
spec.files += Rake::FileList['test/**/*']
|
24
|
-
end
|
25
21
|
end
|
26
22
|
|
27
23
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require '<%= project_name %>/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = '<%= project_name %>'
|
6
|
+
spec.version = <%= project_module %>::VERSION
|
7
|
+
|
8
|
+
spec.summary = ''
|
9
|
+
spec.description = spec.summary
|
10
|
+
spec.author = '<%= `git config --get user.name`.chomp %>'
|
11
|
+
spec.email = '<%= `git config --get user.email`.chomp %>'
|
12
|
+
spec.homepage = 'http://github.com/<%= `git config --get github.user`.chomp %>/<%= project_name %>'
|
13
|
+
|
14
|
+
# You may find these helpful:
|
15
|
+
# spec.requirements = ['git']
|
16
|
+
# spec.required_rubygems_version = ">= 1.3.6"
|
17
|
+
# spec.add_runtime_dependency 'nokogiri'
|
18
|
+
# spec.add_development_dependency 'cucumber'
|
19
|
+
# spec.add_bundler_dependencies # though I'm not sure how to use this yet...
|
20
|
+
|
21
|
+
def spec.git_files(glob=nil)
|
22
|
+
`git ls-files -z --cached --other --exclude-standard #{glob}`.split("\0")
|
23
|
+
end
|
24
|
+
|
25
|
+
spec.files = spec.git_files
|
26
|
+
spec.executables = spec.git_files('bin/*').map &File.method(:basename)
|
27
|
+
spec.extensions = spec.git_files('ext/**/extconf.rb')
|
28
|
+
|
29
|
+
spec.extra_rdoc_files = spec.git_files('{,**/}*.rdoc')
|
30
|
+
spec.rdoc_options = %W(
|
31
|
+
--main README.rdoc
|
32
|
+
--title #{spec.full_name}
|
33
|
+
--inline-source
|
34
|
+
)
|
35
|
+
end
|
@@ -1,7 +1,3 @@
|
|
1
|
-
require '<%= project %>/version'
|
2
1
|
require 'shoe'
|
3
2
|
|
4
|
-
Shoe.
|
5
|
-
# do whatever you want with the Gem::Specification here, for example:
|
6
|
-
# spec.add_runtime_dependency 'dnssd'
|
7
|
-
end
|
3
|
+
Shoe::Tasks.define('<%= gemspec_path %>')
|
@@ -1,3 +1,3 @@
|
|
1
|
-
= <%=
|
1
|
+
= <%= project_module %>
|
2
2
|
|
3
|
-
<%=
|
3
|
+
<%= project_module %> is one of my favorite things! Let me tell you about it:
|
data/lib/shoe/version.rb
CHANGED
data/shoe.gemspec
CHANGED
@@ -1,33 +1,33 @@
|
|
1
|
-
|
1
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require 'shoe/version'
|
2
3
|
|
3
|
-
Gem::Specification.new do |
|
4
|
-
|
5
|
-
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = 'shoe'
|
6
|
+
spec.version = Shoe::VERSION
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
s.executables = ["shoe"]
|
13
|
-
s.extra_rdoc_files = ["README.rdoc"]
|
14
|
-
s.files = ["Rakefile", "lib/shoe", "lib/shoe/cli.rb", "lib/shoe/project.rb", "lib/shoe/tasks", "lib/shoe/tasks/bin.rb", "lib/shoe/tasks/clean.rb", "lib/shoe/tasks/compile.rb", "lib/shoe/tasks/cucumber.rb", "lib/shoe/tasks/gemspec.rb", "lib/shoe/tasks/rdoc.rb", "lib/shoe/tasks/release.rb", "lib/shoe/tasks/resources.rb", "lib/shoe/tasks/shell.rb", "lib/shoe/tasks/shoulda.rb", "lib/shoe/tasks/test.rb", "lib/shoe/tasks.rb", "lib/shoe/templates", "lib/shoe/templates/gemfile.erb", "lib/shoe/templates/rakefile.erb", "lib/shoe/templates/readme.erb", "lib/shoe/templates/version.erb", "lib/shoe/version.rb", "lib/shoe.rb", "bin/shoe", "README.rdoc", "shoe.gemspec", "features/cucumber.feature", "features/getting_started.feature", "features/release.feature", "features/step_definitions", "features/step_definitions/shoe_steps.rb", "features/support", "features/support/env.rb"]
|
15
|
-
s.rdoc_options = ["--main", "README.rdoc", "--title", "shoe-0.3.0", "--inline-source"]
|
16
|
-
s.require_paths = ["lib"]
|
17
|
-
s.requirements = ["git"]
|
18
|
-
s.rubygems_version = %q{1.3.6}
|
19
|
-
s.summary = %q{Another take on hoe, jeweler & friends.}
|
8
|
+
spec.summary = 'Another take on hoe, jeweler & friends.'
|
9
|
+
spec.description = spec.summary
|
10
|
+
spec.author = 'Matthew Todd'
|
11
|
+
spec.email = 'matthew.todd@gmail.com'
|
12
|
+
spec.homepage = 'http://github.com/matthewtodd/shoe'
|
20
13
|
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
spec.requirements = ['git']
|
15
|
+
spec.required_rubygems_version = '>= 1.3.6'
|
16
|
+
spec.add_runtime_dependency 'rake'
|
17
|
+
spec.add_development_dependency 'cucumber'
|
24
18
|
|
25
|
-
|
26
|
-
|
27
|
-
else
|
28
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
29
|
-
end
|
30
|
-
else
|
31
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
19
|
+
def spec.git_files(glob=nil)
|
20
|
+
`git ls-files -z --cached --other --exclude-standard #{glob}`.split("\0")
|
32
21
|
end
|
22
|
+
|
23
|
+
spec.files = spec.git_files
|
24
|
+
spec.executables = spec.git_files('bin/*').map &File.method(:basename)
|
25
|
+
spec.extensions = spec.git_files('ext/**/extconf.rb')
|
26
|
+
|
27
|
+
spec.extra_rdoc_files = spec.git_files('{,**/}*.rdoc')
|
28
|
+
spec.rdoc_options = %W(
|
29
|
+
--main README.rdoc
|
30
|
+
--title #{spec.full_name}
|
31
|
+
--inline-source
|
32
|
+
)
|
33
33
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matthew Todd
|
@@ -14,8 +14,8 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
18
|
-
default_executable:
|
17
|
+
date: 2010-04-07 00:00:00 +03:00
|
18
|
+
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rake
|
@@ -29,46 +29,62 @@ dependencies:
|
|
29
29
|
version: "0"
|
30
30
|
type: :runtime
|
31
31
|
version_requirements: *id001
|
32
|
-
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: cucumber
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :development
|
43
|
+
version_requirements: *id002
|
44
|
+
description: Another take on hoe, jeweler & friends.
|
33
45
|
email: matthew.todd@gmail.com
|
34
46
|
executables:
|
35
47
|
- shoe
|
36
48
|
extensions: []
|
37
49
|
|
38
50
|
extra_rdoc_files:
|
51
|
+
- BUNDLER.rdoc
|
52
|
+
- CHANGELOG.rdoc
|
39
53
|
- README.rdoc
|
54
|
+
- TODO.rdoc
|
40
55
|
files:
|
56
|
+
- .gitignore
|
57
|
+
- BUNDLER.rdoc
|
58
|
+
- CHANGELOG.rdoc
|
59
|
+
- Gemfile
|
60
|
+
- Gemfile.lock
|
61
|
+
- README.rdoc
|
41
62
|
- Rakefile
|
42
|
-
-
|
43
|
-
-
|
44
|
-
-
|
63
|
+
- TODO.rdoc
|
64
|
+
- bin/shoe
|
65
|
+
- features/cucumber.feature
|
66
|
+
- features/getting_started.feature
|
67
|
+
- features/release.feature
|
68
|
+
- features/step_definitions/shoe_steps.rb
|
69
|
+
- features/support/env.rb
|
70
|
+
- lib/shoe.rb
|
71
|
+
- lib/shoe/generator.rb
|
72
|
+
- lib/shoe/tasks.rb
|
73
|
+
- lib/shoe/tasks/abstract.rb
|
45
74
|
- lib/shoe/tasks/clean.rb
|
46
75
|
- lib/shoe/tasks/compile.rb
|
47
76
|
- lib/shoe/tasks/cucumber.rb
|
48
|
-
- lib/shoe/tasks/gemspec.rb
|
49
77
|
- lib/shoe/tasks/rdoc.rb
|
50
78
|
- lib/shoe/tasks/release.rb
|
51
|
-
- lib/shoe/tasks/resources.rb
|
52
|
-
- lib/shoe/tasks/shell.rb
|
53
|
-
- lib/shoe/tasks/shoulda.rb
|
54
79
|
- lib/shoe/tasks/test.rb
|
55
|
-
- lib/shoe/
|
56
|
-
- lib/shoe/templates/gemfile.erb
|
80
|
+
- lib/shoe/templates/gemspec.erb
|
57
81
|
- lib/shoe/templates/rakefile.erb
|
58
82
|
- lib/shoe/templates/readme.erb
|
59
83
|
- lib/shoe/templates/version.erb
|
60
84
|
- lib/shoe/version.rb
|
61
|
-
- lib/shoe.rb
|
62
|
-
- bin/shoe
|
63
|
-
- README.rdoc
|
64
85
|
- shoe.gemspec
|
65
|
-
- features/cucumber.feature
|
66
|
-
- features/getting_started.feature
|
67
|
-
- features/release.feature
|
68
|
-
- features/step_definitions/shoe_steps.rb
|
69
|
-
- features/support/env.rb
|
70
86
|
has_rdoc: true
|
71
|
-
homepage:
|
87
|
+
homepage: http://github.com/matthewtodd/shoe
|
72
88
|
licenses: []
|
73
89
|
|
74
90
|
post_install_message:
|
@@ -76,7 +92,7 @@ rdoc_options:
|
|
76
92
|
- --main
|
77
93
|
- README.rdoc
|
78
94
|
- --title
|
79
|
-
- shoe-0.
|
95
|
+
- shoe-0.4.0
|
80
96
|
- --inline-source
|
81
97
|
require_paths:
|
82
98
|
- lib
|
data/lib/shoe/cli.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'erb'
|
4
|
-
require 'pathname'
|
5
|
-
|
6
|
-
module Shoe
|
7
|
-
class CLI
|
8
|
-
class << self
|
9
|
-
def run
|
10
|
-
new.run
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
attr_reader :root
|
15
|
-
attr_reader :spec
|
16
|
-
attr_reader :template_path
|
17
|
-
|
18
|
-
def initialize
|
19
|
-
@root = Pathname.pwd.expand_path
|
20
|
-
|
21
|
-
@spec = Gem::Specification.new do |spec|
|
22
|
-
spec.name = root.basename.to_s
|
23
|
-
spec.version = '0.0.0'
|
24
|
-
end
|
25
|
-
|
26
|
-
@template_path = Pathname.new(__FILE__).dirname.join('templates')
|
27
|
-
end
|
28
|
-
|
29
|
-
def run
|
30
|
-
path('Gemfile').update template('gemfile.erb')
|
31
|
-
|
32
|
-
path('README.rdoc').install template('readme.erb')
|
33
|
-
path('Rakefile').install template('rakefile.erb')
|
34
|
-
path(version_path).install template('version.erb')
|
35
|
-
path(gemspec_path).install spec.to_ruby
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def project
|
41
|
-
spec.name
|
42
|
-
end
|
43
|
-
|
44
|
-
def project_class
|
45
|
-
project.capitalize.gsub(/_(\w)/) { $1.upcase }
|
46
|
-
end
|
47
|
-
|
48
|
-
def project_version
|
49
|
-
spec.version
|
50
|
-
end
|
51
|
-
|
52
|
-
def version_path
|
53
|
-
"lib/#{project}/version.rb"
|
54
|
-
end
|
55
|
-
|
56
|
-
def gemspec_path
|
57
|
-
"#{project}.gemspec"
|
58
|
-
end
|
59
|
-
|
60
|
-
def template(name)
|
61
|
-
ERB.new(template_contents(name)).result(binding)
|
62
|
-
end
|
63
|
-
|
64
|
-
def template_contents(name)
|
65
|
-
template_path.join(name).read
|
66
|
-
end
|
67
|
-
|
68
|
-
def path(name)
|
69
|
-
path = root.join(name)
|
70
|
-
path.dirname.mkpath
|
71
|
-
path.extend(PathExtensions)
|
72
|
-
end
|
73
|
-
|
74
|
-
module PathExtensions
|
75
|
-
def install(contents)
|
76
|
-
if exist?
|
77
|
-
$stderr.puts "#{to_s} exists. Not clobbering."
|
78
|
-
else
|
79
|
-
write(contents, 'w')
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def update(contents)
|
84
|
-
write(contents, 'a')
|
85
|
-
end
|
86
|
-
|
87
|
-
private
|
88
|
-
|
89
|
-
def write(contents, mode)
|
90
|
-
open(mode) { |file| file.write(contents) }
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
data/lib/shoe/project.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Shoe
|
2
|
-
class Project
|
3
|
-
|
4
|
-
# The Gem::Specification for your project.
|
5
|
-
attr_reader :spec
|
6
|
-
|
7
|
-
# Initializes a Gem::Specification with some nice conventions.
|
8
|
-
def initialize(name, version, summary)
|
9
|
-
@spec = Gem::Specification.new do |spec|
|
10
|
-
spec.name = name
|
11
|
-
spec.version = version
|
12
|
-
spec.summary = summary
|
13
|
-
spec.files = FileList['Rakefile', 'lib/**/*']
|
14
|
-
spec.author = `git config --get user.name`.chomp
|
15
|
-
spec.email = `git config --get user.email`.chomp
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# This is where the magic happens.
|
20
|
-
def define_tasks
|
21
|
-
Shoe::Tasks.each do |task|
|
22
|
-
task.define(spec)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
data/lib/shoe/tasks/bin.rb
DELETED
data/lib/shoe/tasks/gemspec.rb
DELETED
data/lib/shoe/tasks/resources.rb
DELETED
data/lib/shoe/tasks/shell.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
module Shoe
|
2
|
-
module Tasks
|
3
|
-
|
4
|
-
# TODO can remove irb args -- and thus this task altogether! -- if we
|
5
|
-
# assume bundler
|
6
|
-
class Shell < AbstractTask
|
7
|
-
def active?
|
8
|
-
File.file?("lib/#{spec.name}.rb")
|
9
|
-
end
|
10
|
-
|
11
|
-
def define
|
12
|
-
desc 'Run an irb console'
|
13
|
-
task :shell do
|
14
|
-
exec 'irb', '-Ilib', "-r#{spec.name}"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
data/lib/shoe/tasks/shoulda.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
gem '<%= project %>', :path => File.expand_path('..', __FILE__)
|