reap 4.3.2 → 4.3.3

Sign up to get free protection for your applications and to get access to all the features.
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