rook 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/README.txt +124 -37
  2. data/bin/rook +8 -902
  3. data/doc-api/classes/BZ2.html +111 -0
  4. data/doc-api/classes/BZ2/Reader.html +234 -0
  5. data/doc-api/classes/Digest.html +107 -0
  6. data/doc-api/classes/Digest/Base.html +254 -0
  7. data/doc-api/classes/Enumerable.html +430 -0
  8. data/doc-api/classes/File.html +208 -0
  9. data/doc-api/classes/FileUtils.html +758 -0
  10. data/doc-api/classes/Kernel.html +317 -0
  11. data/doc-api/classes/Rook.html +148 -0
  12. data/doc-api/classes/Rook/Assertion.html +164 -0
  13. data/doc-api/classes/Rook/AssertionError.html +111 -0
  14. data/doc-api/classes/Rook/CommandOptionError.html +113 -0
  15. data/doc-api/classes/Rook/Commands.html +1158 -0
  16. data/doc-api/classes/Rook/Cookbook.html +357 -0
  17. data/doc-api/classes/Rook/CookbookError.html +161 -0
  18. data/doc-api/classes/Rook/CookbookValidator.html +215 -0
  19. data/doc-api/classes/Rook/Kitchen.html +875 -0
  20. data/doc-api/classes/Rook/KitchenHelper.html +386 -0
  21. data/doc-api/classes/Rook/Main.html +325 -0
  22. data/doc-api/classes/Rook/Parameters.html +443 -0
  23. data/doc-api/classes/Rook/Recipe.html +546 -0
  24. data/doc-api/classes/Rook/RookError.html +111 -0
  25. data/doc-api/classes/Rook/Util.html +408 -0
  26. data/doc-api/classes/Rook/Util/UndefinedPropertyError.html +160 -0
  27. data/doc-api/created.rid +1 -0
  28. data/doc-api/files/__/README_txt.html +313 -0
  29. data/doc-api/files/rook/commands_rb.html +115 -0
  30. data/doc-api/files/rook/cookbook_rb.html +115 -0
  31. data/doc-api/files/rook/helper/bz2_rb.html +114 -0
  32. data/doc-api/files/rook/helper/digest_rb.html +114 -0
  33. data/doc-api/files/rook/helper/enumerable_rb.html +107 -0
  34. data/doc-api/files/rook/helper/file_rb.html +107 -0
  35. data/doc-api/files/rook/helper/fileutils_rb.html +124 -0
  36. data/doc-api/files/rook/helper/kernel_rb.html +107 -0
  37. data/doc-api/files/rook/kitchen_rb.html +117 -0
  38. data/doc-api/files/rook/main_rb.html +117 -0
  39. data/doc-api/files/rook/recipe_rb.html +114 -0
  40. data/doc-api/files/rook/util_rb.html +115 -0
  41. data/doc-api/files/rook_rb.html +122 -0
  42. data/doc-api/fr_class_index.html +50 -0
  43. data/doc-api/fr_file_index.html +40 -0
  44. data/doc-api/fr_method_index.html +181 -0
  45. data/doc-api/index.html +24 -0
  46. data/doc-api/rdoc-style.css +208 -0
  47. data/examples/hello_c/Rookbook.rb +37 -0
  48. data/examples/hello_c/Rookbook.yaml +45 -0
  49. data/examples/hello_c/hello.c +6 -3
  50. data/examples/project/README.txt +8 -0
  51. data/examples/project/Rookbook.props +1 -0
  52. data/examples/project/Rookbook.rb +120 -0
  53. data/examples/project/Rookbook.yaml +117 -0
  54. data/examples/project/bin/example +12 -0
  55. data/examples/project/example.gemspec +29 -0
  56. data/examples/project/lib/example.rb +36 -0
  57. data/examples/{archive → project}/lib/example/bar.rb +0 -0
  58. data/examples/{archive → project}/lib/example/baz.rb +0 -0
  59. data/examples/{archive → project}/lib/example/foo.rb +0 -0
  60. data/examples/project/setup.rb +1331 -0
  61. data/examples/project/test/test.rb +27 -0
  62. data/lib/rook.rb +50 -0
  63. data/lib/rook/commands.rb +426 -0
  64. data/lib/rook/cookbook.rb +237 -0
  65. data/lib/rook/helper/bz2.rb +39 -0
  66. data/lib/rook/helper/digest.rb +76 -0
  67. data/lib/rook/helper/enumerable.rb +121 -0
  68. data/lib/rook/helper/file.rb +50 -0
  69. data/lib/rook/helper/fileutils.rb +340 -0
  70. data/lib/rook/helper/kernel.rb +108 -0
  71. data/lib/rook/kitchen.rb +668 -0
  72. data/lib/rook/main.rb +280 -0
  73. data/lib/rook/recipe.rb +259 -0
  74. data/lib/rook/rookbook.schema.yaml +156 -0
  75. data/lib/rook/util.rb +172 -0
  76. data/rook.gemspec +56 -0
  77. metadata +139 -45
  78. data/examples/archive/COPYING +0 -340
  79. data/examples/archive/README.txt +0 -1
  80. data/examples/archive/Rookbook +0 -56
  81. data/examples/archive/bin/example +0 -0
  82. data/examples/archive/doc/index.html +0 -0
  83. data/examples/archive/doc/index.txt +0 -0
  84. data/examples/archive/lib/example.rb +0 -0
  85. data/examples/archive/test/test1.rb +0 -0
  86. data/examples/archive/test/test2.rb +0 -0
  87. data/examples/hello_c/Rookbook +0 -24
