reap 4.3.2 → 4.3.3

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 (52) hide show
  1. data/ANN +6 -1
  2. data/ProjectInfo +9 -7
  3. data/README +44 -13
  4. data/data/reap/setup-3.4.1/COPYING +515 -0
  5. data/data/reap/setup-3.4.1/ChangeLog +732 -0
  6. data/data/reap/setup-3.4.1/Makefile +56 -0
  7. data/data/reap/setup-3.4.1/NEWS.en +155 -0
  8. data/data/reap/setup-3.4.1/NEWS.ja +152 -0
  9. data/data/reap/setup-3.4.1/README.en +30 -0
  10. data/data/reap/setup-3.4.1/README.ja +34 -0
  11. data/data/reap/setup-3.4.1/TODO +14 -0
  12. data/data/reap/setup-3.4.1/Template.README.en +41 -0
  13. data/data/reap/setup-3.4.1/Template.README.ja +46 -0
  14. data/data/reap/setup-3.4.1/Usage_en.txt +231 -0
  15. data/data/reap/setup-3.4.1/Usage_ja.txt +250 -0
  16. data/data/reap/setup-3.4.1/doc.en/hookapi.html +91 -0
  17. data/data/reap/setup-3.4.1/doc.en/index.html +28 -0
  18. data/data/reap/setup-3.4.1/doc.en/metaconfapi.html +79 -0
  19. data/data/reap/setup-3.4.1/doc.en/news.html +189 -0
  20. data/data/reap/setup-3.4.1/doc.en/usage.html +297 -0
  21. data/data/reap/setup-3.4.1/doc.ja/hookapi.html +84 -0
  22. data/data/reap/setup-3.4.1/doc.ja/index.html +28 -0
  23. data/data/reap/setup-3.4.1/doc.ja/metaconfapi.html +80 -0
  24. data/data/reap/setup-3.4.1/doc.ja/news.html +186 -0
  25. data/data/reap/setup-3.4.1/doc.ja/usage.html +319 -0
  26. data/data/reap/setup-3.4.1/sample/add-task.rb +15 -0
  27. data/data/reap/setup-3.4.1/setup.rb +1585 -0
  28. data/data/reap/setup-3.4.1/test/test_installer.rb +136 -0
  29. data/lib/reap/{lint.rb → bin/lint.rb} +0 -0
  30. data/lib/reap/bin/reap.rb +3 -2
  31. data/lib/reap/projectinfo.rb +4 -0
  32. data/lib/reap/task.rb +84 -74
  33. data/lib/reap/task/announce.rb +137 -91
  34. data/lib/reap/task/fileperm.rb +26 -9
  35. data/lib/reap/task/info.rb +19 -3
  36. data/lib/reap/task/install.rb +9 -7
  37. data/lib/reap/task/noop.rb +3 -5
  38. data/lib/reap/task/package.rb +247 -105
  39. data/lib/reap/task/publish.rb +40 -14
  40. data/lib/reap/task/rdoc.rb +53 -27
  41. data/lib/reap/task/release.rb +275 -73
  42. data/lib/reap/task/scaffold.rb +14 -6
  43. data/lib/reap/task/test.rb +67 -48
  44. data/lib/reap/task/testext.rb +38 -11
  45. data/lib/reap/vendor/http-access2.rb +1590 -0
  46. data/lib/reap/vendor/http-access2/cookie.rb +538 -0
  47. data/lib/reap/vendor/http-access2/http.rb +542 -0
  48. data/{lib/reap → note}/interface/interface.rb +0 -0
  49. data/{lib/reap → note}/interface/rubyforge.rb +0 -0
  50. data/note/package.rb.0 +394 -0
  51. metadata +43 -8
  52. data/lib/reap/reap.rb +0 -0
