reap 0.5.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. data/ANN-0.6.1 +3 -0
  2. data/Rakefile +19 -0
  3. data/Reapfile +46 -33
  4. data/data/site_ruby/reap/template.yaml +94 -0
  5. data/lib/reap/announce-task.rb +159 -0
  6. data/lib/reap/chmod-task.rb +82 -0
  7. data/lib/reap/package-task.rb +165 -0
  8. data/lib/reap/publish-task.rb +53 -0
  9. data/lib/reap/rdoc-task.rb +70 -0
  10. data/lib/reap/reap-all.rb +15 -0
  11. data/lib/reap/task.rb +177 -118
  12. data/lib/reap/template-task.rb +40 -0
  13. data/lib/reap/test-task.rb +159 -0
  14. data/pub/www/Reapfile +99 -0
  15. data/pub/www/images/appleboy.jpg +0 -0
  16. data/pub/www/index.html +49 -5
  17. data/{doc/files/LICENSE.html → pub/www/rdoc/classes/Reap.html} +32 -33
  18. data/pub/www/rdoc/classes/Reap/AnnounceTask.html +154 -0
  19. data/pub/www/rdoc/classes/Reap/AnnounceTask.src/M000031.html +111 -0
  20. data/pub/www/rdoc/classes/Reap/AnnounceTask.src/M000032.html +46 -0
  21. data/pub/www/rdoc/classes/Reap/ChmodTask.html +220 -0
  22. data/pub/www/rdoc/classes/Reap/ChmodTask.src/M000015.html +21 -0
  23. data/pub/www/rdoc/classes/Reap/ChmodTask.src/M000016.html +21 -0
  24. data/pub/www/rdoc/classes/Reap/ChmodTask.src/M000017.html +42 -0
  25. data/pub/www/rdoc/classes/Reap/ChmodTask.src/M000018.html +26 -0
  26. data/pub/www/rdoc/classes/Reap/PackageTask.html +181 -0
  27. data/pub/www/rdoc/classes/Reap/PackageTask.src/M000001.html +49 -0
  28. data/pub/www/rdoc/classes/Reap/PackageTask.src/M000002.html +74 -0
  29. data/pub/www/rdoc/classes/Reap/PackageTask.src/M000003.html +51 -0
  30. data/pub/www/rdoc/classes/Reap/PublishTask.html +160 -0
  31. data/pub/www/rdoc/classes/Reap/PublishTask.src/M000019.html +24 -0
  32. data/pub/www/rdoc/classes/Reap/PublishTask.src/M000020.html +38 -0
  33. data/pub/www/rdoc/classes/Reap/RDocTask.html +220 -0
  34. data/pub/www/rdoc/classes/Reap/RDocTask.src/M000004.html +24 -0
  35. data/pub/www/rdoc/classes/Reap/RDocTask.src/M000005.html +21 -0
  36. data/pub/www/rdoc/classes/Reap/RDocTask.src/M000006.html +53 -0
  37. data/pub/www/rdoc/classes/Reap/Task.html +319 -0
  38. data/pub/www/rdoc/classes/Reap/Task.src/M000024.html +21 -0
  39. data/pub/www/rdoc/classes/Reap/Task.src/M000025.html +18 -0
  40. data/pub/www/rdoc/classes/Reap/Task.src/M000026.html +18 -0
  41. data/pub/www/rdoc/classes/Reap/Task.src/M000027.html +28 -0
  42. data/pub/www/rdoc/classes/Reap/Task.src/M000028.html +16 -0
  43. data/pub/www/rdoc/classes/Reap/Task.src/M000029.html +18 -0
  44. data/pub/www/rdoc/classes/Reap/Task.src/M000030.html +19 -0
  45. data/pub/www/rdoc/classes/Reap/TemplateTask.html +182 -0
  46. data/pub/www/rdoc/classes/Reap/TemplateTask.src/M000021.html +18 -0
  47. data/pub/www/rdoc/classes/Reap/TemplateTask.src/M000022.html +21 -0
  48. data/pub/www/rdoc/classes/Reap/TemplateTask.src/M000023.html +34 -0
  49. data/pub/www/rdoc/classes/Reap/TestTask.html +228 -0
  50. data/pub/www/rdoc/classes/Reap/TestTask.src/M000007.html +25 -0
  51. data/pub/www/rdoc/classes/Reap/TestTask.src/M000008.html +21 -0
  52. data/pub/www/rdoc/classes/Reap/TestTask.src/M000009.html +77 -0
  53. data/pub/www/rdoc/classes/Reap/TestTask.src/M000010.html +27 -0
  54. data/pub/www/rdoc/classes/Reap/TestTask.src/M000011.html +36 -0
  55. data/{doc → pub/www/rdoc}/classes/Reap/TestTask/TestResults.html +23 -55
  56. data/pub/www/rdoc/classes/Reap/TestTask/TestResults.src/M000012.html +21 -0
  57. data/pub/www/rdoc/classes/Reap/TestTask/TestResults.src/M000013.html +21 -0
  58. data/pub/www/rdoc/classes/Reap/TestTask/TestResults.src/M000014.html +23 -0
  59. data/pub/www/rdoc/created.rid +1 -0
  60. data/{doc/files/lib/reap/tasks → pub/www/rdoc/files/lib/reap2}/announce-task_rb.html +3 -3
  61. data/{doc/files/lib/reap/task_rb.html → pub/www/rdoc/files/lib/reap2/chmod-task_rb.html} +5 -5
  62. data/pub/www/{doc/files/lib/reap/tasks → rdoc/files/lib/reap2}/package-task_rb.html +3 -3
  63. data/pub/www/{doc/files/lib/reap/template_rb.html → rdoc/files/lib/reap2/publish-task_rb.html} +10 -4
  64. data/pub/www/{doc/files/lib/reap/task_rb.html → rdoc/files/lib/reap2/rdoc-task_rb.html} +5 -5
  65. data/pub/www/{doc/files/lib/reap/reap_rb.html → rdoc/files/lib/reap2/reap-all_rb.html} +7 -7
  66. data/{doc/files/lib/reap/runner_rb.html → pub/www/rdoc/files/lib/reap2/task_rb.html} +7 -8
  67. data/pub/www/{doc/files/lib/reap/tasks → rdoc/files/lib/reap2}/template-task_rb.html +4 -4
  68. data/{doc/files/lib/reap/tasks → pub/www/rdoc/files/lib/reap2}/test-task_rb.html +10 -4
  69. data/{doc → pub/www/rdoc}/fr_class_index.html +0 -1
  70. data/pub/www/rdoc/fr_file_index.html +35 -0
  71. data/pub/www/rdoc/fr_method_index.html +58 -0
  72. data/{doc → pub/www/rdoc}/index.html +1 -1
  73. data/{doc → pub/www/rdoc}/rdoc-style.css +0 -0
  74. data/test/tc_reap.rb +11 -0
  75. metadata +98 -112
  76. data/bin/reap +0 -103
  77. data/doc/classes/Reap.html +0 -184
  78. data/doc/classes/Reap/AnnounceTask.html +0 -339
  79. data/doc/classes/Reap/ChmodTask.html +0 -277
  80. data/doc/classes/Reap/PackageTask.html +0 -374
  81. data/doc/classes/Reap/PublishTask.html +0 -237
  82. data/doc/classes/Reap/RDocTask.html +0 -254
  83. data/doc/classes/Reap/Runner.html +0 -299
  84. data/doc/classes/Reap/Task.html +0 -438
  85. data/doc/classes/Reap/TemplateTask.html +0 -226
  86. data/doc/classes/Reap/TestTask.html +0 -354
  87. data/doc/created.rid +0 -1
  88. data/doc/files/README.html +0 -194
  89. data/doc/files/lib/reap/reap_rb.html +0 -111
  90. data/doc/files/lib/reap/tasks/chmod-task_rb.html +0 -101
  91. data/doc/files/lib/reap/tasks/package-task_rb.html +0 -108
  92. data/doc/files/lib/reap/tasks/publish-task_rb.html +0 -101
  93. data/doc/files/lib/reap/tasks/rdoc-task_rb.html +0 -101
  94. data/doc/files/lib/reap/tasks/template-task_rb.html +0 -109
  95. data/doc/fr_file_index.html +0 -38
  96. data/doc/fr_method_index.html +0 -73
  97. data/lib/reap/reap.rb +0 -13
  98. data/lib/reap/runner.rb +0 -90
  99. data/lib/reap/tasks/announce-task.rb +0 -149
  100. data/lib/reap/tasks/chmod-task.rb +0 -69
  101. data/lib/reap/tasks/package-task.rb +0 -157
  102. data/lib/reap/tasks/publish-task.rb +0 -39
  103. data/lib/reap/tasks/rdoc-task.rb +0 -55
  104. data/lib/reap/tasks/template-task.rb +0 -39
  105. data/lib/reap/tasks/test-task.rb +0 -140
  106. data/pub/www/doc/classes/Reap.html +0 -184
  107. data/pub/www/doc/classes/Reap/AnnounceTask.html +0 -331
  108. data/pub/www/doc/classes/Reap/ChmodTask.html +0 -278
  109. data/pub/www/doc/classes/Reap/PackageTask.html +0 -372
  110. data/pub/www/doc/classes/Reap/PublishTask.html +0 -231
  111. data/pub/www/doc/classes/Reap/RDocTask.html +0 -254
  112. data/pub/www/doc/classes/Reap/Runner.html +0 -307
  113. data/pub/www/doc/classes/Reap/Task.html +0 -390
  114. data/pub/www/doc/classes/Reap/TemplateTask.html +0 -233
  115. data/pub/www/doc/classes/Reap/TestTask.html +0 -242
  116. data/pub/www/doc/created.rid +0 -1
  117. data/pub/www/doc/files/LICENSE.html +0 -119
  118. data/pub/www/doc/files/README.html +0 -194
  119. data/pub/www/doc/files/lib/reap/runner_rb.html +0 -113
  120. data/pub/www/doc/files/lib/reap/tasks/announce-task_rb.html +0 -113
  121. data/pub/www/doc/files/lib/reap/tasks/chmod-task_rb.html +0 -101
  122. data/pub/www/doc/files/lib/reap/tasks/publish-task_rb.html +0 -101
  123. data/pub/www/doc/files/lib/reap/tasks/rdoc-task_rb.html +0 -101
  124. data/pub/www/doc/files/lib/reap/tasks/test-task_rb.html +0 -101
  125. data/pub/www/doc/fr_class_index.html +0 -36
  126. data/pub/www/doc/fr_file_index.html +0 -39
  127. data/pub/www/doc/fr_method_index.html +0 -69
  128. data/pub/www/doc/index.html +0 -24
  129. data/pub/www/doc/rdoc-style.css +0 -208
  130. data/test/tc_require.rb +0 -11