@@ -0,0 +1,50 @@
1
+ ##
2
+ ## $Rev: 20 $
3
+ ## $Release: 0.1.0 $
4
+ ## copyright(c) 2006 kuwata-lab.com all rights reserved.
5
+ ##
6
+
7
+
8
+ ##
9
+ ## extends File class
10
+ ##
11
+ class File
12
+
13
+
14
+ ##
15
+ ## edit file content
16
+ ##
17
+ ## ex.
18
+ ## File.edit('file.txt') do |content|
19
+ ## content.gsub!(/\$Release\$/, '1.0.0')
20
+ ## content.gsub!(/\$Copyright\$/, '(c)kuwata-lab')
21
+ ## end
22
+ ##
23
+ def self.edit(filename, &block)
24
+ File.open(filename, 'r+') do |f|
25
+ content = f.read()
26
+ #yield(content)
27
+ block.arity == 1 ? yield(content) : yield(content, filename)
28
+ f.rewind()
29
+ f.truncate(0)
30
+ f.write(content)
31
+ end if test(?f, filename)
32
+ end
33
+
34
+
35
+ ##
36
+ ## write file
37
+ ##
38
+ ## ex.
39
+ ## content = <<END
40
+ ## foo
41
+ ## bar
42
+ ## END
43
+ ## File.write('file.txt', content)
44
+ ##
45
+ def self.write(filename, content)
46
+ File.open(filename, 'w') { |f| f.write(content) }
47
+ end
48
+
49
+
50
+ end
@@ -0,0 +1,340 @@
1
+ ##
2
+ ## $Rev: 26 $
3
+ ## $Release: 0.1.0 $
4
+ ## copyright(c) 2006 kuwata-lab.com all rights reserved.
5
+ ##
6
+
7
+
8
+ require 'fileutils'
9
+
10
+
11
+
12
+ ##
13
+ ## extends FileUtils
14
+ ##
15
+ ## requires 'rubyzip', 'bz2', and 'minitar' library.
16
+ ## * rubyzip - http://raa.ruby-lang.org/project/rubyzip/
17
+ ## * bz2 - http://raa.ruby-lang.org/project/bz2/
18
+ ## * minitar - http://raa.ruby-lang.org/project/minitar/
19
+ ##
20
+ module FileUtils
21
+
22
+
23
+ ##
24
+ ## copy files into dest with timestamp preserved
25
+ ##
26
+ ## ex1.
27
+ ## cp_p('file1', 'file2')
28
+ ## ex2.
29
+ ## cp_p(['file1', 'file2', 'file3'], 'dir')
30
+ ##
31
+ def cp_p(src, dest, options={})
32
+ (options ||= {})[:preserve] = true
33
+ cp(src, dest, options)
34
+ end
35
+ module_function :cp_p
36
+
37
+
38
+ ##
39
+ ## copy files into dest recursively with timestamp preserved
40
+ ##
41
+ ## ex1.
42
+ ## cp_pr('file1', 'file2')
43
+ ## ex2.
44
+ ## cp_pr(['file1', 'file2', 'file3'], 'dir')
45
+ ##
46
+ def cp_pr(src, dest, options={})
47
+ (options ||= {})[:preserve] = true
48
+ cp_r(src, dest, options)
49
+ end
50
+ module_function :cp_pr
51
+
52
+
53
+ ##
54
+ ## copy files into dest keeping file type (symbolic link, device file, etc)
55
+ ##
56
+ ## ex1.
57
+ ## cp_a('file1', 'file2')
58
+ ## ex2.
59
+ ## cp_a(['file1', 'file2', 'file3'], 'dir')
60
+ ##
61
+ def cp_a(src, dest, options={})
62
+ fu_check_options(options, :preserve, :verbose, :noop)
63
+ if options[:verbose]
64
+ opt_str = options[:preserve] ? ' -ap' : ' -p'
65
+ arg_str = [src, dest].flatten.join(' ')
66
+ fu_output_message("cp#{opt_str} #{arg_str}")
67
+ end
68
+ return if options[:noop]
69
+ dereference_root = false #options[:dereference_root]
70
+ (src.is_a?(Array) ? src : [src]).each do |item|
71
+ Dir.glob(item).each do |filename|
72
+ copy_entry(item, dest, options[:preserve], dereference_root)
73
+ end
74
+ end
75
+ end
76
+ module_function :cp_a
77
+
78
+
79
+ ##
80
+ ## copy files to dest with keeping it's filepath
81
+ ##
82
+ ## ex1. copy 'lib/rook/rook.rb' into 'tmp/lib/rook/rook.rb'
83
+ ## store('lib/rook/rook.rb', 'tmp')
84
+ ## ex2. copy all 'lib/**/*.rb' into 'tmp/lib/**/*.rb'
85
+ ## cp_a(Dir.glob('lib/**/*.rb'), 'tmp')
86
+ ##
87
+ def store(src, dest, options={})
88
+ _store(:cp, src, dest, options)
89
+ end
90
+ module_function :store
91
+
92
+
93
+ ##
94
+ ## copy files to dest with keeping it's filepath and timestamp
95
+ ##
96
+ def store_p(src, dest, options={})
97
+ _store(:cp_p, src, dest, options)
98
+ end
99
+ module_function :store_p
100
+
101
+
102
+ ##
103
+ ## copy files to dest with keeping it's filepath and file type
104
+ ##
105
+ def store_a(src, dest, options={})
106
+ _store(:cp_a, src, dest, options)
107
+ end
108
+ module_function :store_a
109
+
110
+
111
+ def _store(cp_cmd, src, dest, options={}) # :nodoc:
112
+ fu_check_options(options, :preserve, :verbose, :noop)
113
+ if options[:verbose]
114
+ opt_str = options[:preserve] ? ' -p' : ''
115
+ arg_str = [src, dest].flatten.join(' ')
116
+ fu_output_message("store#{opt_str} #{arg_str}")
117
+ end
118
+ return if options[:noop]
119
+ options.delete(:verbose)
120
+ options.delete(:noop)
121
+ mkdir_options = options.dup
122
+ cp_options = options.dup
123
+ (src.is_a?(Array) ? src : [ src ]).each do |filename|
124
+ if test(?d, filename)
125
+ path = "#{dest}/#{filename}"
126
+ mkdir_p(path, mkdir_options) unless test(?d, path)
127
+ else
128
+ dir = File.dirname(filename)
129
+ base = File.basename(filename)
130
+ path = "#{dest}/#{dir}"
131
+ mkdir_p(path, mkdir_options) unless test(?d, path)
132
+ __send__(cp_cmd, filename, path, cp_options)
133
+ end
134
+ end
135
+ end
136
+ module_function :_store
137
+
138
+
139
+ ##
140
+ ## create *.zip file
141
+ ##
142
+ ## requires 'rubyzip' library.
143
+ ##
144
+ ## ex1.
145
+ ## zip 'file.zip', Dir.glob('*.txt')
146
+ ## ex2.
147
+ ## zip 'file.zip', Dir.glob('*.txt'), :basedir=>'path'
148
+ ##
149
+ def zip(zipfilename, filenames, options={})
150
+ require 'zip/zip'
151
+ basedir = options[:basedir]
152
+ filenames = [ filenames ] unless filenames.is_a?(Array)
153
+ if options[:verbose]
154
+ opt_str = ''
155
+ opt_str << 'r' if options[:recursive]
156
+ opt_str = ' -' + opt_str unless opt_str.empty?
157
+ fu_output_message("zip#{opt_str} #{zipfilename} #{filenames.join(' ')}")
158
+ end
159
+ return if options[:noop]
160
+ ::Zip::ZipFile.open(zipfilename, true) do |zipfile|
161
+ filenames.each do |fname|
162
+ list = test(?d, fname) && options[:recursive] ? Dir.glob("#{fname}/**/*") : [fname]
163
+ list.each do |filename|
164
+ entry = basedir ? "#{basedir}/#{fname}" : filename
165
+ zipfile.add(entry, filename)
166
+ end
167
+ end
168
+ end
169
+ end
170
+ module_function :zip
171
+
172
+
173
+ ##
174
+ ## create *.zip file with keeping filepath
175
+ ##
176
+ ## requires 'rubyzip' library.
177
+ ##
178
+ def zip_r(zipfilename, filenames, options={})
179
+ (options ||= {})[:recursive] = true
180
+ zip(zipfilename, filenames, options)
181
+ end
182
+ module_function :zip_r
183
+
184
+
185
+ ##
186
+ ## unzip *.zip file
187
+ ##
188
+ ## requires 'rubyzip' library.
189
+ ##
190
+ ## ex1.
191
+ ## unzip 'foo-1.1.zip', :basedir=>'foo'
192
+ ## ex2.
193
+ ## unzip 'foo-1.1.zip', ['foo1.txt', 'foo2.txt']
194
+ ##
195
+ def unzip(zipfilename, filenames=nil, options={})
196
+ require 'zip/zip'
197
+ basedir = options[:basedir]
198
+ filenames = [ filenames ] if filenames && !filenames.is_a?(Array)
199
+ if options[:verbose]
200
+ opt_str = ''
201
+ opt_str << " -r #{basedir}" if options[:basedir]
202
+ fu_output_message("unzip#{opt_str} #{zipfilename} #{filenames ? filenames.join(' ') : ''}")
203
+ end
204
+ return if options[:noop]
205
+ ::Zip::ZipFile.open(zipfilename) do |zipfile|
206
+ zipfile.each do |entry| # entry.class == Zip::ZipEntry
207
+ next unless filenames.nil? || filenames.include?(entry.name)
208
+ filename = basedir ? "#{basedir}/#{entry}" : "#{entry}"
209
+ if test(?e, filename)
210
+ FileUtils.rm_rf(filename) # if entry.file? || !test(?d, filename)
211
+ else
212
+ FileUtils.mkdir_p(File.dirname(filename))
213
+ end
214
+ zipfile.extract(entry, filename)
215
+ end
216
+ end
217
+ end
218
+ module_function :unzip
219
+
220
+
221
+ ##
222
+ ## create *.tar file
223
+ ##
224
+ ## requires 'minitar' library.
225
+ ##
226
+ ## ex1.
227
+ ## tar_cf 'foo.tar', Dir.glob('*.txt')
228
+ ##
229
+ def tar_cf(tarfilename, filenames, options={})
230
+ _tar_cf(tarfilename, filenames, options, '-cf', null)
231
+ end
232
+ module_function :tar_cf
233
+
234
+
235
+ ##
236
+ ## extract *.tar file
237
+ ##
238
+ ## requires 'minitar' library.
239
+ ##
240
+ ## ex1.
241
+ ## tar_xf 'foo.tar'
242
+ ## ex2.
243
+ ## tar_xf 'foo.tar', ['file1.txt', 'file2.txt']
244
+ ##
245
+ def tar_xf(tarfilename, filenames=[], options={})
246
+ _tar_xf(tarfilename, filenames, options, '-xf', null)
247
+ end
248
+ module_function :tar_xf
249
+
250
+
251
+ ##
252
+ ## create *.tar.gz file
253
+ ##
254
+ ## requires 'minitar' library.
255
+ ##
256
+ ## ex1.
257
+ ## tar_czf 'foo.tar.gz', Dir.glob('*.txt')
258
+ ##
259
+ def tar_czf(tarfilename, filenames, options={})
260
+ require 'zlib'
261
+ _tar_cf(tarfilename, filenames, options, '-czf', ::Zlib::GzipWriter)
262
+ end
263
+ module_function :tar_czf
264
+
265
+
266
+ ##
267
+ ## extract *.tar.gz file
268
+ ##
269
+ ## requires 'minitar' library.
270
+ ##
271
+ ## ex1.
272
+ ## tar_xzf 'foo.tar.gz'
273
+ ## ex2.
274
+ ## tar_xzf 'foo.tar', ['file1.txt', 'file2.txt']
275
+ ##
276
+ def tar_xzf(tarfilename, filenames=[], options={})
277
+ require 'zlib'
278
+ _tar_xf(tarfilename, filenames, options, "-xzf", ::Zlib::GzipReader)
279
+ end
280
+ module_function :tar_xzf
281
+
282
+
283
+ ##
284
+ ## create *.tar.bz2 file
285
+ ##
286
+ ## requires 'bz2' and 'minitar' library.
287
+ ##
288
+ ## ex1.
289
+ ## tar_cjf 'foo.tar.bz2', Dir.glob('*.txt')
290
+ ##
291
+ def tar_cjf(tarfilename, filenames, options={})
292
+ require 'bz2'
293
+ require 'rook/helper/bz2'
294
+ _tar_cf(tarfilename, filenames, options, '-cjf', ::BZ2::Writer)
295
+ end
296
+ module_function :tar_cjf
297
+
298
+
299
+ ##
300
+ ## extract *.tar.bz2 file
301
+ ##
302
+ ## requires 'bz2' and 'minitar' library.
303
+ ##
304
+ ## ex1.
305
+ ## tar_xjf 'foo.tar.bz2'
306
+ ## ex2.
307
+ ## tar_xjf 'foo.tar.bz2', ['file1.txt', 'file2.txt']
308
+ ##
309
+ def tar_xjf(tarfilename, filenames=[], options={})
310
+ require 'bz2'
311
+ require 'rook/bz2-helper'
312
+ _tar_xf(tarfilename, filenames, options, "-xjf", ::BZ2::Writer)
313
+ end
314
+ module_function :tar_xjf
315
+
316
+
317
+ def _tar_cf(tarfilename, filenames, options, taropt, writer_class) # :nodoc:
318
+ require 'archive/tar/minitar'
319
+ puts "tar #{taropt} #{tarfilename} #{filenames.to_a.join(' ')}" if options[:verbose]
320
+ return if options[:noop]
321
+ f = File.open(tarfilename, 'wb')
322
+ writer = writer_class ? writer_class.new(f) : f
323
+ ::Archive::Tar::Minitar.pack(filenames, writer) # Warning: writer will be closed!
324
+ end
325
+ module_function :_tar_cf
326
+
327
+
328
+ def _tar_xf(tarfilename, filenames, options, taropt, reader_class) #:nodoc:
329
+ require 'archive/tar/minitar'
330
+ puts "tar #{taropt} #{tarfilename} #{filenames.to_a.join(' ')}" if options[:verbose]
331
+ return if options[:noop]
332
+ basedir = options[:basedir] || '.'
333
+ f = File.open(tarfilename, 'rb')
334
+ reader = reader_class ? reader_class.new(f) : f
335
+ ::Archive::Tar::Minitar.unpack(reader, basedir) # Warning: reader will be closed!
336
+ end
337
+ module_function :_tar_xf
338
+
339
+
340
+ end
@@ -0,0 +1,108 @@
1
+ ##
2
+ ## $Rev: 20 $
3
+ ## $Release: 0.1.0 $
4
+ ## copyright(c) 2006 kuwata-lab.com all rights reserved.
5
+ ##
6
+
7
+
8
+ ##
9
+ ## add several global functions.
10
+ ##
11
+ ## these are convenience for non-ruby user and compatibility with Kook.
12
+ ##
13
+ module Kernel
14
+
15
+
16
+ module_function
17
+
18
+
19
+ def array_prefix(array, prefix)
20
+ return array.collect { |item| "#{prefix}#{item}" }
21
+ end
22
+
23
+
24
+ #--
25
+ #def array_prefix!(array, prefix)
26
+ # return array.collect! { |item| "#{prefix}#{item}" }
27
+ #end
28
+ #++
29
+
30
+
31
+ def array_suffix(array, suffix)
32
+ return array.collect { |item| "#{item}#{suffix}" }
33
+ end
34
+
35
+
36
+ #--
37
+ #def array_prefix!(array, prefix)
38
+ # return array.collect! { |item| "#{item}#{suffix}" }
39
+ #end
40
+ #++
41
+
42
+
43
+ def array_sandwich(array, prefix, suffix)
44
+ return array.collect { |item| "#{prefix}#{item}#{suffix}" }
45
+ end
46
+
47
+
48
+ #--
49
+ #def array_sandwich!(array, prefix, suffix)
50
+ # return array.collect! { |item| "#{prefix}#{item}#{suffix}" }
51
+ #end
52
+ #++
53
+
54
+
55
+ def array_delete_suffix(array, suffix=/\.\w+\z/)
56
+ return array.collect { |item| item.sub(suffix, '') }
57
+ end
58
+
59
+
60
+ #--
61
+ #def array_delete_suffix!(array, suffix=/\.\w+\z/)
62
+ # return array.collect { |item| item.sub(suffix, '') }
63
+ #end
64
+ #++
65
+
66
+
67
+ def array_delete_prefix(array, prefix)
68
+ return array.collect { |item| item.sub(prefix, '') }
69
+ end
70
+
71
+
72
+ #--
73
+ #def array_delete_prefix!(array, prefix)
74
+ # return array.collect! { |item| item.sub(prefix, '') }
75
+ #end
76
+ #++
77
+
78
+
79
+ def array_join(array, separator)
80
+ return array.join(separator)
81
+ end
82
+
83
+
84
+ def array_basenames(array)
85
+ return array.collect { |item| File.basename(item) }
86
+ end
87
+
88
+
89
+ #--
90
+ #def array_basenames!(array)
91
+ # return array.collect { |item| File.basename(item) }
92
+ #end
93
+ #++
94
+
95
+
96
+ def array_dirnames(array)
97
+ return array.collect { |item| File.dirname(item) }
98
+ end
99
+
100
+
101
+ #--
102
+ #def array_dirnames!(array)
103
+ # return array.collect { |item| File.dirname(item) }
104
+ #end
105
+ #++
106
+
107
+
108
+ end