echoe 2 → 2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/CHANGELOG +8 -6
  2. data/README +32 -9
  3. data/Rakefile +6 -6
  4. data/lib/echoe.rb +73 -49
  5. data/test/test_echoe.rb +5 -9
  6. metadata +4 -4
data/CHANGELOG CHANGED
@@ -1,12 +1,14 @@
1
1
 
2
- v2. support documentation hosts other than rubyforge, switch to Snax-style gem versioning; auto-load CHANGELOG contents; remove bin/echoe which doesn't work anyway
2
+ v2.1. Adjust default RDoc include pattern; extra_deps now dependencies; rubyforge_name now project; support install messages; manifest instead of build_manifest.
3
3
 
4
- v1.4. auto-detect readme file; make rdoc default pattern compatible with manifest generator; fix publish_docs task
4
+ v2. Support documentation hosts other than rubyforge; switch to Snax-style gem versioning; auto-load CHANGELOG contents; remove bin/echoe which doesn't work anyway. Incompatible changes.
5
5
 
6
- v1.3. avoid rubyforge gem multi-activation conflict
6
+ v1.4. Auto-detect readme file; make rdoc default pattern compatible with manifest generator; fix publish_docs task.
7
7
 
8
- v1.2. build_manifest Rake task
8
+ v1.3. Avoid rubyforge gem multi-activation conflict.
9
9
 
10
- v1.1. sane error messages on releasing new or duplicate gems; allow Manifest to not end in .txt
10
+ v1.2. build_manifest Rake task.
11
11
 
12
- v1.0.0. fork from Hoe
12
+ v1.1. Sane error messages on releasing new or duplicate gems; allow Manifest to not end in .txt.
13
+
14
+ v1.0.0. Fork from Hoe.
data/README CHANGED
@@ -7,9 +7,22 @@ Echoe is a simple tool for working with Rubygems. It generates Rake tasks for do
7
7
 
8
8
  Copyright 2007 Cloudburst, LLC. See included LICENSE file. Portions copyright 2006 Ryan Davis, Zen Spider Software, and used with permission. See included MIT-LICENSE file.
9
9
 
10
- == Usage
10
+ == Features
11
11
 
12
- First, organize your gem according to the usual structure:
12
+ * simple configuration
13
+ * comprehensive gem deployment
14
+ * automatic changeset parsing
15
+ * documentation upload to any host
16
+
17
+ = Usage
18
+
19
+ == Installation
20
+
21
+ sudo gem install echoe
22
+
23
+ == Project configuration
24
+
25
+ Organize your gem according to the usual structure:
13
26
 
14
27
  lib/
15
28
  bin/
@@ -31,19 +44,25 @@ This way Echoe can parse the latest version and changeset message automatically.
31
44
 
32
45
  Your <tt>Rakefile</tt> needs the following minimal contents:
33
46
 
34
- require "rubygems"
35
- require "echoe"
36
- Echoe.new("gem_name")
47
+ require 'rubygems'
48
+ require 'echoe'
49
+ Echoe.new('gem_name')
37
50
 
38
51
  More advanced configuration is described in the Echoe class.
39
52
 
40
53
  == Deploying your gem
41
54
 
42
- Now, to build your documentation and deploy the gem:
55
+ First, run <tt>rubyforge setup</tt> and <tt>rubyforge config</tt> if you haven't already. Make sure your Rubyforge password is correctly set.
43
56
 
44
- rake build_manifest
45
- rake publish_docs
57
+ Now, to deploy the gem and documentation:
58
+
59
+ rake manifest
46
60
  rake release
61
+ rake publish_docs
62
+
63
+ Once you've built your manifest, you only need to rebuild it if you add or remove files from the package structure.
64
+
65
+ = Extras
47
66
 
48
67
  == All Rake tasks
49
68
 
@@ -51,7 +70,7 @@ The following tasks are made available to your gem.
51
70
 
52
71
  Packaging:
53
72
 
54
- * <tt>build_manifest</tt> - Build a Manifest list.
73
+ * <tt>manifest</tt> - Build a manifest list.
55
74
  * <tt>docs</tt> - Build the documentation.