@@ -0,0 +1,165 @@
1
+ require 'reap/task'
2
+
3
+ begin
4
+ require 'rubygems'
5
+ rescue
6
+ # no rubygems
7
+ end
8
+
9
+ #
10
+ # Package Task
11
+ #
12
+ # This task allows on to create standard .zip, .tgz, or .tbz
13
+ # packages, plus create gem distributions.
14
+ #
15
+ class Reap::PackageTask < Reap::Task
16
+
17
+ section_name :package
18
+
19
+ attr_accessor :dir, :name, :version, :package_name,
20
+ :author, :email, :summary, :project, :homepage,
21
+ :include, :exclude, :zip, :gzip, :bzip2, :gem,
22
+ :gem_platform, :gem_autorequire, :gem_dependencies,
23
+ :requirements, :executables
24
+
25
+ def init
26
+ @dir = section['dir'] || 'pkg'
27
+
28
+ @name = section['name'] || master['name']
29
+ @version = section['version'] || master['version'] || '0.0.1'
30
+ @package_name = @name + '-' + @version
31
+
32
+ @author = section['author'] || master['author']
33
+ @email = section['email'] || master['email']
34
+ @summary = section['summary'] || master['summary']
35
+ @project = section['project'] || master['rubyforge']['project']
36
+ @homepage = section['homepage'] || master['homepage'] || master['rubyforge']['homepage']
37
+
38
+ @include = section['include'] || DEFAULT_INCLUDE
39
+ @exclude = MUST_EXCLUDE + section['exclude']
40
+
41
+ @zip = section['zip'].nil? ? true : section['zip']
42
+ @gzip = section['gzip'].nil? ? true : section['zip']
43
+ @bzip2 = section['bzip2'].nil? ? true : section['zip']
44
+ @gem = section['gem'].nil? ? true : section['gem']
45
+
46
+ # gem specific
47
+ if defined?(Gem)
48
+ if section['platform']
49
+ @gem_platform = ::Gem.const_get(section['platform'])
50
+ else
51
+ @gem_platform = ::Gem::Platform::RUBY
52
+ end
53
+ @gem_autorequire = section['autorequire']
54
+ @gem_dependencies = section['dependencies'] || []
55
+ @requirements = section['requirements'] || []
56
+ @executables = section['executables'] || []
57
+ end
58
+ end
59
+
60
+ def define
61
+ desc "build .tgz, .tbz (.bzip2), .zip and/or .gem packages *"
62
+ task :package do
63
+ run_package
64
+ end
65
+ end
66
+
67
+ private
68
+
69
+ def run_package
70
+ # create package image
71
+ if FileTest.directory?(@dir)
72
+ print "Directory '#{@dir}' already exists. Clobber? [y/N] "
73
+ until inp = $stdin.gets[0,1] ; sleep 1 ; end
74
+ if (inp || 'y').downcase == 'y'
75
+ puts "Removing old directory '#{File.expand_path(@dir)}'..."
76
+ trash_dir = ".trash/#{File.basename(@dir)}"
77
+ FileUtils.mkdir_p(".trash") unless FileTest.directory?(".trash")
78
+ FileUtils.rm_r(trash_dir) if FileTest.exists?(trash_dir)
79
+ FileUtils.mv(@dir, trash_dir)
80
+ else
81
+ puts "Reap package task canceled."
82
+ exit 0
83
+ end
84
+ end
85
+ package_dir_path = "#{@dir}/#{@package_name}"
86
+ package_files = FileList.new
87
+ package_files.include(*@include)
88
+ package_files.exclude(*@exclude) if @exclude and not @exclude.empty?
89
+ FileUtils.mkdir_p @dir #rescue nil
90
+ package_files.each do |fn|
91
+ f = File.join(package_dir_path, fn)
92
+ fdir = File.dirname(f)
93
+ FileUtils.mkdir_p(fdir) if not File.exist?(fdir)
94
+ if File.directory?(fn)
95
+ FileUtils.mkdir_p(f)
96
+ else
97
+ FileUtils.rm_f(f)
98
+ FileUtils.safe_ln(fn, f)
99
+ end
100
+ end
101
+
102
+ # create standard package files
103
+ FileUtils.chdir(@dir) do
104
+ # tar bzip2 for unix
105
+ if @bzip2
106
+ puts "\nReap is shelling out work to tar and bzip2..."
107
+ sh %{tar --bzip2 -cvf #{@package_name}.tbz #{@package_name}}
108
+ end
109
+ # tar gzip for unix
110
+ if @gzip
111
+ puts "\nReap is shelling out work to tar and gzip..."
112
+ sh %{tar --gzip -cvf #{@package_name}.tgz #{@package_name}}
113
+ end
114
+ # zip for windows
115
+ if @zip
116
+ puts "\nReap is shelling out work to zip..."
117
+ sh %{zip -r #{@package_name}.zip #{@package_name}}
118
+ end
119
+ puts
120
+ end
121
+
122
+ # create gem package
123
+ run_gem if defined?(Gem) and @gem
124
+
125
+ return true
126
+ end
127
+
128
+ def run_gem
129
+ spec = Gem::Specification.new { |s|
130
+ s.name = @name
131
+ s.version = @version
132
+ @gem_dependencies.each{ |d,v|
133
+ if v
134
+ s.add_dependency(d, v)
135
+ else
136
+ s.add_dependency(d)
137
+ end
138
+ }
139
+ s.platform = @gem_platform
140
+ s.summary = @summary
141
+ s.requirements = @requirements
142
+
143
+ # s.files = Dir.glob("lib/**/*").delete_if {|item| item.include?("CVS")}
144
+ # s.files.concat Dir.glob("bin/**/*").delete_if {|item| item.include?("CVS")}
145
+ package_files = FileList.new
146
+ package_files.include(*@include)
147
+ package_files.exclude(*@exclude) if @exclude and not @exclude.empty?
148
+ s.files = package_files.to_a
149
+
150
+ s.require_path = 'lib'
151
+ s.autorequire = @gem_autorequire if @gem_autorequire
152
+ s.author = @author
153
+ s.email = @email
154
+ s.rubyforge_project = @project
155
+ s.homepage = @homepage
156
+ s.executables = @executables
157
+ s.bindir = "bin"
158
+ }
159
+ puts "Reap is shelling out work to the Gem Package Manager..."
160
+ Gem.manage_gems
161
+ Gem::Builder.new(spec).build
162
+ sh %{mv ./*.gem #{@dir}/}
163
+ end
164
+
165
+ end
@@ -0,0 +1,53 @@
1
+ require 'reap/task'
2
+
3
+ #
4
+ # Publish Task
5
+ #
6
+ class Reap::PublishTask < Reap::Task
7
+
8
+ section_name :publish
9
+
10
+ attr_accessor :host, :type, :dir, :project, :username
11
+
12
+ def init
13
+ @host = (section['host'] || 'rubyforge').to_s.downcase
14
+ @type = (section['type'] || 'www').to_s.downcase
15
+ #@command = section['command']
16
+ @dir = section['dir']
17
+ #@exclude = section['exclude']
18
+ @project = section['project'] || master['rubyforge']['project'] || master['name']
19
+ @username = section['username'] || master['rubyforge']['username']
20
+ end
21
+
22
+ def define
23
+ desc "publish documents to the web *"
24
+ task :publish do
25
+ run_publish
26
+ end
27
+ end
28
+
29
+ def run_publish
30
+ cmd = ''; skip = false
31
+
32
+ case @host
33
+ when 'rubyforge'
34
+ case @type
35
+ when 'www', 'web'
36
+ cmd = %{scp -r #{@dir}/* #{@username}@rubyforge.org:/var/www/gforge-projects/#{@project}/}
37
+ else
38
+ puts %{Unrecognized publishing type '#{@type}' for host '#{@host}'. Skipped.}
39
+ skip = true
40
+ end
41
+ else
42
+ puts %{Unrecognized publishing host '#{@host}'. Skipped.}
43
+ skip = true
44
+ end
45
+
46
+ unless skip
47
+ puts "Reap is shelling out publishing work..."
48
+ puts cmd
49
+ sh(cmd) unless $PRETEND
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,70 @@
1
+ require 'reap/task'
2
+
3
+ #
4
+ # RDoc Task
5
+ #
6
+ class Reap::RDocTask < Reap::Task
7
+
8
+ section_name :rdoc
9
+
10
+ attr_accessor :dir, :main, :title, :template, :include, :exclude, :options
11
+
12
+ def init
13
+ @dir = section["dir"] || 'doc'
14
+ @main = section["main"] || 'README'
15
+ @title = section["title"] || master["title"]
16
+ @template = section["template"] || 'html'
17
+ @include = section["include"] || ['lib/**/*']
18
+ @exclude = section["exclude"] || []
19
+ @options = section["options"] || []
20
+ end
21
+
22
+ def define
23
+ desc "generate RDocs (in #{@dir}) *"
24
+ task :rdoc do
25
+ run_rdoc
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def run_rdoc
32
+ if !File.exists?(@main) or File.directory?(@main)
33
+ warn "Specified RDoc Main file #{@main} not found. Ignored."
34
+ @main = nil
35
+ end
36
+ rdoc_dir = File.expand_path(@dir)
37
+ if FileTest.directory?(@dir)
38
+ print "Directory '#{@dir}' already exists. Clobber? [y/N] "
39
+ until inp = $stdin.gets[0,1] ; sleep 1 ; end ; puts
40
+ if (inp || 'y').downcase == 'y'
41
+ puts "Removing old directory '#{rdoc_dir}'..."
42
+ #FileUtils.mkdir_p(".trash") unless FileTest.directory?(".trash")
43
+ #trashdir = ".trash/#{File.basename(@dir)}"
44
+ #FileUtils.rm_r(trashdir) if FileTest.exists?(trashdir)
45
+ #FileUtils.mv(@dir, trashdir)
46
+ FileUtils.rm_r(@dir)
47
+ else
48
+ puts "Reap rdoc task canceled."
49
+ return nil
50
+ end
51
+ end
52
+ rdoc_target = "#{rdoc_dir}/index.html"
53
+ # rdoc files
54
+ rdoc_files = FileList.new
55
+ rdoc_files.include(*@include)
56
+ rdoc_files.exclude(*@exclude)
57
+ rdoc_files = '"' << rdoc_files.join('" "') << '"'
58
+ # build options string
59
+ build = @options.dup
60
+ build << "--main '#{@main}'" if @main
61
+ build << "--title '#{@title}'" if @title
62
+ build << "-T '#{@template}'" if @template
63
+ rdoc_opts = build.join(' ')
64
+ # do it!
65
+ puts "Reap is shelling work out to RDoc..."
66
+ puts %{rdoc -o #{@dir} #{rdoc_opts}}
67
+ sh %{rdoc -o #{rdoc_dir} #{rdoc_opts} #{rdoc_files}}
68
+ end
69
+
70
+ end
@@ -0,0 +1,15 @@
1
+ require 'reap/template-task'
2
+ require 'reap/chmod-task'
3
+ require 'reap/test-task'
4
+ require 'reap/rdoc-task'
5
+ require 'reap/announce-task'
6
+ require 'reap/package-task'
7
+ require 'reap/publish-task'
8
+
9
+ Reap::TemplateTask.new
10
+ Reap::ChmodTask.new
11
+ Reap::TestTask.new
12
+ Reap::RDocTask.new
13
+ Reap::AnnounceTask.new
14
+ Reap::PackageTask.new
15
+ Reap::PublishTask.new
data/lib/reap/task.rb CHANGED
@@ -1,106 +1,166 @@
1
1
 
2
2
  require 'rbconfig'
3
+ require 'yaml'
4
+ require 'fileutils'
5
+
6
+ require 'rake'
7
+ require 'rake/tasklib'
8
+
9
+ #require 'mega/filelist'
10
+ require 'nano/hash/traverse'
11
+
12
+ module Reap ; end
13
+
14
+ # Base class for reap tasks.
15
+ #
16
+ # When creating a specifc task, subclass this one and create two class-level
17
+ # methods #task and #desc. #task will return the name of the task and
18
+ # #desc a description of the task. Then create an instance method called
19
+ # #setup to do any initial preping. Usually that means assigning
20
+ # some instance vars from the Reapfile configutration. You can use
21
+ # section[<name>] for settings from the task's particular section (as
22
+ # determined by self.task method above) and/or use master[<name>]
23
+ # for top-level settings. Finally write a #run method that preforms the
24
+ # actual task.
25
+ #
26
+ # Here's an oh so simple example:
27
+ #
28
+ # class MyTask < Task
29
+ # def self.task ; 'mytask' ; end
30
+ # def self.desc ; 'This is my first custom task.' ; end
31
+ #
32
+ # def setup
33
+ # @message = section['message'] || master['default'] || 'None Found!'
34
+ # end
35
+ #
36
+ # def run
37
+ # puts @message
38
+ # end
39
+ # end
40
+ #
41
+ # This corresponding settings in the Reapfile will then be:
42
+ #
43
+ # default: Default text, if any.
44
+ #
45
+ # mytask:
46
+ # message: Message text, if any.
47
+ #
48
+ # Reap automatically handles multiple task runs if an array is provided
49
+ # under the task section instead of a single mapping. For example:
50
+ #
51
+ # mytask:
52
+ # -
53
+ # message: First Run.
54
+ # -
55
+ # message: Second Run.
56
+ #
57
+ class Reap::Task < Rake::TaskLib
58
+
59
+ RUBY = Config::CONFIG['ruby_install_name']
60
+
61
+ DEFAULT_INCLUDE = [ '[A-Z]*', 'setup.rb', 'lib/**/*', 'bin/**/*', 'data/**/*',
62
+ 'doc/**/*', 'rdoc/**/*', 'test/**/*', 'bench/**/*',
63
+ 'demo/**/*', 'samples/**/*', 'examples/**/*' ]
64
+
65
+ MUST_EXCLUDE = [ 'InstalledFiles', '**/CVS/**/*', '**/*~' ]
66
+
67
+
68
+ def initialize #:yield:
69
+ load_config
70
+ init
71
+ yield( self ) if block_given?
72
+ define
73
+ end
3
74
 
4
- module Reap
75
+ def init
76
+ raise "not implemented"
77
+ end
5
78
 
6
- # Base class for all tasks.
7
- #
8
- # When creating a specifc task, subclass this one and create two class-level
9
- # methods #task and #desc. #task will return the name of the task and
10
- # #desc a description of the task. Then create an instance method called
11
- # #setup to do any initial preping. Usually that means assigning
12
- # some instance vars from the Reapfile configutration. You can use
13
- # section[<name>] for settings from the task's particular section (as
14
- # determined by self.task method above) and/or use master[<name>]
15
- # for top-level settings. Finally write a #run method that preforms the
16
- # actual task.
17
- #
18
- # Here's an oh so simple example:
19
- #
20
- # class MyTask < Task
21
- # def self.task ; 'mytask' ; end
22
- # def self.desc ; 'This is my first custom task.' ; end
23
- #
24
- # def setup
25
- # @message = section['message'] || master['default'] || 'None Found!'
26
- # end
27
- #
28
- # def run
29
- # puts @message
30
- # end
31
- # end
32
- #
33
- # This corresponding settings in the Reapfile will then be:
34
- #
35
- # default: Default text, if any.
36
- #
37
- # mytask:
38
- # message: Message text, if any.
39
- #
40
- # Reap automatically handles multiple task runs if an array is provided
41
- # under the task section instead of a single mapping. For example:
42
- #
43
- # mytask:
44
- # -
45
- # message: First Run.
46
- # -
47
- # message: Second Run.
48
- #
49
- class Task
79
+ def define
80
+ raise "not implemented"
81
+ end
50
82
 
51
- RUBY = Config::CONFIG['ruby_install_name']
83
+ attr_reader :config
84
+
85
+ def load_config( config_file=nil )
86
+ config_file ||= 'Reapfile'
87
+ if File.file?( config_file )
88
+ # load config file
89
+ @config = ::YAML.load( File.open( config_file ) ).traverse{ |k,v| [k.downcase, v] }
90
+ # required main parameters
91
+ raise "TITLE is a required configuration field" unless @config['title']
92
+ raise "NAME is a required configuration field" unless @config['name']
93
+ raise "VERSION is a required configuration field" unless @config['version']
94
+ else
95
+ @config = {}
96
+ end
97
+ end
52
98
 
53
- DEFAULT_INCLUDE = [ '[A-Z]*', 'setup.rb', 'lib/**/*', 'bin/**/*', 'data/**/*',
54
- 'doc/**/*', 'rdoc/**/*', 'test/**/*', 'bench/**/*',
55
- 'demo/**/*', 'samples/**/*', 'examples/**/*' ]
99
+ def master ; @config ; end
100
+
101
+ def section
102
+ sect = @config[self.class.section_name] || {}
103
+ end
56
104
 
57
- MUST_EXCLUDE = [ 'InstalledFiles', '**/CVS/**/*', '**/*~' ]
105
+ # Class Methods
58
106
 
59
- class << self
60
- def inherited( klass )
61
- (@task_registry ||= []) << klass
62
- end
63
- def registry ; @task_registry ||= [] ; end
64
- def tasks ; @task ||= registry.collect { |t| t.task } ; end
107
+ class << self
108
+ def section_name(n=nil)
109
+ @sname = n.to_s if n
110
+ @sname
65
111
  end
112
+ end
66
113
 
67
- attr_reader :master, :section
68
114
 
69
- def initialize( master_config, section_config )
70
- @master = master_config
71
- @section = section_config
72
- setup if respond_to?(:setup)
115
+ =begin
116
+ class << self
117
+ def inherited( klass )
118
+ (@task_registry ||= []) << klass
73
119
  end
120
+ def registry ; @task_registry ||= [] ; end
121
+ def tasks ; @task ||= registry.collect { |t| t.task_name } ; end
122
+
123
+ def task_name(n=nil) ; @tname = n.to_sym if n ; @tname ; end
124
+ def task_desc(d=nil) ; @tdesc = d.to_s if d ; @tdesc ; end
125
+ end
126
+
127
+ attr_reader :master, :section
128
+
129
+ def initialize( master_config, section_config )
130
+ @master = master_config
131
+ @section = section_config
132
+ setup if respond_to?(:setup)
133
+ end
134
+
135
+ def [](x) ; @section[x] ; end
74
136
 
75
- def [](x) ; @section[x] ; end
76
-
77
- # Run the system command +cmd+.
78
- #
79
- # Example:
80
- # sh %{ls -ltr}
81
- #
82
- def sh(cmd, options={})
83
- FileUtils.send( :fu_check_options, options, :noop, :verbose )
84
- FileUtils.send( :fu_output_message, cmd ) if options[:verbose]
85
- unless options[:noop]
86
- system(cmd) or fail "Command Failed: [#{cmd}]"
87
- end
137
+ # Run the system command +cmd+.
138
+ #
139
+ # Example:
140
+ # sh %{ls -ltr}
141
+ #
142
+ def sh(cmd, options={})
143
+ FileUtils.send( :fu_check_options, options, :noop, :verbose )
144
+ FileUtils.send( :fu_output_message, cmd ) if options[:verbose]
145
+ unless options[:noop]
146
+ system(cmd) or fail "Command Failed: [#{cmd}]"
88
147
  end
148
+ end
89
149
 
90
- # Run a Ruby interpreter with the given arguments.
91
- #
92
- # Example:
93
- # ruby %{-pe '$_.upcase!' <README}
94
- #
95
- def ruby(*args)
96
- if Hash === args.last
97
- options = args.pop
98
- else
99
- options = {}
100
- end
101
- puts "#{RUBY} #{args.join(' ')}" if $DEBUG
102
- sh "#{RUBY} #{args.join(' ')}", options
150
+ # Run a Ruby interpreter with the given arguments.
151
+ #
152
+ # Example:
153
+ # ruby %{-pe '$_.upcase!' <README}
154
+ #
155
+ def ruby(*args)
156
+ if Hash === args.last
157
+ options = args.pop
158
+ else
159
+ options = {}
103
160
  end
161
+ puts "#{RUBY} #{args.join(' ')}" if $DEBUG
162
+ sh "#{RUBY} #{args.join(' ')}", options
163
+ end
104
164
 
105
165
  # # Attempt to do a normal file link, but fall back
106
166
  # # to a copy if the link fails.
@@ -117,36 +177,35 @@ module Reap
117
177
  # end
118
178
  # end
119
179
 
120
- # Returns the full package name which combines package name and version.
121
- def package_name
122
- @config['name'] + '-' + ( @config['version'] || '0.0.1' )
123
- end
124
-
125
- # def rakefile
126
- # s = ''
127
- # rf = File.join(locate, 'packmule', 'packmule.rake')
128
- # File.open( rf ) { |f| s << f.gets(nil) }
129
- # s
130
- # end
131
- #
132
- # def yamlform
133
- # s = ''
134
- # yf = File.join(locate, 'packmule', 'packmule.yaml')
135
- # File.open( yf ) { |f| s << f.gets(nil) }
136
- # s
137
- # end
138
-
139
- #def value( key, *alt_masters )
140
- # return section[key] if section.key?( key )
141
- # alt_masters.each do |path|
142
- # parr = path.split(':').collect { |e| e.downcase }
143
- # conf = @config
144
- # parr.each { |e| conf = conf[e] }
145
- # return conf if conf
146
- # end
147
- # nil
148
- #end
149
-
180
+ # Returns the full package name which combines package name and version.
181
+ def package_name
182
+ @config['name'] + '-' + ( @config['version'] || '0.0.1' )
150
183
  end
151
184
 
152
- end #module Reap
185
+ # def rakefile
186
+ # s = ''
187
+ # rf = File.join(locate, 'packmule', 'packmule.rake')
188
+ # File.open( rf ) { |f| s << f.gets(nil) }
189
+ # s
190
+ # end
191
+ #
192
+ # def yamlform
193
+ # s = ''
194
+ # yf = File.join(locate, 'packmule', 'packmule.yaml')
195
+ # File.open( yf ) { |f| s << f.gets(nil) }
196
+ # s
197
+ # end
198
+
199
+ #def value( key, *alt_masters )
200
+ # return section[key] if section.key?( key )
201
+ # alt_masters.each do |path|
202
+ # parr = path.split(':').collect { |e| e.downcase }
203
+ # conf = @config
204
+ # parr.each { |e| conf = conf[e] }
205
+ # return conf if conf
206
+ # end
207
+ # nil
208
+ #end
209
+ =end
210
+
211
+ end #class Reap::Task