@@ -0,0 +1,136 @@
1
+ require 'setup'
2
+ require 'fileutils'
3
+ require 'stringio'
4
+ require 'test/unit'
5
+
6
+ class DummyConfig
7
+ def initialize(config)
8
+ @config = config
9
+ end
10
+
11
+ def [](key)
12
+ @config[key]
13
+ end
14
+
15
+ def no_harm?
16
+ false
17
+ end
18
+
19
+ def verbose?
20
+ false
21
+ end
22
+ end
23
+
24
+ class TestInstaller < Test::Unit::TestCase
25
+
26
+ include FileUtils
27
+
28
+ def setup
29
+ rm_rf %w(srcdir objdir)
30
+ mkdir %w(srcdir objdir)
31
+ Dir.chdir 'objdir'
32
+ $stderr, $orig_stderr = StringIO.new, $stderr
33
+ end
34
+
35
+ def teardown
36
+ $stderr = $orig_stderr
37
+ Dir.chdir '..'
38
+ rm_rf %w(srcdir objdir)
39
+ end
40
+
41
+ def setup_installer(config = {})
42
+ @installer = Installer.new(DummyConfig.new(config), '../srcdir', '.')
43
+ end
44
+
45
+ def do_update_shebang_line(id, str)
46
+ create id, str
47
+ @installer.update_shebang_line "../srcdir/#{id}"
48
+ read(id)
49
+ end
50
+
51
+ def create(filename, content)
52
+ File.open("../srcdir/#{filename}", 'wb') {|f|
53
+ f.write content
54
+ }
55
+ end
56
+
57
+ def read(filename)
58
+ path = File.exist?(filename) ? filename : "../srcdir/#{filename}"
59
+ File.open(path, 'rb') {|f|
60
+ return f.read
61
+ }
62
+ end
63
+
64
+ def test_update_shebang_line__never
65
+ setup_installer 'shebang' => 'never', 'rubypath' => 'ERROR'
66
+ assert_equal "#!/usr/local/bin/ruby\nprogram",
67
+ do_update_shebang_line('ruby', "#!/usr/local/bin/ruby\nprogram")
68
+ assert_equal "#! /usr/local/bin/ruby\nprogram",
69
+ do_update_shebang_line('ruby-sp', "#! /usr/local/bin/ruby\nprogram")
70
+ assert_equal "#!/usr/local/bin/ruby -Ke\nprogram",
71
+ do_update_shebang_line('ruby-arg', "#!/usr/local/bin/ruby -Ke\nprogram")
72
+ assert_equal "#!/usr/bin/ruby -n -p\nprogram",
73
+ do_update_shebang_line('ruby-args', "#!/usr/bin/ruby -n -p\nprogram")
74
+ assert_equal "#!/usr/bin/env ruby\nprogram",
75
+ do_update_shebang_line('env-ruby', "#!/usr/bin/env ruby\nprogram")
76
+ assert_equal "#!/usr/bin/env perl\nprogram",
77
+ do_update_shebang_line('env-noruby', "#!/usr/bin/env perl\nprogram")
78
+ assert_equal "#!/bin/sh\nprogram",
79
+ do_update_shebang_line('interp', "#!/bin/sh\nprogram")
80
+ assert_equal "#!/bin/sh -l -r -\nprogram",
81
+ do_update_shebang_line('interp-args', "#!/bin/sh -l -r -\nprogram")
82
+ assert_equal "program",
83
+ do_update_shebang_line('bare', "program")
84
+ assert_equal "\001\002\003\n\004\005\006",
85
+ do_update_shebang_line('binary', "\001\002\003\n\004\005\006")
86
+ end
87
+
88
+ def test_update_shebang_line__all
89
+ setup_installer 'shebang' => 'all', 'rubypath' => 'RUBYPATH'
90
+ assert_equal "#! RUBYPATH\nprogram",
91
+ do_update_shebang_line('ruby', "#!/usr/local/bin/ruby\nprogram")
92
+ assert_equal "#! RUBYPATH\nprogram",
93
+ do_update_shebang_line('ruby-sp', "#! /usr/local/bin/ruby\nprogram")
94
+ assert_equal "#! RUBYPATH -Ke\nprogram",
95
+ do_update_shebang_line('ruby-arg', "#!/usr/local/bin/ruby -Ke\nprogram")
96
+ assert_equal "#! RUBYPATH -n -p\nprogram",
97
+ do_update_shebang_line('ruby-args', "#!/usr/bin/ruby -n -p\nprogram")
98
+ assert_equal "#! RUBYPATH\nprogram",
99
+ do_update_shebang_line('env-ruby', "#!/usr/bin/env ruby\nprogram")
100
+ assert_equal "#! RUBYPATH\nprogram",
101
+ do_update_shebang_line('env-noruby', "#!/usr/bin/env perl\nprogram")
102
+ assert_equal "#! RUBYPATH\nprogram",
103
+ do_update_shebang_line('interp', "#!/bin/sh\nprogram")
104
+ assert_equal "#! RUBYPATH\nprogram", # args removed
105
+ do_update_shebang_line('interp-args', "#!/bin/sh -l -r -\nprogram")
106
+ assert_equal "#! RUBYPATH\nprogram",
107
+ do_update_shebang_line('bare', "program")
108
+ assert_equal "#! RUBYPATH\n\001\002\003\n\004\005\006",
109
+ do_update_shebang_line('binary', "\001\002\003\n\004\005\006")
110
+ end
111
+
112
+ def test_update_shebang_line__ruby
113
+ setup_installer 'shebang' => 'ruby', 'rubypath' => 'RUBYPATH'
114
+ assert_equal "#! RUBYPATH\nprogram",
115
+ do_update_shebang_line('ruby', "#!/usr/local/bin/ruby\nprogram")
116
+ assert_equal "#! RUBYPATH\nprogram",
117
+ do_update_shebang_line('ruby-sp', "#! /usr/local/bin/ruby\nprogram")
118
+ assert_equal "#! RUBYPATH -Ke\nprogram",
119
+ do_update_shebang_line('ruby-arg', "#!/usr/local/bin/ruby -Ke\nprogram")
120
+ assert_equal "#! RUBYPATH -n -p\nprogram",
121
+ do_update_shebang_line('ruby-args', "#!/usr/bin/ruby -n -p\nprogram")
122
+ assert_equal "#! RUBYPATH\nprogram",
123
+ do_update_shebang_line('env-ruby', "#!/usr/bin/env ruby\nprogram")
124
+ assert_equal "#!/usr/bin/env perl\nprogram",
125
+ do_update_shebang_line('env-noruby', "#!/usr/bin/env perl\nprogram")
126
+ assert_equal "#!/bin/sh\nprogram",
127
+ do_update_shebang_line('interp', "#!/bin/sh\nprogram")
128
+ assert_equal "#!/bin/sh -l -r -\nprogram",
129
+ do_update_shebang_line('interp-args', "#!/bin/sh -l -r -\nprogram")
130
+ assert_equal "program",
131
+ do_update_shebang_line('bare', "program")
132
+ assert_equal "\001\002\003\n\004\005\006",
133
+ do_update_shebang_line('binary', "\001\002\003\n\004\005\006")
134
+ end
135
+
136
+ end
File without changes
data/lib/reap/bin/reap.rb CHANGED
@@ -18,8 +18,9 @@ require 'reap/task/package'
18
18
  require 'reap/task/publish'