56
75
  * <tt>package</tt> - Build all the packages.
57
76
 
@@ -72,3 +91,7 @@ Cleaning:
72
91
  * <tt>redocs</tt> - Force a rebuild of the Rdoc files.
73
92
  * <tt>repackage</tt> - Force a rebuild of the package files.
74
93
 
94
+ == Further resources
95
+
96
+ * http://blog.evanweaver.com/pages/code#echoe
97
+ * http://rubyforge.org/forum/forum.php?forum_id=13986
data/Rakefile CHANGED
@@ -2,11 +2,11 @@
2
2
  require 'lib/echoe'
3
3
 
4
4
  Echoe.new('echoe') do |p|
5
- p.rubyforge_name = "fauna"
6
- p.author = "Evan Weaver"
7
- p.summary = "Echoe is a simple packaging tool for Ruby gems."
8
- p.url = "http://blog.evanweaver.com/pages/code#echoe"
9
- p.docs_host = "blog.evanweaver.com:~/www/snax/public/files/doc/"
10
- p.extra_deps = ['rake', 'rubyforge >= 0.4.0', 'highline']
5
+ p.project = 'fauna'
6
+ p.author = 'Evan Weaver'
7
+ p.summary = 'A tool for packaging Ruby gems.'
8
+ p.url = 'http://blog.evanweaver.com/pages/code#echoe'
9
+ p.docs_host = 'blog.evanweaver.com:~/www/snax/public/files/doc/'
10
+ p.dependencies = ['rake', 'rubyforge >= 0.4.0', 'highline']
11
11
  end
12
12
 
@@ -1,6 +1,7 @@
1
1
 
2
2
  require 'rubygems'
3
3
  require 'rake'
4
+ require 'rake/clean'
4
5
  require 'rake/contrib/sshpublisher'
5
6
  require 'rake/gempackagetask'
6
7
  require 'rake/rdoctask'
@@ -17,15 +18,15 @@ Echoe includes some optional accessors for more advanced gem configuration.
17
18
  For example, Echoe's own <tt>Rakefile</tt> looks like this:
18
19
 
19
20
  Echoe.new('echoe') do |p|
20
- p.rubyforge_name = "fauna"
21
- p.author = "Evan Weaver"
22
- p.summary = "Echoe is a simple tool for packaging Rubygems."
23
- p.url = "http://blog.evanweaver.com/pages/code#echoe"
24
- p.docs_host = "blog.evanweaver.com:~/www/snax/public/files/doc/"
25
- p.extra_deps = ['rake', 'rubyforge >= 0.4.0', 'highline']
21
+ p.project = 'fauna'
22
+ p.author = 'Evan Weaver'
23
+ p.summary = 'A tool for packaging Ruby gems.'
24
+ p.url = 'http://blog.evanweaver.com/pages/code#echoe'
25
+ p.docs_host = 'blog.evanweaver.com:~/www/snax/public/files/doc/'
26
+ p.dependencies = ['rake', 'rubyforge >= 0.4.0', 'highline']
26
27
  end
27
28
 
28
- == Available options
29
+ == Accessor options
29
30
 
30
31
  Descriptive options:
31
32
 
@@ -34,15 +35,16 @@ Descriptive options:
34
35
  * <tt>description</tt> - A more detailed description of the library.
35
36
  * <tt>summary</tt> - A shorter description of the library.
36
37
  * <tt>url</tt> - A url for the library.
38
+ * <tt>install_message</tt> - A message to display after the gem is installed.
37
39
 
38
- Version options:
40
+ Versioning options:
39
41
 
40
42
  * <tt>version</tt> - A string for the version number. Parsed from CHANGELOG otherwise.
41
43
  * <tt>changes</tt> - A string describing the most recent changes. Parsed from CHANGELOG otherwise.
42
44
 
43
45
  Packaging options:
44
46
 
45
- * <tt>extra_deps</tt> - An array of dependencies for this gem, in 'gem_name [= version]' format.
47
+ * <tt>dependencies</tt> - An array of dependencies for this gem, in 'gem_name [= version]' format.
46
48
  * <tt>manifest_name</tt> - The name of the manifest file (defaults to <tt>Manifest</tt>).
