matthewtodd-shoe 0.1.4 → 0.1.5
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/README.rdoc +28 -13
- data/Rakefile +2 -1
- data/lib/shoe.rb +60 -22
- metadata +5 -5
data/README.rdoc
CHANGED
@@ -2,23 +2,38 @@
|
|
2
2
|
|
3
3
|
You probably don't want to use Shoe -- especially if you're like me!
|
4
4
|
|
5
|
-
I like tinkering with my build scripts. That's why I don't use hoe and jeweler and those guys, even though they're awesome. I like to put my own thing together, so I made Shoe.
|
5
|
+
I like tinkering with my build scripts. That's why I don't use hoe[http://seattlerb.rubyforge.org/hoe] and jeweler[http://github.com/technicalpickles/jeweler] and those guys, even though they're awesome. I like to put my own thing together, so I made Shoe.
|
6
6
|
|
7
|
-
==
|
7
|
+
== Behold
|
8
|
+
|
9
|
+
Here's how your Rakefile looks:
|
10
|
+
|
11
|
+
require 'shoe'
|
12
|
+
|
13
|
+
Shoe.tie('myproject', '0.1.0', "This is my project, and it's awesome!") do |spec|
|
14
|
+
spec.add_development_dependency 'thoughtbot-shoulda'
|
15
|
+
end
|
8
16
|
|
9
|
-
|
10
|
-
gem install matthewtodd-shoe
|
17
|
+
And here's what you get, at most:
|
11
18
|
|
12
|
-
|
19
|
+
rake clean # Remove ignored files
|
20
|
+
rake default # Run tests / Run features
|
21
|
+
rake features # Run features
|
22
|
+
rake rdoc # Generate documentation
|
23
|
+
rake release # Release myproject-0.1.0
|
24
|
+
rake shell # Run an irb console
|
25
|
+
rake test # Run tests
|
26
|
+
|
27
|
+
Most of the time, though, you won't see all of these: when possible, tasks are conditionally defined.
|
28
|
+
|
29
|
+
See what I mean by reading Shoe#define_tasks.
|
30
|
+
|
31
|
+
== Install
|
13
32
|
|
14
|
-
|
15
|
-
shoe # create a Rakefile
|
16
|
-
rake -T # see what you get
|
33
|
+
gem install matthewtodd-shoe --source http://gems.github.com
|
17
34
|
|
18
|
-
|
19
|
-
rake -T
|
35
|
+
== Getting Started
|
20
36
|
|
21
|
-
|
22
|
-
rake -T
|
37
|
+
Shoe can create a Rakefile for you:
|
23
38
|
|
24
|
-
|
39
|
+
cd myproject && shoe
|
data/Rakefile
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
2
2
|
require 'shoe'
|
3
3
|
|
4
|
-
Shoe.tie('shoe', '0.1.
|
4
|
+
Shoe.tie('shoe', '0.1.5', "You probably don't want to use Shoe.") do |spec|
|
5
5
|
spec.remove_development_dependency_on_shoe
|
6
|
+
spec.requirements = ['git']
|
6
7
|
spec.add_runtime_dependency 'cucumber'
|
7
8
|
spec.add_runtime_dependency 'rake'
|
8
9
|
end
|
data/lib/shoe.rb
CHANGED
@@ -1,26 +1,36 @@
|
|
1
|
-
require 'pathname'
|
2
1
|
require 'rubygems/doc_manager'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
# Shoe defines some handy Rake tasks for your project, all built around your Gem::Specification.
|
4
|
+
#
|
5
|
+
# Here's how you use it in your Rakefile:
|
6
|
+
#
|
7
|
+
# require 'shoe'
|
8
|
+
# Shoe.tie('myproject', '0.1.0', "This is my project, and it's awesome!") do |spec|
|
9
|
+
# spec.add_development_dependency 'thoughtbot-shoulda'
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# Shoe comes with an executable named "shoe" that will generate a Rakefile like this (but slightly fancier) for you.
|
7
13
|
class Shoe
|
14
|
+
# Here's where you start. In your Rakefile, you'll probably just call
|
15
|
+
# Shoe.tie, then add any dependencies in the block.
|
8
16
|
def self.tie(name, version, summary)
|
9
17
|
shoe = new(name, version, summary)
|
10
18
|
yield shoe.spec if block_given?
|
11
19
|
shoe.define_tasks
|
12
20
|
end
|
13
21
|
|
22
|
+
# The Gem::Specification for your project.
|
14
23
|
attr_reader :spec
|
15
24
|
|
25
|
+
# Initializes a Gem::Specification with some nice conventions.
|
16
26
|
def initialize(name, version, summary)
|
17
27
|
@spec = Gem::Specification.new do |spec|
|
18
28
|
spec.name = name
|
19
29
|
spec.version = version
|
20
30
|
spec.summary = summary
|
21
|
-
spec.files = FileList['Rakefile', '*.rdoc', 'bin/**/*', 'features/**/*', 'lib/**/*', 'resources
|
22
|
-
spec.executables =
|
23
|
-
spec.rdoc_options = %W(--main README.rdoc --title #{name}-#{version} --inline-source)
|
31
|
+
spec.files = FileList['Rakefile', '*.rdoc', 'bin/**/*', 'features/**/*', 'lib/**/*', 'resources/**/*', 'test/**/*'].to_a
|
32
|
+
spec.executables = everything_in_the_bin_directory
|
33
|
+
spec.rdoc_options = %W(--main README.rdoc --title #{name}-#{version} --inline-source) # MAYBE include --all, so that we document private methods?
|
24
34
|
spec.extra_rdoc_files = FileList['*.rdoc'].to_a
|
25
35
|
spec.has_rdoc = true
|
26
36
|
spec.author = `git config --get user.name`.chomp
|
@@ -33,6 +43,7 @@ class Shoe
|
|
33
43
|
end
|
34
44
|
end
|
35
45
|
|
46
|
+
# This is where the magic happens.
|
36
47
|
def define_tasks
|
37
48
|
desc 'Remove ignored files'
|
38
49
|
task :clean do
|
@@ -41,20 +52,29 @@ class Shoe
|
|
41
52
|
|
42
53
|
desc 'Generate documentation'
|
43
54
|
task :rdoc do
|
44
|
-
|
55
|
+
LocalDocManager.new(spec).generate_rdoc
|
56
|
+
sh 'open rdoc/index.html' if RUBY_PLATFORM =~ /darwin/
|
57
|
+
end
|
58
|
+
|
59
|
+
desc 'Run an irb console'
|
60
|
+
task :shell do
|
61
|
+
# MAYBE include -Iext. I think I'd like to wait until I handle C extensions in general.
|
62
|
+
exec 'irb', '-Ilib', "-r#{spec.name}"
|
45
63
|
end
|
46
64
|
|
47
|
-
if
|
65
|
+
if File.directory?('test')
|
66
|
+
require 'rake/testtask'
|
48
67
|
Rake::TestTask.new { |task| task.pattern = 'test/*_test.rb' }
|
49
68
|
default_depends_on(:test)
|
50
69
|
end
|
51
70
|
|
52
|
-
if
|
71
|
+
if File.directory?('features')
|
72
|
+
require 'cucumber/rake/task'
|
53
73
|
Cucumber::Rake::Task.new('features', 'Run features')
|
54
74
|
default_depends_on(:features)
|
55
75
|
end
|
56
76
|
|
57
|
-
if
|
77
|
+
if these_shell_commands_all_succeed(there_is_no_tag_for_the_current_version, we_are_on_the_master_branch, there_is_a_remote_called_origin)
|
58
78
|
desc "Release #{spec.name}-#{spec.version}"
|
59
79
|
task :release do
|
60
80
|
File.open("#{spec.name}.gemspec", 'w') { |f| f.write spec.to_ruby }
|
@@ -74,24 +94,42 @@ class Shoe
|
|
74
94
|
task :default => task_name
|
75
95
|
end
|
76
96
|
|
77
|
-
def
|
78
|
-
bin
|
79
|
-
bin.directory? ? bin.children.map { |child| child.basename.to_s } : []
|
97
|
+
def everything_in_the_bin_directory
|
98
|
+
File.directory?('bin') ? Dir.entries('bin') - ['.', '..'] : []
|
80
99
|
end
|
81
100
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
local_spec
|
101
|
+
# I'm guessing it's a little faster shell out to all these commands
|
102
|
+
# together, rather than running each one separately.
|
103
|
+
def these_shell_commands_all_succeed(*commands)
|
104
|
+
system(commands.join(' && '))
|
88
105
|
end
|
89
106
|
|
90
|
-
|
107
|
+
def there_is_no_tag_for_the_current_version
|
108
|
+
"[[ -z `git tag -l #{spec.version}` ]]"
|
109
|
+
end
|
110
|
+
|
111
|
+
def we_are_on_the_master_branch
|
112
|
+
"git branch | grep -q '* master'"
|
113
|
+
end
|
114
|
+
|
115
|
+
def there_is_a_remote_called_origin
|
116
|
+
'git remote | grep -q origin'
|
117
|
+
end
|
118
|
+
|
119
|
+
# Using Gem::DocManager instead of Rake::RdocTask means you get to see your
|
120
|
+
# rdoc *exactly* as users who install your gem will.
|
121
|
+
class LocalDocManager < Gem::DocManager #:nodoc:
|
91
122
|
def initialize(spec)
|
92
123
|
@spec = spec
|
93
|
-
@doc_dir =
|
124
|
+
@doc_dir = Dir.pwd
|
94
125
|
@rdoc_args = []
|
126
|
+
adjust_spec_so_that_we_can_generate_rdoc_locally
|
127
|
+
end
|
128
|
+
|
129
|
+
def adjust_spec_so_that_we_can_generate_rdoc_locally
|
130
|
+
def @spec.full_gem_path
|
131
|
+
Dir.pwd
|
132
|
+
end
|
95
133
|
end
|
96
134
|
end
|
97
135
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: matthewtodd-shoe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Todd
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-07-
|
12
|
+
date: 2009-07-24 00:00:00 -07:00
|
13
13
|
default_executable: shoe
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -52,7 +52,7 @@ rdoc_options:
|
|
52
52
|
- --main
|
53
53
|
- README.rdoc
|
54
54
|
- --title
|
55
|
-
- shoe-0.1.
|
55
|
+
- shoe-0.1.5
|
56
56
|
- --inline-source
|
57
57
|
require_paths:
|
58
58
|
- lib
|
@@ -68,8 +68,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: "0"
|
70
70
|
version:
|
71
|
-
requirements:
|
72
|
-
|
71
|
+
requirements:
|
72
|
+
- git
|
73
73
|
rubyforge_project:
|
74
74
|
rubygems_version: 1.2.0
|
75
75
|
signing_key:
|