19
19
  require 'reap/task/info'
20
20
  require 'reap/task/install'
21
- require 'reap/task/noop'
22
- #require 'reap/task/webpublish'
21
+ require 'reap/task/release'
22
+ #require 'reap/task/noop'
23
+
23
24
 
24
25
  Reap.register
25
26
 
@@ -69,6 +69,10 @@ class ProjectInfo
69
69
  # #end
70
70
  # end
71
71
 
72
+ def to_h
73
+ @info
74
+ end
75
+
72
76
  # not using at the moment
73
77
  def validate
74
78
  # required main parameters
data/lib/reap/task.rb CHANGED
@@ -8,7 +8,13 @@ require 'facet/module/basename'
8
8
  require 'facet/module/attr_setter'
9
9
 
10
10
  require 'facet/filelist'
11
+ require 'facet/openobject'
11
12
 
13
+ # _____ _ ___ ___ _
14
+ # |_ _|_ _ __| |__ | _ ) __ _ ___ ___ / __| |__ _ ______
15
+ # | |/ _` (_-< / / | _ \/ _` (_-</ -_) | (__| / _` (_-<_-<
16
+ # |_|\__,_/__/_\_\ |___/\__,_/__/\___| \___|_\__,_/__/__/
17
+ #
12
18
 
13
19
  # Base class for reap tasks.
14
20
  #
@@ -39,6 +45,7 @@ require 'facet/filelist'
39
45
  # TASK: mytask
40
46
  # message: Message text, if any.
41
47
  #
48
+
42
49
  module Reap
43
50
 
44
51
  @registry ||= {}
@@ -87,30 +94,30 @@ module Reap
87
94
 
88
95
  class << self
89
96
 