47
49
  * <tt>need_tar</tt> - Whether to generate a <tt>.tgz</tt> package (default <tt>false</tt>).
48
50
  * <tt>need_tar_gz</tt> - Whether to generate a <tt>.tar.gz</tt> package (default <tt>true</tt>).
@@ -50,7 +52,7 @@ Packaging options:
50
52
 
51
53
  Publishing options:
52
54
 
53
- * <tt>rubyforge_name</tt> - The name of the Rubyforge project to upload to (defaults to the name of the gem).
55
+ * <tt>project</tt> - The name of the Rubyforge project to upload to (defaults to the name of the gem).
54
56
  * <tt>docs_host</tt> - A host and path to publish the documentation to (defaults to the Rubyforge project).
55
57
 
56
58
  Documentation options:
@@ -78,21 +80,24 @@ class Echoe
78
80
  FILTER = ENV['FILTER'] # for tests (eg FILTER="-n test_blah")
79
81
 
80
82
  # user-configurable
81
- attr_accessor :author, :changes, :clean_pattern, :description, :email, :extra_deps, :name, :need_tar, :need_tar_gz, :need_zip, :rdoc_pattern, :rubyforge_name, :summary, :test_patterns, :url, :version, :docs_host, :rdoc_template, :manifest_name
83
+ attr_accessor :author, :changes, :clean_pattern, :description, :email, :dependencies, :need_tar, :need_tar_gz, :need_zip, :rdoc_pattern, :project, :summary, :test_pattern, :url, :version, :docs_host, :rdoc_template, :manifest_name, :install_message
82
84
 
83
85
  # best left alone
84
- attr_accessor :lib_files, :test_files, :bin_files, :spec
86
+ attr_accessor :name, :lib_files, :test_files, :bin_files, :spec, :rdoc_options, :rubyforge_name
87
+
88
+ # legacy
89
+ attr_accessor :extra_deps
85
90
 
86
91
  def initialize(name, version = nil)
87
92
  # Defaults
88
93
 
89
94
  self.name = name
90
- self.rubyforge_name = name.downcase
95
+ self.project = name.downcase
91
96
  self.url = ""
92
97
  self.author = ""
93
98
  self.email = ""
