gem-this 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +23 -16
- data/Rakefile.erb +45 -24
- data/bin/gem-this +1 -1
- data/lib/gem_this.rb +50 -12
- data/lib/rubygems_plugin.rb +1 -1
- metadata +34 -5
data/Rakefile
CHANGED
@@ -2,8 +2,13 @@ require "rubygems"
|
|
2
2
|
require "rake/gempackagetask"
|
3
3
|
require "rake/rdoctask"
|
4
4
|
|
5
|
-
task :default => :
|
6
|
-
|
5
|
+
task :default => :test
|
6
|
+
|
7
|
+
require "rake/testtask"
|
8
|
+
Rake::TestTask.new do |t|
|
9
|
+
t.libs = [File.expand_path("lib"), "test"]
|
10
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
11
|
+
t.verbose = true
|
7
12
|
end
|
8
13
|
|
9
14
|
# This builds the actual gem. For details of what all these options
|
@@ -12,10 +17,10 @@ end
|
|
12
17
|
# http://rubygems.org/read/chapter/20
|
13
18
|
#
|
14
19
|
spec = Gem::Specification.new do |s|
|
15
|
-
|
20
|
+
|
16
21
|
# Change these as appropriate
|
17
22
|
s.name = "gem-this"
|
18
|
-
s.version = "0.
|
23
|
+
s.version = "0.3.0"
|
19
24
|
s.summary = "Make existing code into a gem, without any fuss."
|
20
25
|
s.author = "James Adam"
|
21
26
|
s.email = "james@lazyatom.com"
|
@@ -29,28 +34,30 @@ spec = Gem::Specification.new do |s|
|
|
29
34
|
s.files = %w(Rakefile Readme.markdown Rakefile.erb) + Dir.glob("{bin,lib}/**/*")
|
30
35
|
s.executables = FileList["bin/**"].map { |f| File.basename(f) }
|
31
36
|
s.require_paths = ["bin", "lib"]
|
32
|
-
|
37
|
+
|
33
38
|
# If you want to depend on other gems, add them here, along with any
|
34
39
|
# relevant versions
|
35
40
|
# s.add_dependency("some_other_gem", "~> 0.1.0")
|
36
|
-
|
41
|
+
|
37
42
|
# If your tests use any gems, include them here
|
38
|
-
|
43
|
+
s.add_development_dependency("shoulda")
|
44
|
+
s.add_development_dependency("rspec")
|
45
|
+
s.add_development_dependency("cucumber")
|
39
46
|
|
40
47
|
# If you want to publish automatically to rubyforge, you'll may need
|
41
48
|
# to tweak this, and the publishing task below too.
|
42
49
|
s.rubyforge_project = "gem-this"
|
43
|
-
|
50
|
+
|
44
51
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.3")
|
45
52
|
end
|
46
53
|
|
47
|
-
# This task actually builds the gem. We also regenerate a static
|
54
|
+
# This task actually builds the gem. We also regenerate a static
|
48
55
|
# .gemspec file, which is useful if something (i.e. GitHub) will
|
49
56
|
# be automatically building a gem for this project. If you're not
|
50
57
|
# using GitHub, edit as appropriate.
|
51
58
|
Rake::GemPackageTask.new(spec) do |pkg|
|
52
59
|
pkg.gem_spec = spec
|
53
|
-
|
60
|
+
|
54
61
|
# Generate the gemspec file for github.
|
55
62
|
file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
|
56
63
|
File.open(file, "w") {|f| f << spec.to_ruby }
|
@@ -68,7 +75,7 @@ task :clean => [:clobber_rdoc, :clobber_package] do
|
|
68
75
|
rm "#{spec.name}.gemspec"
|
69
76
|
end
|
70
77
|
|
71
|
-
# If you want to publish to RubyForge automatically, here's a simple
|
78
|
+
# If you want to publish to RubyForge automatically, here's a simple
|
72
79
|
# task to help do that. If you don't, just get rid of this.
|
73
80
|
# Be sure to set up your Rubyforge account details with the Rubyforge
|
74
81
|
# gem; you'll need to run `rubyforge setup` and `rubyforge config` at
|
@@ -76,10 +83,10 @@ end
|
|
76
83
|
begin
|
77
84
|
require "rake/contrib/sshpublisher"
|
78
85
|
namespace :rubyforge do
|
79
|
-
|
86
|
+
|
80
87
|
desc "Release gem and RDoc documentation to RubyForge"
|
81
88
|
task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
|
82
|
-
|
89
|
+
|
83
90
|
namespace :release do
|
84
91
|
desc "Release a new version of this gem"
|
85
92
|
task :gem => [:package] do
|
@@ -92,17 +99,17 @@ begin
|
|
92
99
|
puts "Publishing #{spec.name}-#{spec.version.to_s} to Rubyforge..."
|
93
100
|
rubyforge.add_release(spec.rubyforge_project, spec.name, spec.version.to_s, path_to_gem)
|
94
101
|
end
|
95
|
-
|
102
|
+
|
96
103
|
desc "Publish RDoc to RubyForge."
|
97
104
|
task :docs => [:rdoc] do
|
98
105
|
config = YAML.load(
|
99
106
|
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
100
107
|
)
|
101
|
-
|
108
|
+
|
102
109
|
host = "#{config['username']}@rubyforge.org"
|
103
110
|
remote_dir = "/var/www/gforge-projects/gem-this/" # Should be the same as the rubyforge project name
|
104
111
|
local_dir = 'rdoc'
|
105
|
-
|
112
|
+
|
106
113
|
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
107
114
|
end
|
108
115
|
end
|
data/Rakefile.erb
CHANGED
@@ -3,8 +3,6 @@ require "rake/gempackagetask"
|
|
3
3
|
require "rake/rdoctask"
|
4
4
|
|
5
5
|
<% if using_rspec? %>
|
6
|
-
task :default => :spec
|
7
|
-
|
8
6
|
require "spec"
|
9
7
|
require "spec/rake/spectask"
|
10
8
|
Spec::Rake::SpecTask.new do |t|
|
@@ -12,18 +10,28 @@ Spec::Rake::SpecTask.new do |t|
|
|
12
10
|
t.libs = ["spec"]
|
13
11
|
end
|
14
12
|
<% elsif using_test_unit? %>
|
15
|
-
task :default => :test
|
16
|
-
|
17
13
|
require "rake/testtask"
|
18
14
|
Rake::TestTask.new do |t|
|
19
15
|
t.libs << "test"
|
20
16
|
t.test_files = FileList["test/**/*_test.rb"]
|
21
17
|
t.verbose = true
|
22
18
|
end
|
23
|
-
<%
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<% if using_cucumber? %>
|
22
|
+
require 'cucumber'
|
23
|
+
require 'cucumber/rake/task'
|
24
|
+
Cucumber::Rake::Task.new('features') do |t|
|
25
|
+
t.cucumber_opts = %w{--format pretty}
|
26
|
+
end
|
27
|
+
<% end %>
|
28
|
+
|
29
|
+
<% if default_tasks.empty? %>
|
24
30
|
task :default => :package do
|
25
31
|
puts "Don't forget to write some tests!"
|
26
32
|
end
|
33
|
+
<% else %>
|
34
|
+
task :default => <%= default_tasks.inspect %>
|
27
35
|
<% end %>
|
28
36
|
|
29
37
|
# This builds the actual gem. For details of what all these options
|
@@ -32,7 +40,7 @@ end
|
|
32
40
|
# http://rubygems.org/read/chapter/20
|
33
41
|
#
|
34
42
|
spec = Gem::Specification.new do |s|
|
35
|
-
|
43
|
+
|
36
44
|
# Change these as appropriate
|
37
45
|
s.name = "<%= name %>"
|
38
46
|
s.version = "0.1.0"
|
@@ -47,7 +55,7 @@ spec = Gem::Specification.new do |s|
|
|
47
55
|
s.rdoc_options = %w(--main <%= readme %>)
|
48
56
|
|
49
57
|
# Add any extra files to include in the gem
|
50
|
-
<% else %>
|
58
|
+
<% else %>
|
51
59
|
# You should probably have a README of some kind. Change the filename
|
52
60
|
# as appropriate
|
53
61
|
# s.extra_rdoc_files = %w(README)
|
@@ -55,21 +63,34 @@ spec = Gem::Specification.new do |s|
|
|
55
63
|
|
56
64
|
# Add any extra files to include in the gem (like your README)
|
57
65
|
<% end %>
|
58
|
-
s.files = %w(<%= files_in_root %>) + Dir.glob("{<%=
|
66
|
+
s.files = %w(<%= files_in_root %>) + Dir.glob("{<%= dirs_to_include_glob %>}")
|
59
67
|
<% if has_executables? %>
|
60
68
|
s.executables = FileList["bin/**"].map { |f| File.basename(f) }
|
61
|
-
<% end %>
|
69
|
+
<% end %>
|
70
|
+
<% if has_lib_directory? %>
|
62
71
|
s.require_paths = ["lib"]
|
63
|
-
|
72
|
+
<% else %>
|
73
|
+
|
74
|
+
# You need to put your code in a directory which can then be added to
|
75
|
+
# the $LOAD_PATH by rubygems. Typically this is lib, but you don't seem
|
76
|
+
# to have that directory. You'll need to set the line below to whatever
|
77
|
+
# directory your code is in. Rubygems is going to assume lib if you leave
|
78
|
+
# this blank.
|
79
|
+
#
|
80
|
+
# s.require_paths = ["lib"]
|
81
|
+
<% end %>
|
82
|
+
|
64
83
|
# If you want to depend on other gems, add them here, along with any
|
65
84
|
# relevant versions
|
66
85
|
# s.add_dependency("some_other_gem", "~> 0.1.0")
|
67
|
-
|
68
|
-
<% if using_rspec? %>
|
69
|
-
s.add_development_dependency("rspec") # add any other gems for testing/development
|
70
|
-
<% else %>
|
86
|
+
|
71
87
|
# If your tests use any gems, include them here
|
72
|
-
|
88
|
+
<% if development_dependencies.any? %>
|
89
|
+
<% development_dependencies.each do |dependency| %>
|
90
|
+
s.add_development_dependency("<%= dependency %>")
|
91
|
+
<% end %>
|
92
|
+
<% else %>
|
93
|
+
# s.add_development_dependency("mocha") # for example
|
73
94
|
<% end %>
|
74
95
|
|
75
96
|
# If you want to publish automatically to rubyforge, you'll may need
|
@@ -77,13 +98,13 @@ spec = Gem::Specification.new do |s|
|
|
77
98
|
s.rubyforge_project = "<%= name %>"
|
78
99
|
end
|
79
100
|
|
80
|
-
# This task actually builds the gem. We also regenerate a static
|
101
|
+
# This task actually builds the gem. We also regenerate a static
|
81
102
|
# .gemspec file, which is useful if something (i.e. GitHub) will
|
82
103
|
# be automatically building a gem for this project. If you're not
|
83
104
|
# using GitHub, edit as appropriate.
|
84
105
|
Rake::GemPackageTask.new(spec) do |pkg|
|
85
106
|
pkg.gem_spec = spec
|
86
|
-
|
107
|
+
|
87
108
|
# Generate the gemspec file for github.
|
88
109
|
file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
|
89
110
|
File.open(file, "w") {|f| f << spec.to_ruby }
|
@@ -101,7 +122,7 @@ task :clean => [:clobber_rdoc, :clobber_package] do
|
|
101
122
|
rm "#{spec.name}.gemspec"
|
102
123
|
end
|
103
124
|
|
104
|
-
# If you want to publish to RubyForge automatically, here's a simple
|
125
|
+
# If you want to publish to RubyForge automatically, here's a simple
|
105
126
|
# task to help do that. If you don't, just get rid of this.
|
106
127
|
# Be sure to set up your Rubyforge account details with the Rubyforge
|
107
128
|
# gem; you'll need to run `rubyforge setup` and `rubyforge config` at
|
@@ -109,10 +130,10 @@ end
|
|
109
130
|
begin
|
110
131
|
require "rake/contrib/sshpublisher"
|
111
132
|
namespace :rubyforge do
|
112
|
-
|
133
|
+
|
113
134
|
desc "Release gem and RDoc documentation to RubyForge"
|
114
135
|
task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
|
115
|
-
|
136
|
+
|
116
137
|
namespace :release do
|
117
138
|
desc "Release a new version of this gem"
|
118
139
|
task :gem => [:package] do
|
@@ -125,21 +146,21 @@ begin
|
|
125
146
|
puts "Publishing #{spec.name}-#{spec.version.to_s} to Rubyforge..."
|
126
147
|
rubyforge.add_release(spec.rubyforge_project, spec.name, spec.version.to_s, path_to_gem)
|
127
148
|
end
|
128
|
-
|
149
|
+
|
129
150
|
desc "Publish RDoc to RubyForge."
|
130
151
|
task :docs => [:rdoc] do
|
131
152
|
config = YAML.load(
|
132
153
|
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
133
154
|
)
|
134
|
-
|
155
|
+
|
135
156
|
host = "#{config['username']}@rubyforge.org"
|
136
157
|
remote_dir = "/var/www/gforge-projects/<%= name %>/" # Should be the same as the rubyforge project name
|
137
158
|
local_dir = 'rdoc'
|
138
|
-
|
159
|
+
|
139
160
|
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
140
161
|
end
|
141
162
|
end
|
142
163
|
end
|
143
164
|
rescue LoadError
|
144
165
|
puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
|
145
|
-
end
|
166
|
+
end
|
data/bin/gem-this
CHANGED
data/lib/gem_this.rb
CHANGED
@@ -4,14 +4,16 @@ require 'etc'
|
|
4
4
|
class GemThis
|
5
5
|
SUMMARY = "Creates a Rakefile suitable for turning the current project into a gem."
|
6
6
|
DEBUG_MESSAGE = "debug, only prints out the generated Rakefile."
|
7
|
-
|
7
|
+
|
8
8
|
attr_reader :name, :debug
|
9
|
-
|
10
|
-
def initialize(name,
|
9
|
+
|
10
|
+
def initialize(name, options={})
|
11
11
|
@name = name
|
12
|
-
|
12
|
+
options = {:default => false, :silent => false}.update(options)
|
13
|
+
@debug = options[:debug]
|
14
|
+
@silent = options[:silent]
|
13
15
|
end
|
14
|
-
|
16
|
+
|
15
17
|
def create_rakefile
|
16
18
|
template = ERB.new File.read(File.join(File.dirname(__FILE__), '..', 'Rakefile.erb')), nil, '<>'
|
17
19
|
rakefile = template.result(binding)
|
@@ -20,18 +22,26 @@ class GemThis
|
|
20
22
|
puts rakefile
|
21
23
|
else
|
22
24
|
if File.exist?('Rakefile')
|
23
|
-
|
25
|
+
log "Appended to existing Rakefile"
|
24
26
|
File.open('Rakefile', 'a') { |f| 2.times { f.puts }; f.write rakefile }
|
25
27
|
else
|
26
|
-
|
28
|
+
log "Writing new Rakefile"
|
27
29
|
File.open('Rakefile', 'w') { |f| f.write rakefile }
|
28
30
|
end
|
29
31
|
add_to_gitignore if using_git?
|
30
32
|
end
|
33
|
+
unless has_lib_directory?
|
34
|
+
log "You don't see to have a lib directory - please edit the Rakefile to set where your code is."
|
35
|
+
false
|
36
|
+
end
|
31
37
|
end
|
32
|
-
|
38
|
+
|
33
39
|
private
|
34
|
-
|
40
|
+
|
41
|
+
def log(message)
|
42
|
+
puts(message) unless @silent
|
43
|
+
end
|
44
|
+
|
35
45
|
def author_name
|
36
46
|
Etc.getpwnam(ENV['USER']).gecos rescue ENV['USER'] # for Windows
|
37
47
|
end
|
@@ -48,6 +58,10 @@ class GemThis
|
|
48
58
|
File.directory?('spec')
|
49
59
|
end
|
50
60
|
|
61
|
+
def using_cucumber?
|
62
|
+
File.directory?('features')
|
63
|
+
end
|
64
|
+
|
51
65
|
def using_test_unit?
|
52
66
|
File.directory?('test')
|
53
67
|
end
|
@@ -56,8 +70,17 @@ class GemThis
|
|
56
70
|
File.directory?('bin')
|
57
71
|
end
|
58
72
|
|
59
|
-
def
|
60
|
-
|
73
|
+
def has_lib_directory?
|
74
|
+
File.directory?("lib")
|
75
|
+
end
|
76
|
+
|
77
|
+
def dirs_to_include_glob
|
78
|
+
dirs = %w(bin test spec lib).select { |d| File.directory?(d) }
|
79
|
+
if dirs.any?
|
80
|
+
dirs.join(",") + "/**/*"
|
81
|
+
else
|
82
|
+
"**/*"
|
83
|
+
end
|
61
84
|
end
|
62
85
|
|
63
86
|
def readme
|
@@ -72,10 +95,25 @@ class GemThis
|
|
72
95
|
File.exist?(".git")
|
73
96
|
end
|
74
97
|
|
98
|
+
def default_tasks
|
99
|
+
tasks = []
|
100
|
+
tasks << "test" if using_test_unit?
|
101
|
+
tasks << "spec" if using_rspec?
|
102
|
+
tasks << "features" if using_cucumber?
|
103
|
+
tasks
|
104
|
+
end
|
105
|
+
|
106
|
+
def development_dependencies
|
107
|
+
deps = []
|
108
|
+
deps << "rspec" if using_rspec?
|
109
|
+
deps << "cucumber" if using_cucumber?
|
110
|
+
deps
|
111
|
+
end
|
112
|
+
|
75
113
|
def add_to_gitignore
|
76
114
|
return unless File.exist?(".gitignore")
|
77
115
|
ignores = File.readlines(".gitignore")
|
78
116
|
ignores += ["pkg", "rdoc"]
|
79
117
|
File.open(".gitignore", "w") { |f| f.write ignores.map { |l| l.strip }.uniq.join("\n") }
|
80
118
|
end
|
81
|
-
end
|
119
|
+
end
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -15,7 +15,7 @@ class Gem::Commands::ThisCommand < Gem::Command
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def execute
|
18
|
-
GemThis.new(options[:args].first || File.basename(Dir.pwd), options
|
18
|
+
GemThis.new(options[:args].first || File.basename(Dir.pwd), options).create_rakefile
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem-this
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Adam
|
@@ -9,10 +9,39 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-22 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: shoulda
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: cucumber
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
16
45
|
description:
|
17
46
|
email: james@lazyatom.com
|
18
47
|
executables:
|
@@ -53,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
82
|
requirements: []
|
54
83
|
|
55
84
|
rubyforge_project: gem-this
|
56
|
-
rubygems_version: 1.3.
|
85
|
+
rubygems_version: 1.3.5
|
57
86
|
signing_key:
|
58
87
|
specification_version: 3
|
59
88
|
summary: Make existing code into a gem, without any fuss.
|