97
+ def inherited( base )
98
+ Reap.registry[base.task_name] = base
99
+ end
100
+
101
+ def task_name ; basename.downcase ; end
102
+
90
103
  def task_desc( text=nil, &block )
91
- if text
92
- @task_desc = proc { text }
93
- elsif block_given?
94
- @task_desc = block
95
- else
96
- @task_desc.call
97
- end
104
+ return @task_desc = proc { text } if text
105
+ return @task_desc = block if block_given?
106
+ return @task_desc.call
98
107
  end
108
+ #def task_desc ; '(no desciption given)' ; end
99
109
 
100
110
  def task_help( text=nil, &block )
101
- if text
102
- @task_help = proc { text }
103
- elsif block_given?
104
- @task_help = block
105
- else
106
- @task_help.call
107
- end
111
+ return @task_help = proc { text } if text
112
+ return @task_help = block if block_given?
113
+ return @task_help.call
108
114
  end
109
115
 
110
- #def task_desc ; '(no desciption given)' ; end
111
- def task_name ; basename.downcase ; end
116
+ def task_attr( name )
117
+ define_method(name) { @task }
118
+ end
112
119
 
113
- def section_required( val ) ; @section_required = val ;end
120
+ def section_required( val ) ; @section_required = val ; end
114
121
  def section_required? ; @section_required ; end
115
122
 
116
123
  def verify?
@@ -120,62 +127,82 @@ module Reap
120
127
  true
121
128
  end
122
129
 
123
- def inherited( base )
124
- Reap.registry[base.task_name] = base
125
- end
130
+ # def master_attributes ; @master_attributes ||= [] ; end
131
+ #
132
+ # # Use this DSL method to define master task attributes.
133
+ # def attr_master( *names )
134
+ # attr_accessor *names
135
+ # @master_attributes ||= []
136
+ # @master_attributes |= names.collect { |n| n.to_s }
137
+ # end
126
138
 
127
- def master_attributes ; @master_attributes ||= [] ; end
139
+ # properties not to be looked up in master
140
+ # if they are not in regular task section
128
141
 
129
- # Use this DSL method to define master task attributes.
130
- def attr_master( *names )
131
- attr_accessor *names
132
- @master_attributes ||= []
133
- @master_attributes |= names.collect { |n| n.to_s }
142
+ def task_only_properties ; @task_only_properties ||= [] ; end
143
+ def task_only_property( *names )
144
+ @task_only_properties ||= []
145
+ @task_only_properties |= names.collect { |n| n.to_s }
134
146
  end
135
147
 
136
- end
148
+ end #<< class
137
149
 
138
150
  # instance methods
139
151
 
140
152
  def task_name ; self.class.task_name ; end
141
153
  def task_desc ; self.class.task_desc ; end
154
+ def task_help ; self.class.task_help ; end
142
155
 
143
156
  def section_required? ; self.class.section_required? ; end
144
157
 
145
158
  #def master ; ::ProjectInfo.info ; end
146
- def master ; @master ; end
159
+ def master ; @master ; end
147
160
  def section ; @section ; end
161
+ def task ; @task ; end
148
162
 
149
- #
150
163
  def initialize( *args )
151
- @master = $PROJECT_INFO
152
-
153
- sect = @master[task_name]
154
- if sect.is_a?(Array)
155
- @master[task_name].each do |sec|
156
- set( sec )
157
- init
158
- run
164
+ @master = CascadingOpenObject.new( $PROJECT_INFO )
165
+ section = @master[task_name]
166
+ case section
167
+ when Array
168
+ section.each do |s|
169
+ initiate( s )
159
170
  end
160
171
  else
161
- set( sect || {} )
162
- init
163
- run
172
+ initiate( section )
164
173
  end
165
174
  end
166
175
 
167
- def set( sec )
168
- @section = sec
176
+ # Per section
169
177
 
170
- self.class.master_attributes.each do |k,v|
171
- send( "#{k}=", @master[k] )
172
- end
178
+ def initiate( section )
179
+ @section = CascadingOpenObject.new( section )
173
180
 
174
- @section.each do |k,v|
175
- send( "#{k}=", v )
176
- end
181
+ task_properties = {}
182
+ #self.class.task_only_properties.each { |t| section[t] ||= nil }
183
+ task_properties = CascadingOpenObject.new( section )
184
+ task_properties.__parent__ = @master
185
+ @task = task_properties
186
+
187
+ init #task
188
+ run #task
177
189
  end
