echoe 2 → 2.1

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.
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