ratch 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/.ruby +99 -0
  2. data/COPYING +203 -21
  3. data/History.rdoc +35 -0
  4. data/License.txt +204 -0
  5. data/README.rdoc +113 -0
  6. data/Version +1 -0
  7. data/bin/ludo +16 -0
  8. data/bin/ratch +1 -8
  9. data/lib/ratch.rb +28 -0
  10. data/lib/ratch.yml +99 -0
  11. data/lib/ratch/batch.rb +500 -0
  12. data/lib/ratch/console.rb +199 -0
  13. data/lib/ratch/core_ext.rb +1 -4
  14. data/lib/ratch/core_ext/facets.rb +15 -1
  15. data/lib/ratch/core_ext/filetest.rb +29 -0
  16. data/lib/ratch/core_ext/{string.rb → to_actual_filename.rb} +0 -23
  17. data/lib/ratch/core_ext/to_console.rb +30 -12
  18. data/lib/ratch/core_ext/{object.rb → to_yamlfrag.rb} +1 -0
  19. data/lib/ratch/core_ext/unfold_paragraphs.rb +27 -0
  20. data/lib/ratch/file_list.rb +411 -0
  21. data/lib/ratch/script.rb +99 -5
  22. data/lib/ratch/script/help.rb +84 -0
  23. data/lib/ratch/shell.rb +783 -0
  24. data/lib/ratch/system.rb +15 -0
  25. data/lib/ratch/utils/cli.rb +49 -0
  26. data/lib/ratch/utils/config.rb +52 -0
  27. data/lib/ratch/{emailer.rb → utils/email.rb} +43 -6
  28. data/lib/ratch/utils/ftp.rb +134 -0
  29. data/lib/ratch/utils/pom.rb +22 -0
  30. data/lib/ratch/utils/rdoc.rb +48 -0
  31. data/lib/ratch/utils/tar.rb +88 -0
  32. data/lib/ratch/utils/xdg.rb +39 -0
  33. data/lib/ratch/utils/zlib.rb +54 -0
  34. data/spec/01_shell.rdoc +198 -0
  35. data/spec/02_script.rdoc +34 -0
  36. data/spec/03_batch.rdoc +71 -0
  37. data/spec/04_system.rdoc +3 -0
  38. data/spec/applique/array.rb +8 -0
  39. data/spec/applique/setup.rb +20 -0
  40. data/test/case_batch.rb +63 -0
  41. data/test/case_shell.rb +46 -0
  42. data/test/core_ext/case_pathname.rb +361 -0
  43. data/test/helper.rb +4 -0
  44. data/test/utils/case_cli.rb +6 -0
  45. data/test/utils/case_config.rb +12 -0
  46. data/test/utils/case_email.rb +10 -0
  47. data/test/utils/case_ftp.rb +6 -0
  48. data/test/utils/case_pom.rb +17 -0
  49. data/test/utils/case_rdoc.rb +23 -0
  50. data/test/utils/case_tar.rb +6 -0
  51. data/test/utils/case_zlib.rb +11 -0
  52. data/test/utils/fixtures/pom_sample/Profile +4 -0
  53. data/test/utils/fixtures/rdoc_sample/README.rdoc +4 -0
  54. data/test/utils/fixtures/rdoc_sample/lib/rdoc_sample/rdoc_sample.rb +9 -0
  55. metadata +139 -82
  56. data/HISTORY +0 -6
  57. data/MANIFEST +0 -53
  58. data/NEWS +0 -12
  59. data/README +0 -87
  60. data/VERSION +0 -1
  61. data/demo/tryme-task.ratch +0 -12
  62. data/demo/tryme1.ratch +0 -6
  63. data/doc/log/basic_stats/index.html +0 -39
  64. data/doc/log/notes.xml +0 -18
  65. data/doc/log/stats.log +0 -14
  66. data/doc/log/syntax.log +0 -0
  67. data/doc/log/testunit.log +0 -156
  68. data/lib/ratch/commandline.rb +0 -16
  69. data/lib/ratch/core_ext/pathname.rb +0 -38
  70. data/lib/ratch/dsl.rb +0 -420
  71. data/lib/ratch/index.rb +0 -4
  72. data/lib/ratch/io.rb +0 -116
  73. data/lib/ratch/plugin.rb +0 -65
  74. data/lib/ratch/service.rb +0 -33
  75. data/lib/ratch/task.rb +0 -249
  76. data/lib/ratch/task2.rb +0 -298
  77. data/meta/abstract +0 -4
  78. data/meta/author +0 -1
  79. data/meta/contact +0 -1
  80. data/meta/homepage +0 -1
  81. data/meta/name +0 -1
  82. data/meta/requires +0 -4
  83. data/meta/summary +0 -1
  84. data/test/README +0 -1
  85. data/test/test_helper.rb +0 -4
  86. data/test/test_task.rb +0 -46