178
190
 
191
+ # def set( sec )
192
+ #
193
+ # #@task = @section #TaskProperties.new( @master, @section )
194
+ #
195
+ # #self.class.master_attributes.each do |k,v|
196
+ # # send( "#{k}=", @master[k] )
197
+ # #end
198
+ #
199
+ # #@section.each do |k,v|
200
+ # # send( "#{k}=", v )
201
+ # #end
202
+ # end
203
+
204
+ # the two primary methods
205
+
179
206
  def init
180
207
  raise "not implemented for '#{task_name}' task"
181
208
  end
@@ -184,7 +211,15 @@ module Reap
184
211
  raise "no action defined for task #{task_name}"
185
212
  end
186
213
 
187
- # task support methods
214
+ # Task support methods
215
+
216
+ def use_subsection( name )
217
+ subsection = @section.__send__(name)
218
+ if subsection
219
+ subsection.__parent__ = @section
220
+ @task = subsection
221
+ end
222
+ end
188
223
 
189
224
  def sh( arg )
190
225
  puts arg
@@ -194,28 +229,3 @@ module Reap
194
229
  end #class Task
195
230
 
196
231
  end #module Reap
197
-
198
-
199
- ##
200
- # Convenience methods for built-in rake tasks
201
- ##
202
- # module RakeTask
203
- # extend self
204
- #
205
- # def gem_package_task(*args,&blk)
206
- # ::Rake::GemPackageTask.new(*args,&blk)
207
- # end
208
- #
209
- # def package_task(*args,&blk)
210
- # ::Rake::PackageTask.new(*args,&blk)
211
- # end
212
- #
213
- # def test_task(*args,&blk)
214
- # ::Rake::TestTask.new(*args,&blk)
215
- # end
216
- #
217
- # def rdoc_task(*args,&blk)
218
- # ::Rake::RDocTask.new(*args,&blk)
219
- # end
220
- #
221
- # end
@@ -8,147 +8,193 @@ require 'facet/string/align_center'
8
8
  require 'facet/string/fold'
9
9
  require 'facet/string/word_wrap'
10
10
 
11
+ # _ _____ _
12
+ # /_\ _ _ _ _ ___ _ _ _ _ __ ___ |_ _|_ _ __| |__
13
+ # / _ \| ' \| ' \/ _ \ || | ' \/ _/ -_) | |/ _` (_-< / /
14
+ # /_/ \_\_||_|_||_\___/\_,_|_||_\__\___| |_|\__,_/__/_\_\
15
+ #
16
+
17
+ # = Announcement Task
18
+
11
19
  class Reap::Announce < Reap::Task
12
20
 
21
+ section_required true
22
+
13
23
  task_desc "Send announcement email to ruby-talk or other address."
14
24
 
15
- section_required true
25
+ task_help %{
26
+
27
+ reap announce
16
28
 
17
- attr_accessor :title, :version, :summary, :description, :subject
18
- attr_accessor :to, :from, :server, :port, :domain, :account
19
- attr_accessor :authtype, :sectype
20
- attr_accessor :links, :slogan, :memo, :file
29
+ Send an announcement to a mailaing list or other email address.
30
+
31
+ to Email address to send announcemnt.
32
+ from Email address sent from.
33
+ subject Subject of email message.
34
+ server Email server to route message.
35
+ port Email server's port.
36
+ domain Email server's domain name.
37
+ account Email account name.
38
+ type Login type, either plain, cram_md5 or login.
39
+ secure Uses TLS security, true or false?
40
+
41
+ }
42
+
43
+ task_attr :ann
44
+
45
+ #attr_accessor :title, :version, :summary, :description, :subject
46
+ #attr_accessor :to, :from, :server, :port, :domain, :account
47
+ #attr_accessor :type, :secure
48
+ #attr_accessor :links, :slogan, :memo, :file
21
49
 
22
50
  def init
