ratch 1.1.0 → 1.2.0

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