ratch 0.4.1 → 1.0.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 (107) hide show
  1. data/COPYING +17 -669
  2. data/HISTORY +6 -0
  3. data/MANIFEST +36 -0
  4. data/METADATA +14 -0
  5. data/NEWS +7 -0
  6. data/README +67 -17
  7. data/bin/ratch +5 -78
  8. data/demo/tryme-task.ratch +12 -0
  9. data/demo/tryme1.ratch +6 -0
  10. data/lib/ratch/core_ext.rb +6 -0
  11. data/lib/ratch/core_ext/facets.rb +1 -0
  12. data/lib/ratch/core_ext/filetest.rb +52 -0
  13. data/lib/ratch/core_ext/object.rb +8 -0
  14. data/lib/ratch/core_ext/pathname.rb +38 -0
  15. data/lib/ratch/core_ext/string.rb +44 -0
  16. data/lib/ratch/{dsl/console.rb → core_ext/to_console.rb} +2 -76
  17. data/lib/ratch/core_ext/to_list.rb +29 -0
  18. data/lib/ratch/dsl.rb +494 -49
  19. data/lib/ratch/index.rb +4 -0
  20. data/lib/ratch/io.rb +116 -0
  21. data/lib/ratch/pathglob.rb +73 -0
  22. data/lib/ratch/plugin.rb +55 -0
  23. data/lib/ratch/runmode.rb +69 -0
  24. data/lib/ratch/script.rb +52 -0
  25. data/lib/ratch/service.rb +33 -0
  26. data/lib/ratch/task.rb +249 -0
  27. data/lib/ratch/task2.rb +298 -0
  28. data/test/README +1 -0
  29. data/test/test_helper.rb +4 -0
  30. data/test/test_task.rb +46 -0
  31. metadata +90 -150
  32. data/CHANGES +0 -22
  33. data/TODO +0 -2
  34. data/bin/lt +0 -56
  35. data/bin/ludo +0 -14
  36. data/bin/manifest +0 -451
  37. data/bin/ratch-find +0 -21
  38. data/demo/WILMA +0 -1
  39. data/demo/XR +0 -9
  40. data/demo/lib/foo/foo.rb +0 -7
  41. data/demo/p.rb +0 -9
  42. data/demo/r.rb +0 -6
  43. data/demo/t.rb +0 -3
  44. data/demo/task/config.yaml +0 -4
  45. data/demo/task/one +0 -6
  46. data/demo/task/simplebuild +0 -15
  47. data/demo/task/stats +0 -4
  48. data/demo/task/task +0 -6
  49. data/demo/task/tryme +0 -10
  50. data/lib/ratch/dsl/argv.rb +0 -112
  51. data/lib/ratch/dsl/batch.rb +0 -232
  52. data/lib/ratch/dsl/build.rb +0 -174
  53. data/lib/ratch/dsl/email.rb +0 -108
  54. data/lib/ratch/dsl/file.rb +0 -205
  55. data/lib/ratch/dsl/meta.rb +0 -125
  56. data/lib/ratch/dsl/options.rb +0 -98
  57. data/lib/ratch/dsl/setup.rb +0 -124
  58. data/lib/ratch/dsl/sign.rb +0 -243
  59. data/lib/ratch/dsl/stage.rb +0 -147
  60. data/lib/ratch/dsl/task.rb +0 -139
  61. data/lib/ratch/dsl/upload.rb +0 -436
  62. data/lib/ratch/dsl/zip.rb +0 -59
  63. data/lib/ratch/extra/email.rb +0 -5
  64. data/lib/ratch/extra/stage.rb +0 -5
  65. data/lib/ratch/extra/zip.rb +0 -5
  66. data/lib/ratch/manager.rb +0 -53
  67. data/lib/ratch/manifest.rb +0 -540
  68. data/lib/ratch/metadata/information.rb +0 -258
  69. data/lib/ratch/metadata/package.rb +0 -108
  70. data/lib/ratch/metadata/project.rb +0 -523
  71. data/lib/ratch/metadata/release.rb +0 -108
  72. data/lib/ratch/support/errors.rb +0 -4
  73. data/lib/ratch/support/filename.rb +0 -18
  74. data/lib/ratch/support/filetest.rb +0 -29
  75. data/lib/ratch/toolset/ruby/announce +0 -224
  76. data/lib/ratch/toolset/ruby/compile +0 -49
  77. data/lib/ratch/toolset/ruby/install +0 -77
  78. data/lib/ratch/toolset/ruby/notes +0 -185
  79. data/lib/ratch/toolset/ruby/pack/gem +0 -93
  80. data/lib/ratch/toolset/ruby/pack/tgz +0 -46
  81. data/lib/ratch/toolset/ruby/pack/zip +0 -46
  82. data/lib/ratch/toolset/ruby/publish +0 -57
  83. data/lib/ratch/toolset/ruby/release +0 -8
  84. data/lib/ratch/toolset/ruby/setup +0 -1616
  85. data/lib/ratch/toolset/ruby/stamp +0 -33
  86. data/lib/ratch/toolset/ruby/stats +0 -138
  87. data/lib/ratch/toolset/ruby/test/crosstest +0 -305
  88. data/lib/ratch/toolset/ruby/test/extest +0 -129
  89. data/lib/ratch/toolset/ruby/test/isotest +0 -293
  90. data/lib/ratch/toolset/ruby/test/load +0 -39
  91. data/lib/ratch/toolset/ruby/test/loadtest +0 -28
  92. data/lib/ratch/toolset/ruby/test/syntax +0 -29
  93. data/lib/ratch/toolset/ruby/test/test +0 -26
  94. data/lib/ratch/toolset/sandbox/query +0 -11
  95. data/man/ratch.man +0 -73
  96. data/meta/MANIFEST +0 -130
  97. data/meta/config.yaml +0 -9
  98. data/meta/icli.yaml +0 -16
  99. data/meta/project.yaml +0 -20
  100. data/meta/ratch.roll +0 -2
  101. data/meta/xProjectInfo +0 -41
  102. data/task/clobber/package +0 -10
  103. data/task/man +0 -14
  104. data/task/publish +0 -57
  105. data/task/release +0 -9
  106. data/task/setup +0 -1616
  107. data/task/stats +0 -138