23
- @to = (@to || 'ruby-talk@ruby-lang.org').to_s.strip
24
- @from = (@from || master['email']).to_s.strip
25
- @server = @server.to_s.strip
26
- @port = (@port || 25).to_i
27
- @domain = @domain.to_s.strip if @domain
28
- @account = @account.to_s.strip
29
- @authtype = (@authtype || 'plain').to_s.strip #cram_md5 #plain #login
30
- #@sectype = @sectype
51
+ ann.to = (ann.to || 'ruby-talk@ruby-lang.org').to_s.strip
52
+ ann.from = (ann.from || master['email']).to_s.strip
53
+ ann.server = ann.server.to_s.strip
54
+ ann.port = (ann.port || 25).to_i
55
+ ann.domain = ann.domain.to_s.strip if ann.domain
56
+ ann.account = ann.account.to_s.strip
57
+ ann.type = (ann.type || 'plain').to_s.strip #cram_md5 #plain #login
58
+
59
+ raise "server is a require announce field" if ann.server.empty?
60
+ raise "account is a require announce field" if ann.account.empty?
31
61
 
32
- raise "server is a require announce field" if @server.empty?
33
- raise "account is a require announce field" if @account.empty?
62
+ ann.title ||= master.title
63
+ ann.version ||= master.version || master.date
64
+ ann.links ||= []
65
+ ann.subject ||= "[ANN] #{ann.title}, v#{ann.version}"
34
66
 
35
- @title ||= master['title']
36
- @version ||= master['version'] || master['date']
37
- @summary ||= master['summary']
38
- @description ||= master['description']
39
- @links ||= []
40
- @subject ||= "[ANN] #{@title}, v#{@version}"
67
+ ann.address = ann.to # TODO
41
68
 
42
- @address = @to # TODO
69
+ #raise "DOMAIN is a required field" if ann.domain.empty?
70
+ end
71
+
72
+ def run
73
+ message = build_message
43
74
 
44
- #raise "DOMAIN is a required field" if @domain.empty?
75
+ puts "\n#{message}\n\n"
76
+ print "Send? [y/N] "
77
+ until inp = $stdin.gets[0,1] ; sleep 1 ; end
78
+
79
+ unless inp.downcase == 'y'
80
+ puts "Reap announce task canceled."
81
+ exit 0
82
+ end
83
+
84
+ # ask for password
85
+ print "Password for #{ann.account}: "
86
+ until passwd = $stdin.gets.strip ; sleep 1 ; end
87
+
88
+ mail = %Q{
89
+ |From: #{ann.from}
90
+ |To: #{ann.address}
91
+ |Subject: #{ann.subject}
92
+ |
93
+ |#{message}
94
+ }.margin
95
+ begin
96
+ # --- Send using SMTP object and an adaptor
97
+ Net::SMTP.enable_tls if Net::SMTP.respond_to?(:enable_tls) and ann.secure # == :tls
98
+ Net::SMTP.start(ann.server, ann.port, ann.domain, ann.account, passwd, ann.type) do |s|
99
+ s.send_message mail, ann.from, ann.address
100
+ end
101
+ puts "Email sent successfully to #{ann.address}."
102
+ rescue => e
103
+ puts "Email delivery failed."
104
+ puts e
105
+ end
106
+
107
+ end
108
+
109
+ private
110
+
111
+ def build_message
45
112
 
46
113
  # header
47
114
  announce = %Q{
48
115
  |
49
116
  |A N N O U N C I N G
50
117
  |
51
- |#{title}, v#{version}
118
+ |#{ann.title}, v#{ann.version}
52
119
  |
53
- |#{summary}
120
+ |#{ann.summary}
54
121
  |
122
+ |#{ann.homepage}
55
123
  }.margin.align_center(66)
56
124
 
57
125
  # abstract
58
126
  abstract = ''
59
- if @description
127
+ if ann.description
60
128
  abstract << "\n\n"
61
- abstract << "ABSTRACT: #{@description}"
129
+ abstract << "ABSTRACT\n------------->\n\n#{ann.description}"
62
130
  abstract << "\n"
63
131
  end
64
132
 
65
133
  # more info
66
134
  info = ''
67
- unless @links.empty?
68
- info << "\n"
69
- info << "For More Information".center(67)
70
- info << "\n"
71
- @links.each{ |mi| info << "#{mi}".center(67) << "\n" }
135
+ unless ann.links.empty?
136
+ info << "\n\n"
137
+ info << "\nRELATED LINKS\n------------------>\n\n" #.center(67)
138
+ ann.links.each{ |mi| info << "#{mi}" << "\n" } #.center(67) << "\n" }
72
139
  info << "\n"
73
140
  end
74
141
 
75
142
  # slogan
76
143
  slogan = ''