@@ -1,298 +0,0 @@
1
- module Taskable
2
-
3
- def self.define_task(base, target_and_requisite, &function)
4
- case base
5
- when Class, Module
6
-
7
- else #Object
8
-
9
- end
10
- end
11
-
12
-
13
- module ClassDSL
14
- # Without an argument, returns list of tasks defined for this class.
15
- #
16
- # If a task's target name is given, will return the first
17
- # task mathing the name found in the class' inheritance chain.
18
- # This is important ot ensure task are inherited in the same manner
19
- # that methods are.
20
- def tasks(target=nil)
21
- if target
22
- target = target.to_sym
23
- anc = ancestors.select{|a| a < DSL}
24
- t = nil; anc.find{|a| t = a.tasks[target]}
25
- return t
26
- else
27
- @tasks ||= {}
28
- end
29
- end
30
-
31
- # Set a description to be used by then next defined task in this class.
32
- def desc(description)
33
- @desc = description
34
- end
35
-
36
- # Define a task.
37
- def task(target_and_requisite, &function)
38
- target, requisite, function = *Task.parse_arguments(target_and_requisite, &function)
39
- task = tasks[target.to_sym] ||= (
40
- tdesc = @desc
41
- @desc = nil
42
- Task.new(self, target, tdesc) #, reqs, actions)
43
- )
44
- task.update(requisite, &function)
45
-
46
- define_method("#{target}Trigger"){ task.run(self) }
47
- define_method("#{target}:task", &function)
48
- end
49
-
50
- end
51
-
52
- #
53
- module ObjectDSL
54
-
55
- # Without an argument, returns list of tasks defined for this class.
56
- #
57
- # If a task's target name is given, will return the first
58
- # task mathing the name found in the class' inheritance chain.
59
- # This is important ot ensure task are inherited in the same manner
60
- # that methods are.
61
- def tasks(target=nil)
62
- if target
63
- target = target.to_sym
64
- anc = ancestors.select{|a| a < DSL}
65
- t = nil; anc.find{|a| t = a.tasks[target]}
66
- return t
67
- else
68
- @tasks ||= {}
69
- end
70
- end
71
-
72
- # Set a description to be used by then next defined task in this class.
73
- def desc(description)
74
- @desc = description
75
- end
76
-
77
- # Define a task.
78
- def task(target_and_requisite, &function)
79
- target, requisite, function = *Task.parse_arguments(target_and_requisite, &function)
80
- task = tasks[target.to_sym] ||= (
81
- tdesc = @desc
82
- @desc = nil
83
- Task.new(self, target, tdesc) #, reqs, actions)
84
- )
85
- task.update(requisite, &function)
86
-
87
- define_method("#{target}Trigger"){ task.run(self) }
88
- define_method("#{target}:task", &function)
89
- end
90
-
91
- end
92
-
93
-
94
-
95
- # Run a task.
96
- #def run(target)
97
- # t = self.class.tasks(target)
98
- # t.run(self)
99
- #end
100
-
101
- # = Task Class
102
- #
103
- class Task
104
- attr :base
105
- attr :target
106
- attr :requisite
107
- attr :function
108
- attr :description
109
-
110
- def initialize(base, target, description=nil, requisite=nil, &function)
111
- @base = base
112
- @target = target.to_sym
113
- @description = description
114
- @requisite = requisite || []
115
- @function = function
116
- end
117
-
118
- #
119
- def update(requisite, &function)
120
- @requisite.concat(requisite).uniq!
121
- @function = function if function
122
- end
123
-
124
- #
125
- def prerequisite
126
- base.ancestors.select{ |a| a < DSL }.collect{ |a|
127
- a.tasks[target].requisite
128
- }.flatten.uniq
129
- end
130
-
131
- # invoke target
132
- def run(object)
133
- rd = rule_dag
134
- rd.each do |t|
135
- object.send("#{t}:task")
136
- end
137
- end
138
-
139
- #
140
- def call(object)
141
- object.instance_eval(&function)
142
- end
143
-
144
- # Collect task dependencies for running.
145
- def rule_dag(cache=[])
146
- prerequisite.each do |r|
147
- next if cache.include?(r)
148
- t = base.tasks[r]
149
- t.rule_dag(cache)
150
- #cache << dep
151
- end
152
- cache << target.to_s
153
- cache
154
- end
155
-
156
- #
157
- def self.parse_arguments(name_and_reqs, &action)
158
- if Hash===name_and_reqs
159
- target = name_and_reqs.keys.first.to_s
160
- reqs = [name_and_reqs.values.first].flatten
161
- else
162
- target = name_and_reqs.to_s
163
- reqs = []
164
- end
165
- return target, reqs, action
166
- end
167
- end
168
-
169
- # = File Task Class
170
- #
171
- class FileTask < Task
172
-
173
- def needed?
174
- if prerequisite.empty?
175
- dated = true
176
- elsif File.exist?(target)
177
- mtime = File.mtime(target)
178
- dated = prerequisite.find do |file|
179
- !File.exist?(file) || File.mtime(file) > mtime
180
- end
181
- else
182
- dated = true
183
- end
184
- return dated
185
- end
186
-
187
- #
188
- def call(object)
189
- object.instance_eval(&function) if needed?
190
- end
191
- end
192
-
193
- end
194
-
195
-
196
- =begin
197
- # turn yaml file into tasks
198
- def parse(file)
199
- script = YAML.load(File.new(file.to_s))
200
-
201
- imports = script.delete('import') || []
202
- #plugins = script.delete('plugin') || []
203
- srvs = script.delete('services') || {}
204
- tgts = script.delete('targets') || {}
205
-
206
- imports.each do |import|
207
- path = Reap::Domain::LIB_DIRECTORY + 'systems' + (import + '.reap').to_s
208
- parse(path)
209
- end
210
-
211
- srvs.each do |label, options|
212
- type = options.delete('type')
213
- @services[label] = domain.send("#{type}_service") # FIXME
214
- end
215
-
216
- tgts.each do |target, options|
217
- @targets[target] = Task.new(self, target, options)
218
- end
219
- end
220
- =end
221
-
222
-
223
-
224
-
225
-
226
-
227
- =begin
228
- # Collect task dependencies for running.
229
- def self.rule_dag(target, cache=[])
230
- t = tasks[target.to_sym]
231
- d = t.prerequisite
232
- d.each do |r|
233
- next if cache.include?(r)
234
- rule_dag(r, cache)
235
- #cache << dep
236
- end
237
-
238
- # file requirements
239
- #q = self.class.ann(name, :reqs) || []
240
- #q.each do |req|
241
- # path = Pathname.new(req)
242
- # next if r.include?(path)
243
- # mat = annotations.select{ |n, a| File.fnmatch?(a[:file].first, req) if a[:file] }.compact
244
- # mat.each do |n, a|
245
- # rule_dag(n, r)
246
- # end
247
- # r << path
248
- #end
249
-
250
- cache << target.to_s
251
- return cache
252
- end
253
-
254
- # invoke target
255
- def run(target)
256
- target = target.to_sym
257
- rd = self.class.rule_dag(target)
258
- rd.each do |t|
259
- send("#{t}:task")
260
- end
261
- end
262
- =end
263
-
264
- =begin
265
- if target == name.to_s
266
- tasks[target].call
267
- else
268
- case action
269
- when Pathname
270
- raise unless action.exist?
271
- else
272
- run_rec(action)
273
- end
274
- end
275
- end
276
- end
277
-
278
- def run_rec(action)
279
- # creates a file?
280
- dated = true
281
- if creates = self.class.ann(action, :file)
282
- if self.class.ann(name, :reqs).empty?
283
- dated = true
284
- elsif File.exist?(creates)
285
- mtime = File.mtime(creates)
286
- dated = self.class.ann(name, :reqs).find do |file|
287
- !File.exist?(file) || File.mtime(file) > mtime
288
- end
289
- else
290
- dated = true
291
- end
292
- end
293
- return unless dated
294
- send(action)
295
- end
296
- =end
297
-
298
-
@@ -1,4 +0,0 @@
1
- Ratch is a Ruby-based batch scripting language.
2
- It's a DSL over regular RUby to make the life
3
- of the batch script writter easier.
4
-
@@ -1 +0,0 @@
1
- trans <transfire@gmail.com>
@@ -1 +0,0 @@
1
- trans <transfire@gmail.com>
@@ -1 +0,0 @@
1
- http://ratch.rubyforge.org
data/meta/name DELETED
@@ -1 +0,0 @@
1
- ratch
@@ -1,4 +0,0 @@
1
- facets
2
- folio
3
- clio
4
-
@@ -1 +0,0 @@
1
- Ruby-based Batch Scripting
@@ -1 +0,0 @@
1
- Yea. I needs to write test very badly.
@@ -1,4 +0,0 @@
1
- require 'test/unit'
2
-
3
- $LOAD_PATH.unshift('lib')
4
-
@@ -1,46 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
-
3
- require 'ratch/task'
4
-
5
- class TestTaskable < Test::Unit::TestCase
6
-
7
- RESULT_CACHE = []
8
-
9
- class Example #< Ratch::DSL
10
-
11
- include Taskable
12
-
13
- task :task_with_no_requisites do
14
- RESULT_CACHE << "task_with_no_requisites"
15
- end
16
-
17
- task :task_with_one_requisite => [:task_with_no_requisites] do
18
- RESULT_CACHE << "task_with_one_requisite"
19
- end
20
-
21
- end
22
-
23
-
24
- def setup
25
- RESULT_CACHE.replace([])
26
- @example = Example.new
27
- end
28
-
29
- def teardown
30
- end
31
-
32
- # Replace this with your real tests.
33
- def test_task_with_no_requisite
34
- @example.run :task_with_no_requisites
35
- #@example.task_with_no_requisites_trigger
36
- assert_equal(["task_with_no_requisites"], RESULT_CACHE)
37
- end
38
-
39
- def test_task_with_one_requisite
40
- @example.run :task_with_one_requisite
41
- #@example.task_with_one_requisite_trigger
42
- assert_equal(["task_with_no_requisites", "task_with_one_requisite"], RESULT_CACHE)
43
- end
44
-
45
- end
46
-