@@ -0,0 +1,298 @@
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
+
@@ -0,0 +1 @@
1
+ Yea. I needs to write test very badly.
@@ -0,0 +1,4 @@
1
+ require 'test/unit'
2
+
3
+ $LOAD_PATH.unshift('lib')
4
+
@@ -0,0 +1,46 @@
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
+
metadata CHANGED
@@ -1,21 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4.6
3
- specification_version: 2
4
2
  name: ratch
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.4.1
7
- date: 2007-12-18 00:00:00 -05:00
8
- summary: Ruby Batch Files
9
- require_paths:
10
- - lib
11
- email:
12
- homepage: http://ratchets.rubyforge.org
13
- rubyforge_project:
14
- description: Ratch is batch-file system suitable for creating project build scripts and any variety of project-oriented command line utilities.
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors: []
7
+
15
8
  autorequire:
16
- default_executable:
17
9
  bindir: bin
18
- has_rdoc:
10
+ cert_chain: []
11
+
12
+ date: 2008-08-18 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: facets
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.4.3
24
+ version:
25
+ description: Ratch is a Ruby-based batch scripting language. It's a DSL over regular RUby to make the life of the batch script writter easier.
26
+ email:
27
+ executables:
28
+ - ratch
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README
33
+ - MANIFEST
34
+ - HISTORY
35
+ - METADATA
36
+ - NEWS
37
+ - COPYING
38
+ files:
39
+ - doc
40
+ - MANIFEST
41
+ - test
42
+ - test/README
43
+ - test/test_helper.rb
44
+ - test/test_task.rb
45
+ - README
46
+ - HISTORY
47
+ - METADATA
48
+ - demo
49
+ - demo/tryme1.ratch
50
+ - demo/tryme-task.ratch
51
+ - lib
52
+ - lib/ratch
53
+ - lib/ratch/runmode.rb
54
+ - lib/ratch/pathglob.rb
55
+ - lib/ratch/core_ext
56
+ - lib/ratch/core_ext/pathname.rb
57
+ - lib/ratch/core_ext/object.rb
58
+ - lib/ratch/core_ext/facets.rb
59
+ - lib/ratch/core_ext/filetest.rb
60
+ - lib/ratch/core_ext/to_list.rb
61
+ - lib/ratch/core_ext/to_console.rb
62
+ - lib/ratch/core_ext/string.rb
63
+ - lib/ratch/dsl.rb
64
+ - lib/ratch/service.rb
65
+ - lib/ratch/core_ext.rb
66
+ - lib/ratch/io.rb
67
+ - lib/ratch/index.rb
68
+ - lib/ratch/plugin.rb
69
+ - lib/ratch/task.rb
70
+ - lib/ratch/task2.rb
71
+ - lib/ratch/script.rb
72
+ - NEWS
73
+ - bin
74
+ - bin/ratch
75
+ - COPYING
76
+ has_rdoc: true
77
+ homepage: http://ratch.rubyforge.org
78
+ post_install_message:
79
+ rdoc_options:
80
+ - --inline-source
81
+ - --title
82
+ - ratch api
83
+ - --main
84
+ - README
85
+ require_paths:
86
+ - lib
19
87
  required_ruby_version: !ruby/object:Gem::Requirement
20
88
  requirements:
21
89
  - - ">="
@@ -28,142 +96,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
28
96
  - !ruby/object:Gem::Version
29
97
  version: "0"
30
98
  version:
31
- platform: ruby
32
- signing_key:
33
- cert_chain: []
34
-
35
- post_install_message:
36
- extensions_fallback:
37
- authors:
38
- - Thomas Sawyer <transfire@gmail.com>
39
- files:
40
- - CHANGES
41
- - bin
42
- - bin/ratch
43
- - bin/ludo
44
- - bin/ratch-find
45
- - bin/lt
46
- - bin/manifest
47
- - TODO
48
- - COPYING
49
- - demo
50
- - demo/t.rb
51
- - demo/lib
52
- - demo/lib/foo
53
- - demo/lib/foo/foo.rb
54
- - demo/task
55
- - demo/task/config.yaml
56
- - demo/task/one
57
- - demo/task/tryme
58
- - demo/task/stats
59
- - demo/task/simplebuild
60
- - demo/task/task
61
- - demo/XR
62
- - demo/WILMA
63
- - demo/p.rb
64
- - demo/r.rb
65
- - lib
66
- - lib/ratch
67
- - lib/ratch/toolset
68
- - lib/ratch/toolset/ruby
69
- - lib/ratch/toolset/ruby/setup
70
- - lib/ratch/toolset/ruby/publish
71
- - lib/ratch/toolset/ruby/install
72
- - lib/ratch/toolset/ruby/announce
73
- - lib/ratch/toolset/ruby/test
74
- - lib/ratch/toolset/ruby/test/syntax
75
- - lib/ratch/toolset/ruby/test/test
76
- - lib/ratch/toolset/ruby/test/loadtest
77
- - lib/ratch/toolset/ruby/test/isotest
78
- - lib/ratch/toolset/ruby/test/crosstest
79
- - lib/ratch/toolset/ruby/test/extest
80
- - lib/ratch/toolset/ruby/test/load
81
- - lib/ratch/toolset/ruby/stats
82
- - lib/ratch/toolset/ruby/notes
83
- - lib/ratch/toolset/ruby/pack
84
- - lib/ratch/toolset/ruby/pack/tgz
85
- - lib/ratch/toolset/ruby/pack/gem
86
- - lib/ratch/toolset/ruby/pack/zip
87
- - lib/ratch/toolset/ruby/compile
88
- - lib/ratch/toolset/ruby/clobber
89
- - lib/ratch/toolset/ruby/release
90
- - lib/ratch/toolset/ruby/stamp
91
- - lib/ratch/toolset/sandbox
92
- - lib/ratch/toolset/sandbox/query
93
- - lib/ratch/support
94
- - lib/ratch/support/filetest.rb
95
- - lib/ratch/support/filename.rb
96
- - lib/ratch/support/errors.rb
97
- - lib/ratch/dsl.rb
98
- - lib/ratch/manager.rb
99
- - lib/ratch/dsl
100
- - lib/ratch/dsl/stage.rb
101
- - lib/ratch/dsl/email.rb
102
- - lib/ratch/dsl/argv.rb
103
- - lib/ratch/dsl/file.rb
104
- - lib/ratch/dsl/upload.rb
105
- - lib/ratch/dsl/console.rb
106
- - lib/ratch/dsl/setup.rb
107
- - lib/ratch/dsl/zip.rb
108
- - lib/ratch/dsl/sign.rb
109
- - lib/ratch/dsl/meta.rb
110
- - lib/ratch/dsl/build.rb
111
- - lib/ratch/dsl/task.rb
112
- - lib/ratch/dsl/options.rb
113
- - lib/ratch/dsl/batch.rb
114
- - lib/ratch/manifest.rb
115
- - lib/ratch/metadata
116
- - lib/ratch/metadata/information.rb
117
- - lib/ratch/metadata/package.rb
118
- - lib/ratch/metadata/project.rb
119
- - lib/ratch/metadata/release.rb
120
- - lib/ratch/extra
121
- - lib/ratch/extra/email.rb
122
- - lib/ratch/extra/zip.rb
123
- - lib/ratch/extra/stage.rb
124
- - man
125
- - man/ratch.man
126
- - meta
127
- - meta/icli.yaml
128
- - meta/config.yaml
129
- - meta/MANIFEST
130
- - meta/project.yaml
131
- - meta/ratch.roll
132
- - meta/xProjectInfo
133
- - README
134
- - task
135
- - task/setup
136
- - task/stats
137
- - task/publish
138
- - task/clobber
139
- - task/clobber/package
140
- - task/man
141
- - task/release
142
- - test
143
- - test/fixtures
144
- test_files:
145
- - test/fixtures
146
- rdoc_options: []
147
-
148
- extra_rdoc_files: []
149
-
150
- executables:
151
- - ratch
152
- - ludo
153
- - ratch-find
154
- - lt
155
- - manifest
156
- extensions: []
157
-
158
99
  requirements: []
159
100
 
160
- dependencies:
161
- - !ruby/object:Gem::Dependency
162
- name: facets
163
- version_requirement:
164
- version_requirements: !ruby/object:Gem::Requirement
165
- requirements:
166
- - - ">="
167
- - !ruby/object:Gem::Version
168
- version: 2.1.0
169
- version:
101
+ rubyforge_project: ratch
102
+ rubygems_version: 1.2.0
103
+ signing_key:
104
+ specification_version: 2
105
+ summary: Ratch is a Ruby-based batch scripting language.
106
+ test_files:
107
+ - test/README
108
+ - test/test_helper.rb
109
+ - test/test_task.rb