77
- if @slogan
144
+ if ann.slogan
78
145
  slogan << "\n\n"
79
- slogan << @slogan.center(67)
146
+ slogan << ann.slogan.center(67)
80
147
  slogan << "\n\n"
81
148
  end
82
149
 
83
150
  # memo
84
151
  memo = ''
85
- if @memo
152
+ if ann.memo
86
153
  memo = ''
87
- memo << "\n---\n" #<< ('-' * 72) << "\n"
88
- memo << "(Memo)\n\n"
89
- memo << @memo.fold(true) #.word_wrap(67)
154
+ #memo << "\n---\n" #<< ('-' * 72) << "\n"
155
+ memo << "\nRELEASE MEMO\n----------------->\n\n"
156
+ memo << ann.memo.strip.fold(true) #.word_wrap(67)
90
157
  #memo << "\n"
91
158
  end
92
159
 
93
160
  # msg file
94
161
  msg = ''
95
- if @file and File.file?( @file )
96
- msg << "\n---\n" #<< ("-" * 68) << "\n"
97
- msg << "(from #{@file})\n\n"
98
- mg = ''
99
- File.open( @file ) { |f| mg << f.gets(nil) }
100
- msg << mg.fold(true) #.word_wrap(67)
162
+ if ann.file and File.file?( ann.file )
163
+ msg << "\nRELEASE MEMO\n----------------->\n\n"
164
+ #msg << "\n---\n" #<< ("-" * 68) << "\n"
165
+ #msg << "(from #{ann.file})\n\n"
166
+ mg = File.read( ann.file )
167
+ msg << mg.strip.fold(true) #.word_wrap(67)
101
168
  end
102
169
 
103
170
  # stamp
104
- stamp = ''
105
- stamp << "\n---\n" #<< ("-" * 68) << "\n"
171
+ stamp = "\n\n\n"
172
+ #stamp << "\n\n---\n" #<< ("-" * 68) << "\n"
106
173
  stamp << %Q{
107
- |Generated by REAP, the Ruby Project Assistant
108
- |http://www.ruby-lang.org -- Do you Ruby?
109
- }.margin
110
- stamp << "\n\n"
111
-
112
- @message = ''
113
- @message << announce
114
- @message << abstract
115
- @message << info
116
- @message << slogan
117
- @message << memo
118
- @message << msg
119
- @message << stamp
120
- end
121
-
122
- def run
123
- puts "\n#{@message}\n\n"
124
- print "Send? [Y/n] "
125
- until inp = $stdin.gets[0,1] ; sleep 1 ; end
126
- if (inp || 'y').downcase == 'y'
127
- # ask for password
128
- print "Password for #{@account}: "
129
- until passwd = $stdin.gets.strip ; sleep 1 ; end
130
- mail = %Q{
131
- |From: #{@from}
132
- |To: #{@address}
133
- |Subject: #{@subject}
134
- |
135
- |#{@message}
136
- }.margin
137
- begin
138
- # --- Send using SMTP object and an adaptor
139
- Net::SMTP.enable_tls if Net::SMTP.respond_to?(:enable_tls) and @tls
140
- Net::SMTP.start(@server, @port, @domain, @account, passwd, @authtype) do |s|
141
- s.send_message mail, @from, @address
142
- end
143
- puts "Email sent successfully to #{@address}."
144
- rescue => e
145
- puts "Email delivery failed."
146
- puts e
147
- end
148
- else
149
- puts "Reap announce task canceled."
150
- exit 0
151
- end
174
+ | Generated by
175
+ |
176
+ | o)o)o) o)o)o)o) o)o) o)o)o)
177
+ | o) o) o) o) o) o) o)
178
+ | o)o)o) o)o)o) o)o)o)o) o)o)o)
179
+ | o) o) o) o) o) o)
180
+ | o) o) o)o)o)o) o) o) o)
181
+ |
182
+ | The Ruby Project Assistant
183
+ |
184
+ | Do you Ruby? (http://www.ruby-lang.org)
185
+ }.margin.indent(12)
186
+ stamp << "\n"
187
+
188
+ message = ''
189
+ message << announce
190
+ message << slogan
191
+ message << abstract
192
+ message << memo
193
+ message << msg
194
+ message << info
195
+ message << stamp
196
+
197
+ message
152
198
  end
153
199
 
154
200
  end