shoe 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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__)
|