94
99
  self.clean_pattern = %w(diff diff.txt email.txt ri *.gem **/*~)
95
- self.test_patterns = ['test/**/test_*.rb']
100
+ self.test_pattern = ['test/**/test_*.rb']
96
101
 
97
102
  self.version = if version
98
103
  version
@@ -110,8 +115,10 @@ class Echoe
110
115
 
111
116
  self.description = ""
112
117
  self.summary = ""
113
- self.rdoc_pattern = /^(lib|bin|tasks)|README|CHANGELOG|LICENSE|txt$/
114
- self.extra_deps = []
118
+ self.install_message = nil
119
+ self.rdoc_pattern = /^(lib|bin|tasks)|^README|^CHANGELOG|^TODO|^LICENSE$/
120
+ self.rdoc_options = ['--line-numbers', '--inline-source']
121
+ self.dependencies = []
115
122
  self.manifest_name = "Manifest"
116
123
 
117
124
  self.need_tar = false
@@ -119,21 +126,22 @@ class Echoe
119
126
  self.need_zip = false
120
127
 
121
128
  yield self if block_given?
129
+
130
+ # set some post-defaults
131
+ self.description = summary if description.empty?
132
+ self.summary = description if summary.empty?
133
+
134
+ # legacy compatibility
135
+ self.dependencies = extra_deps if extra_deps and dependencies.empty?
136
+ self.project = rubyforge_name if rubyforge_name
122
137
 
123
138
  define_tasks
124
139
  end
125
140
 
126
141
  def define_tasks
127
- task :default => :test
128
-
129
- desc 'Run the test suite'
130
- task :test do
131
- run_tests
132
- end
133
-
134
- ############################################################
135
- # Packaging and Installing
136
142
 
143
+ ### Packaging and Installing
144
+
137
145
  self.spec = Gem::Specification.new do |s|
138
146
  s.name = name
139
147
  s.version = version
@@ -141,11 +149,12 @@ class Echoe
141
149
  s.author = Array(author).join(", ")
142
150
  s.email = email
143
151
  s.homepage = url
144
- s.rubyforge_project = rubyforge_name
152
+ s.rubyforge_project = project
153
+ s.post_install_message = install_message if install_message
145
154
 
146
155
  s.description = description
147
156
 
148
- extra_deps.each do |dep|
157
+ dependencies.each do |dep|
149
158
  dep = dep.split(" ") if dep.is_a? String
150
159
  s.add_dependency(*dep)
151
160
  end
@@ -165,7 +174,7 @@ class Echoe
165
174
  if File.exist? "test/test_all.rb"
166
175
  s.test_file = "test/test_all.rb"
167
176
  else
168
- s.test_files = Dir[*test_patterns]
177
+ s.test_files = Dir[*test_pattern]
169
178
  end
170
179
 
171
180
  end
@@ -219,20 +228,23 @@ class Echoe
219
228
  self.version = self.version.ljust(3)
220
229
 
221
230
  begin
222
- rf.add_release rubyforge_name, name, version, *files
231
+ rf.add_release project, name, version, *files
223
232
  rescue NoMethodError
224
233
  end
225
234
  end
226
235
 
227
236
  end
237
+
238
+ ### RDoc
228
239
 
229
240
  Rake::RDocTask.new(:docs) do |rd|
230
241
  rd.main = Dir['*'].detect {|f| f =~ /^readme/i}
231
- rd.options << '--line-numbers' << '--inline-source'
242
+ rd.options += Array(rdoc_options)
243
+
232
244
  rd.rdoc_dir = 'doc'
233
245
 
234
246
  files = (spec.files.grep(rdoc_pattern) - [manifest_name]).uniq
235
- rd.rdoc_files.push *files
247
+ rd.rdoc_files.push(*files)
236
248
 
237
249
  if rdoc_template
238
250
  rd.template = rdoc_template
@@ -243,20 +255,22 @@ class Echoe
243
255
  title = name.downcase == name ? name.capitalize : name
244
256
  rd.options << "-t #{title}"
245
257
  end
258
+
259
+ task :doc => [:redocs]
246
260
 
247
261
  desc "Publish documentation to #{docs_host ? "'#{docs_host}'" : "rubyforge"}"
248
262
  task :publish_docs => [:clean, :docs] do
249
263
 
250
264
  local_dir = 'doc'
251
- remote_dir_name = rubyforge_name
252
- remote_dir_name += "/#{name}" if rubyforge_name != name
265
+ remote_dir_name = project
266
+ remote_dir_name += "/#{name}" if project != name
253
267
 
254
268
  unless docs_host
255
269
  config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
256
270
  pub = Rake::SshDirPublisher.new "#{config["username"]}@rubyforge.org",
257
271
  "/var/www/gforge-projects/#{remote_dir_name}",
258
272
  local_dir
259
- if rubyforge_name != name then
273
+ if project != name then
260
274
  def pub.upload
261
275
  begin
262
276
  super
@@ -275,8 +289,8 @@ class Echoe
275
289
  sh("scp -qr #{local_dir} #{host}:#{dir}/#{remote_dir_name}")
276
290
  end
277
291
  end
278
-
279
- task :doc => [:redocs]
292
+
293
+ ### Clean
280
294
 
281
295
  desc 'Delete the generated documentation and packages'
282
296
  task :clean => [ :clobber_docs, :clobber_package ] do
@@ -285,13 +299,15 @@ class Echoe
285
299
  rm_rf files unless files.empty?
286
300
  end
287
301
  end
302
+
303
+ ### Manifest
288
304
 
289
305
  desc "Build a Manifest list"
290
- task :build_manifest do
306
+ task :manifest do
291
307
  files = []
292
308
  Find.find '.' do |file|
293
309
  file = file[2..-1]
294
- unless !file or file =~ /^(pkg|doc)|\.svn|CVS|\.bzr/ or File.directory? file
310
+ unless !file or file =~ /^(pkg|doc)|\.svn|CVS|\.bzr|\.DS/ or File.directory? file
295
311
  files << file
296
312
  end
297
313
  end
@@ -299,18 +315,26 @@ class Echoe
299
315
  File.open(manifest_name, 'w').puts files
300
316
  puts files
301
317
  end
318
+
319
+ task :build_manifest => [:manifest]
320
+
321
+ ### Tests
322
+
323
+ # XXX unreadable
324
+ desc 'Run the test suite'
325
+ task :test do
326
+ ruby(if File.exist? 'test/test_all.rb'
327
+ "#{RUBY_FLAGS} test/test_all.rb #{FILTER}"
328
+ else
329
+ tests = test_pattern.map { |g| Dir.glob(g) }.flatten << 'test/unit'
330
+ tests.map! {|f| %Q(require "#{f}")}
331
+ "#{RUBY_FLAGS} -e '#{tests.join("; ")}' #{FILTER}"
332
+ end)
333
+ end
334
+
335
+ task :default => :test
336
+
302
337
  end
303
-
304
- def run_tests # :nodoc:
305
- ruby(if File.exist? 'test/test_all.rb'
306
- "#{RUBY_FLAGS} test/test_all.rb #{FILTER}"
307
- else
308
- tests = test_patterns.map { |g| Dir.glob(g) }.flatten << 'test/unit'
309
- tests.map! {|f| %Q(require "#{f}")}
310
- "#{RUBY_FLAGS} -e '#{tests.join("; ")}' #{FILTER}"
311
- end)
312
- end
313
-
314
338
  end
315
339
 
316
340
  class ::Rake::SshDirPublisher # :nodoc:
@@ -9,18 +9,14 @@ class TestEchoe < Test::Unit::TestCase
9
9
  Rake.application.clear
10
10
  end
11
11
 
12
- ##
13
- # Yes, these tests suck, but it is damn hard to test this since
14
- # everything is forked out.
15
-
16
12
  def test_basics
17
- boring = %w(clobber clobber_docs clobber_package doc doc/index.html pkg pkg/blah-1.0.0 pkg/blah-1.0.0.gem pkg/blah-1.0.0.tgz redocs repackage)
18
- expected = %w(audit announce check_manifest clean debug_gem default docs email gem install install_gem multi package post_news publish_docs release ridocs test test_deps uninstall)
13
+ boring = %w(clobber clobber_docs clobber_package doc doc/index.html pkg pkg/blah-1.0.0 pkg/blah-1.0.0.gem pkg/blah-1.0.0.tar.gz redocs repackage default)
14
+ expected = %w(clean clobber clobber_docs clobber_package docs gem install manifest package publish_docs redocs release repackage test uninstall build_manifest)
19
15
  expected += boring
20
16
 
21
17
  Echoe.new('blah', '1.0.0')
22
- tasks = Rake.application.tasks.map { |t| t.name }.sort
23
-
24
- assert_equal expected.sort, tasks
18
+ tasks = Rake.application.tasks.map { |t| t.name }
19
+ assert((expected - tasks).empty?)
20
+ assert((tasks - expected).empty?)
25
21
  end
26
22
  end
metadata CHANGED
@@ -3,15 +3,15 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: echoe
5
5
  version: !ruby/object:Gem::Version
6
- version: "2"
7
- date: 2007-08-03 00:00:00 -04:00
8
- summary: Echoe is a simple packaging tool for Ruby gems.
6
+ version: "2.1"
7
+ date: 2007-08-06 00:00:00 -04:00
8
+ summary: A tool for packaging Ruby gems.
9
9
  require_paths:
10
10
  - lib
11
11
  email: ""
12
12
  homepage: http://blog.evanweaver.com/pages/code#echoe
13
13
  rubyforge_project: fauna
14
- description: ""
14
+ description: A tool for packaging Ruby gems.
15
15
  autorequire:
16
16
  default_executable:
17
17
  bindir: bin