shoe 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +10 -7
- data/Rakefile +1 -0
- data/bin/shoe +2 -1
- data/features/cucumber.feature +1 -0
- data/features/getting_started.feature +2 -2
- data/features/step_definitions/shoe_steps.rb +5 -1
- data/features/support/env.rb +14 -5
- data/lib/shoe.rb +0 -15
- data/lib/shoe/cli.rb +1 -1
- data/lib/shoe/tasks.rb +29 -0
- data/lib/shoe/tasks/cucumber.rb +3 -1
- data/lib/shoe/tasks/release.rb +5 -28
- data/lib/shoe/templates/rakefile.erb +1 -1
- data/lib/shoe/version.rb +1 -1
- data/shoe.gemspec +7 -7
- metadata +22 -13
- data/BUNDLER.rdoc +0 -38
data/README.rdoc
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
= Shoe
|
2
2
|
|
3
|
-
|
3
|
+
Shoe defines some handy Rake tasks for your project, all built around your
|
4
|
+
Gem::Specification.
|
4
5
|
|
5
|
-
|
6
|
+
Shoe is a small blip in the grand tradition of more popular projects like
|
6
7
|
hoe[http://seattlerb.rubyforge.org/hoe] and
|
7
|
-
jeweler[http://github.com/technicalpickles/jeweler]
|
8
|
+
jeweler[http://github.com/technicalpickles/jeweler]. I had an itch to scratch,
|
9
|
+
you understand.
|
8
10
|
|
9
11
|
== Behold
|
10
12
|
|
11
13
|
Here's how your +Rakefile+ looks:
|
12
14
|
|
13
|
-
require 'shoe'
|
14
15
|
require 'my_project/version'
|
16
|
+
require 'shoe'
|
15
17
|
|
16
18
|
Shoe.tie('my_project', MyProject::VERSION, "This is my project, and it's awesome!") do |spec|
|
17
19
|
# do whatever you want with the Gem::Specification here, for example:
|
@@ -34,7 +36,7 @@ And here's what you get, at most:
|
|
34
36
|
Most of the time, though, you won't see all of these: when possible, tasks are
|
35
37
|
conditionally defined.
|
36
38
|
|
37
|
-
See what I mean by
|
39
|
+
See what I mean by clicking through the various <tt>Shoe::Tasks</tt>.
|
38
40
|
|
39
41
|
== Getting Started
|
40
42
|
|
@@ -42,14 +44,15 @@ See what I mean by reading <tt>Shoe#define_tasks</tt>.
|
|
42
44
|
|
43
45
|
1. Start with just shoe in your +Gemfile+:
|
44
46
|
|
45
|
-
source :
|
47
|
+
source :rubygems
|
46
48
|
gem 'shoe'
|
47
49
|
|
48
50
|
2. Open a sub-shell configured for the bundler environment:
|
49
51
|
|
50
52
|
$ bundle exec $SHELL
|
51
53
|
|
52
|
-
(
|
54
|
+
(If you run into trouble, {this blog
|
55
|
+
post}[http://matthewtodd.org/2010/02/19/bundle-exec-bash.html] may help.)
|
53
56
|
|
54
57
|
3. Use +shoe+ to generate some skeleton project files:
|
55
58
|
|
data/Rakefile
CHANGED
data/bin/shoe
CHANGED
data/features/cucumber.feature
CHANGED
@@ -10,6 +10,7 @@ Feature: Cucumber
|
|
10
10
|
|
11
11
|
Scenario: Running rake --tasks in a shoe project with Cucumber features
|
12
12
|
Given I have created a project called "my_project"
|
13
|
+
And I have appended "gem 'cucumber'" to "my_project/Gemfile"
|
13
14
|
And I have created a directory called "my_project/features"
|
14
15
|
When I run bundle exec rake --tasks inside "my_project"
|
15
16
|
Then I should see "rake cucumber" on standard out
|
@@ -7,7 +7,7 @@ Feature: Getting started
|
|
7
7
|
Given I have created a directory called "my_project"
|
8
8
|
And I have created a file called "my_project/Gemfile" containing:
|
9
9
|
"""
|
10
|
-
source :
|
10
|
+
source :rubygems
|
11
11
|
gem 'shoe'
|
12
12
|
"""
|
13
13
|
When I run bundle exec shoe inside "my_project"
|
@@ -20,7 +20,7 @@ Feature: Getting started
|
|
20
20
|
Given I have created a directory called "my_project"
|
21
21
|
And I have created a file called "my_project/Gemfile" containing:
|
22
22
|
"""
|
23
|
-
source :
|
23
|
+
source :rubygems
|
24
24
|
gem 'shoe'
|
25
25
|
"""
|
26
26
|
And I have created a file called "my_project/Rakefile" containing "# RAKEFILE CONTENTS"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Given /^I have created a project called "([^\"]*)"$/ do |name|
|
2
2
|
create_directory(name)
|
3
3
|
create_file("#{name}/Gemfile", <<-END.gsub(/^\s*/, ''))
|
4
|
-
source :
|
4
|
+
source :rubygems
|
5
5
|
gem 'shoe'
|
6
6
|
END
|
7
7
|
run('bundle exec shoe', name)
|
@@ -19,6 +19,10 @@ Given /^I have created a file called "([^\"]*)" containing:$/ do |path, contents
|
|
19
19
|
create_file(path, contents)
|
20
20
|
end
|
21
21
|
|
22
|
+
Given /^I have appended "([^\"]*)" to "([^\"]*)"$/ do |contents, path|
|
23
|
+
append_file(path, contents)
|
24
|
+
end
|
25
|
+
|
22
26
|
When /^I replace "([^\"]*)" with "([^\"]*)" in the file "([^\"]*)"$/ do |search, replace, path|
|
23
27
|
edit_file(path, search, replace)
|
24
28
|
end
|
data/features/support/env.rb
CHANGED
@@ -4,7 +4,7 @@ require 'test/unit/assertions'
|
|
4
4
|
require 'tmpdir'
|
5
5
|
|
6
6
|
class WorkingDirectory
|
7
|
-
PROJECT_ROOT = Pathname.new(File.expand_path(
|
7
|
+
PROJECT_ROOT = Pathname.new(File.expand_path('../../..', __FILE__))
|
8
8
|
|
9
9
|
attr_reader :working_directory
|
10
10
|
attr_reader :standard_out
|
@@ -48,13 +48,22 @@ class WorkingDirectory
|
|
48
48
|
private
|
49
49
|
|
50
50
|
def be_sneaky_with_the_gemfile(contents)
|
51
|
-
contents.sub("gem 'shoe'", "gem 'shoe', :path => '#{
|
51
|
+
contents.sub("gem 'shoe'", "gem 'shoe', :path => '#{PROJECT_ROOT.expand_path}'")
|
52
52
|
end
|
53
53
|
|
54
|
-
# bundle exec rake running from bundle exec cucumber otherwise gets confused
|
55
|
-
# about where the real Gemfile is.
|
56
54
|
def isolate_environment(command)
|
57
|
-
|
55
|
+
# set the PATH so bundle exec can find shoe
|
56
|
+
ENV['PATH'] = ENV['PATH'].split(File::PATH_SEPARATOR).
|
57
|
+
unshift(PROJECT_ROOT.join('bin')).uniq.
|
58
|
+
join(File::PATH_SEPARATOR)
|
59
|
+
|
60
|
+
# whack most environment variables so nested bundle exec won't get confused
|
61
|
+
# about where the Gemfile is
|
62
|
+
"/usr/bin/env -i #{preserve_environment 'HOME', 'PATH', 'GEM_HOME', 'GEM_PATH'} #{command}"
|
63
|
+
end
|
64
|
+
|
65
|
+
def preserve_environment(*variables)
|
66
|
+
variables.map { |name| "#{name}='#{ENV[name]}'" }.join(' ')
|
58
67
|
end
|
59
68
|
end
|
60
69
|
|
data/lib/shoe.rb
CHANGED
@@ -1,22 +1,7 @@
|
|
1
|
-
# Shoe defines some handy Rake tasks for your project, all built around your
|
2
|
-
# Gem::Specification.
|
3
|
-
#
|
4
|
-
# Here's how you use it in your Rakefile:
|
5
|
-
#
|
6
|
-
# require 'shoe'
|
7
|
-
# Shoe.tie('myproject', '0.1.0', "This is my project, and it's awesome!") do |spec|
|
8
|
-
# # do whatever you want with the Gem::Specification here, for example:
|
9
|
-
# # spec.add_runtime_dependency 'dnssd'
|
10
|
-
# end
|
11
|
-
#
|
12
|
-
# Shoe comes with an executable named "shoe" that will generate a Rakefile like
|
13
|
-
# this (but slightly fancier) for you.
|
14
1
|
module Shoe
|
15
2
|
autoload :Project, 'shoe/project'
|
16
3
|
autoload :Tasks, 'shoe/tasks'
|
17
4
|
|
18
|
-
# Here's where you start. In your Rakefile, you'll probably just call
|
19
|
-
# Shoe.tie, then add any dependencies in the block.
|
20
5
|
def self.tie(name, version, summary)
|
21
6
|
project = Project.new(name, version, summary)
|
22
7
|
yield project.spec if block_given?
|
data/lib/shoe/cli.rb
CHANGED
data/lib/shoe/tasks.rb
CHANGED
@@ -74,6 +74,35 @@ module Shoe
|
|
74
74
|
task name => dependency
|
75
75
|
end
|
76
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
|
77
106
|
end
|
78
107
|
|
79
108
|
end
|
data/lib/shoe/tasks/cucumber.rb
CHANGED
@@ -10,7 +10,9 @@ module Shoe
|
|
10
10
|
begin
|
11
11
|
require 'cucumber/rake/task'
|
12
12
|
rescue LoadError
|
13
|
-
|
13
|
+
warn 'cucumber',
|
14
|
+
"Although you have a features directory, it seems you don't have cucumber installed.",
|
15
|
+
"You probably want to add a \"gem 'cucumber'\" to your Gemfile."
|
14
16
|
else
|
15
17
|
define_tasks
|
16
18
|
end
|
data/lib/shoe/tasks/release.rb
CHANGED
@@ -22,18 +22,10 @@ module Shoe
|
|
22
22
|
sh "git tag #{version_tag(spec.version)}"
|
23
23
|
|
24
24
|
if there_is_no_tag_for('semver')
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
It seems you don't yet have a 'semver' tag.
|
30
|
-
|
31
|
-
Please read more about the emerging consensus
|
32
|
-
around semantic versioning:
|
33
|
-
|
34
|
-
http://semver.org/
|
35
|
-
---------------------------------------------
|
36
|
-
END
|
25
|
+
warn 'semantic versioning',
|
26
|
+
"It seems you don't yet have a 'semver' tag.",
|
27
|
+
'Please read more about the emerging consensus around semantic versioning:',
|
28
|
+
'http://semver.org'
|
37
29
|
end
|
38
30
|
|
39
31
|
if there_is_a_remote_called('origin')
|
@@ -42,22 +34,7 @@ module Shoe
|
|
42
34
|
end
|
43
35
|
|
44
36
|
sh "gem build #{spec.name}.gemspec"
|
45
|
-
|
46
|
-
if Gem::CommandManager.instance.command_names.include?('push')
|
47
|
-
sh "gem push #{spec.file_name}"
|
48
|
-
else
|
49
|
-
$stderr.puts <<-END.gsub(/^ +/, '')
|
50
|
-
---------------------------------------------
|
51
|
-
GEMCUTTER WARNING
|
52
|
-
|
53
|
-
It seems you don't have gemcutter installed.
|
54
|
-
|
55
|
-
Please `gem install gemcutter` and
|
56
|
-
`gem push #{spec.file_name}`
|
57
|
-
if you would like to make a public release.
|
58
|
-
---------------------------------------------
|
59
|
-
END
|
60
|
-
end
|
37
|
+
sh "gem push #{spec.file_name}"
|
61
38
|
end
|
62
39
|
end
|
63
40
|
|
data/lib/shoe/version.rb
CHANGED
data/shoe.gemspec
CHANGED
@@ -2,20 +2,20 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{shoe}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.3.0"
|
6
6
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">=
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Matthew Todd"]
|
9
|
-
s.date = %q{2010-
|
9
|
+
s.date = %q{2010-03-30}
|
10
10
|
s.default_executable = %q{shoe}
|
11
11
|
s.email = %q{matthew.todd@gmail.com}
|
12
12
|
s.executables = ["shoe"]
|
13
|
-
s.extra_rdoc_files = ["
|
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", "
|
15
|
-
s.rdoc_options = ["--main", "README.rdoc", "--title", "shoe-0.
|
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
16
|
s.require_paths = ["lib"]
|
17
17
|
s.requirements = ["git"]
|
18
|
-
s.rubygems_version = %q{1.3.
|
18
|
+
s.rubygems_version = %q{1.3.6}
|
19
19
|
s.summary = %q{Another take on hoe, jeweler & friends.}
|
20
20
|
|
21
21
|
if s.respond_to? :specification_version then
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shoe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Matthew Todd
|
@@ -9,19 +14,21 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-03-30 00:00:00 +03:00
|
13
18
|
default_executable: shoe
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: rake
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
23
29
|
version: "0"
|
24
|
-
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
25
32
|
description:
|
26
33
|
email: matthew.todd@gmail.com
|
27
34
|
executables:
|
@@ -29,7 +36,6 @@ executables:
|
|
29
36
|
extensions: []
|
30
37
|
|
31
38
|
extra_rdoc_files:
|
32
|
-
- BUNDLER.rdoc
|
33
39
|
- README.rdoc
|
34
40
|
files:
|
35
41
|
- Rakefile
|
@@ -54,7 +60,6 @@ files:
|
|
54
60
|
- lib/shoe/version.rb
|
55
61
|
- lib/shoe.rb
|
56
62
|
- bin/shoe
|
57
|
-
- BUNDLER.rdoc
|
58
63
|
- README.rdoc
|
59
64
|
- shoe.gemspec
|
60
65
|
- features/cucumber.feature
|
@@ -71,7 +76,7 @@ rdoc_options:
|
|
71
76
|
- --main
|
72
77
|
- README.rdoc
|
73
78
|
- --title
|
74
|
-
- shoe-0.
|
79
|
+
- shoe-0.3.0
|
75
80
|
- --inline-source
|
76
81
|
require_paths:
|
77
82
|
- lib
|
@@ -79,18 +84,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
84
|
requirements:
|
80
85
|
- - ">="
|
81
86
|
- !ruby/object:Gem::Version
|
87
|
+
segments:
|
88
|
+
- 0
|
82
89
|
version: "0"
|
83
|
-
version:
|
84
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
91
|
requirements:
|
86
92
|
- - ">="
|
87
93
|
- !ruby/object:Gem::Version
|
88
|
-
|
89
|
-
|
94
|
+
segments:
|
95
|
+
- 1
|
96
|
+
- 3
|
97
|
+
- 6
|
98
|
+
version: 1.3.6
|
90
99
|
requirements:
|
91
100
|
- git
|
92
101
|
rubyforge_project:
|
93
|
-
rubygems_version: 1.3.
|
102
|
+
rubygems_version: 1.3.6
|
94
103
|
signing_key:
|
95
104
|
specification_version: 3
|
96
105
|
summary: Another take on hoe, jeweler & friends.
|
data/BUNDLER.rdoc
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
= Notes on <tt>`bundle exec bash`</tt>
|
2
|
-
|
3
|
-
If your <tt>$SHELL</tt> happens to be +bash+, you may run into some of the same problems I did.
|
4
|
-
|
5
|
-
Here they are, with fixes:
|
6
|
-
|
7
|
-
== Functions and Aliases Aren't Available
|
8
|
-
|
9
|
-
I had all of my +bash+ configuration in <tt>~/.profile</tt>. But,
|
10
|
-
<tt>~/.profile</tt> isn't read when you execute +bash+ from the command-line
|
11
|
-
(i.e. as a non-login shell), and only environment variables are inherited from
|
12
|
-
the parent shell; not functions, aliases, or completion rules.
|
13
|
-
|
14
|
-
So, just move all your non-environment-variable configuration out of
|
15
|
-
<tt>~/.profile</tt> and into <tt>~/.bashrc</tt>, and then add something like
|
16
|
-
this to your <tt>~/.profile</tt>:
|
17
|
-
|
18
|
-
if [ -f ~/.bashrc ]; then
|
19
|
-
source ~/.bashrc
|
20
|
-
fi
|
21
|
-
|
22
|
-
== Prompts are SLOW!
|
23
|
-
|
24
|
-
Once I got that sorted, I still had the problem that my bash prompts were way
|
25
|
-
slow to generate. I was using the <tt>__git_ps1</tt> function and had the
|
26
|
-
standalone version of Chris Wanstrath's hub[http://github.com/defunkt/hub]
|
27
|
-
installed, with <tt>alias git=hub</tt> in my <tt>~/.bashrc</tt>.
|
28
|
-
|
29
|
-
The issue is that <tt>`bundle exec`</tt> adds <tt>-rbundler/setup</tt> to the
|
30
|
-
+RUBYOPT+ environment variable, so every +ruby+ invocation first requires all
|
31
|
-
of your bundled gems. Since +hub+ is a ruby script, and <tt>__git_ps1</tt>
|
32
|
-
invokes +git+ multiple times, generating a prompt gets expensive quickly. I was
|
33
|
-
seeing something like 3-second delays!
|
34
|
-
|
35
|
-
One way to work around this issue is to change the way you call +hub+, clearing
|
36
|
-
out +RUBYOPT+ first:
|
37
|
-
|
38
|
-
$ alias git='RUBYOPT= hub'
|