grizzled-ruby 0.1.0 → 0.1.1

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.
data/lib/grizzled/dir.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # Miscellaneous additional directory-related modules and classes.
2
+ #
3
+ #--
1
4
  # This software is released under a BSD license, adapted from
2
5
  # http://opensource.org/licenses/bsd-license.php
3
6
  #
@@ -30,13 +33,8 @@
30
33
  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31
34
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32
35
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
- # ---------------------------------------------------------------------------
36
+ #++
34
37
 
35
- # Grizzled Ruby: A library of miscellaneous, general-purpose Ruby modules.
36
- #
37
- # Author:: Brian M. Clapper (mailto:bmc@clapper.org)
38
- # Copyright:: Copyright (c) 2011 Brian M. Clapper
39
- # License:: BSD License
40
38
  class Dir
41
39
 
42
40
  # Adds a +walk+ method to the standard Ruby +Dir+ class. +walk+ walks a
@@ -61,7 +59,7 @@ module Grizzled
61
59
  # Useful directory-related methods.
62
60
  class Directory
63
61
 
64
- # Walk a directory tree, starting at _dirname_, invoking the supplied
62
+ # Walk a directory tree, starting at +dirname+, invoking the supplied
65
63
  # block on each directory. The block is passed a +Dir+ object. The
66
64
  # directory is walked top-down, not depth-first. To terminate the
67
65
  # traversal, the block should return +false+. Anything else (including
@@ -1,8 +1,7 @@
1
1
  # Provides a file inclusion preprocessor. See the documentation for
2
2
  # the Grizzled::FileUtil::Includer class for complete details.
3
3
  #
4
- # ---
5
- #
4
+ #--
6
5
  # This software is released under a BSD license, adapted from
7
6
  # http://opensource.org/licenses/bsd-license.php
8
7
  #
@@ -35,7 +34,7 @@
35
34
  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36
35
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
36
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
- # ---------------------------------------------------------------------------
37
+ #++
39
38
 
40
39
  require 'open-uri'
41
40
  require 'uri'
@@ -0,0 +1,296 @@
1
+ # Provides convenient, simple front-end functions for the 'rubyzip' gem.
2
+ # NOTE: To use this module, you _must_ have the 'rubyzip' gem installed.
3
+ #
4
+ #--
5
+ # This software is released under a BSD license, adapted from
6
+ # http://opensource.org/licenses/bsd-license.php
7
+ #
8
+ # Copyright (c) 2011, Brian M. Clapper
9
+ # All rights reserved.
10
+ #
11
+ # Redistribution and use in source and binary forms, with or without
12
+ # modification, are permitted provided that the following conditions are
13
+ # met:
14
+ #
15
+ # * Redistributions of source code must retain the above copyright notice,
16
+ # this list of conditions and the following disclaimer.
17
+ #
18
+ # * Redistributions in binary form must reproduce the above copyright
19
+ # notice, this list of conditions and the following disclaimer in the
20
+ # documentation and/or other materials provided with the distribution.
21
+ #
22
+ # * Neither the names "clapper.org", "Grizzled Ruby Library", nor the
23
+ # names of its contributors may be used to endorse or promote products
24
+ # derived from this software without specific prior written permission.
25
+ #
26
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
27
+ # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
28
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
+ # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
30
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
+ #++
38
+
39
+ require 'open-uri'
40
+ require 'uri'
41
+ require 'pathname'
42
+ require 'rubygems'
43
+ require 'zip/zip'
44
+ require 'fileutils'
45
+
46
+ module Grizzled
47
+
48
+ module FileUtil
49
+
50
+ # Namespace module, containing contains some simplified, front-end
51
+ # "zip" and "unzip" utility wrappers for the +rubyzip+ gem. This
52
+ # module requires the +rubyzip+ gem to be present.
53
+ module ZipUtil
54
+
55
+ # +ZipMixin+ provides convenient front-end methods for zipping files;
56
+ # it uses the 'rubyzip' gem under the covers, so you must have
57
+ # 'rubyzip' installed to use this class. Mixing this module into your
58
+ # class mixes in methods that will allow you to zip up files. Related
59
+ # modules and classes:
60
+ #
61
+ # [Grizzled::FileUtil::Zipper] A class that includes this module
62
+ # and can be instantiated by itself.
63
+ # [Grizzled::FileUtil::UnzipMixin] A module mixin for unzipping zip files.
64
+ # [Grizzled::FileUtil::Unzipper] A class that includes `UnzipMixin'
65
+ # and can be instantiated by itself.
66
+ module ZipMixin
67
+
68
+ # Create a zip file from the contents of a directory.
69
+ #
70
+ # Parameters:
71
+ #
72
+ # [+zip_file+] The zip file to open. The file is created if it doesn't
73
+ # already exists.
74
+ # [+directory+] The directory whose contents are to be included in
75
+ # the file.
76
+ # [+options+] Options hash, as described below.
77
+ # [+&select+] If a block (+select+) is given, then +zip+ passes each
78
+ # file or directory to the block and only adds the entry
79
+ # to the zip file if the block returns +true+. If no
80
+ # block is given, then all files and directories are
81
+ # added (subject also to the +:recursive+ option, below).
82
+ #
83
+ # Options:
84
+ #
85
+ # [+:recursive+] If +false+, only zip the files in the directory; if
86
+ # +true+ (the default), recursively zip the entire
87
+ # directory.
88
+ # [+:dir_at_top+] If +false+, don't include zip the directory itself
89
+ # (i.e., the top-level files will be at the top level
90
+ # of the zip file). If +true+ (the default), the
91
+ # the directory itself (the basename) will be the
92
+ # top-level element of the zip file.
93
+ # [+:recreate] If +true+, remove the zip file if it exists already,
94
+ # so it's recreated from scratch. If +false+ (the
95
+ # default), don't recreate the zip file if it doesn't
96
+ # exist; instead, update the existing file.
97
+ #
98
+ # Returns:
99
+ #
100
+ # The +zip_file+ argument, for convenience.
101
+ #
102
+ # Example:
103
+ #
104
+ # require 'grizzled/fileutil/ziputil'
105
+ # import 'tmpdir'
106
+ #
107
+ # include Grizzled::FileUtil::ZipUtil::ZipMixin
108
+ #
109
+ # Dir.mktmpdir do |d|
110
+ # zip zipfile_path, d
111
+ # end
112
+ def zip(zip_file, directory, options = {}, &select)
113
+ recurse = options.fetch(:recursive, true)
114
+ dir_at_top = options.fetch(:dir_at_top, true)
115
+ recreate = options.fetch(:recreate, true)
116
+
117
+ if dir_at_top
118
+ abs_dir = File.expand_path(directory)
119
+ entry_dir = File.basename(abs_dir)
120
+ chdir_to = File.dirname(abs_dir)
121
+ glob = File.join(entry_dir, '**', '*').to_s
122
+ else
123
+ chdir_to = directory
124
+ entry_dir = '.'
125
+ glob = File.join('**', '*').to_s
126
+ end
127
+
128
+ # Remove the existing zip file, if asked to do so.
129
+ FileUtils::rm_f zip_file if recreate
130
+
131
+ # Open the zip file. Then, CD to the appropriate directory
132
+ # and pack it up.
133
+ zip = Zip::ZipFile.open(zip_file, Zip::ZipFile::CREATE)
134
+ FileUtils::cd chdir_to do |d|
135
+ Dir[glob].each do |path|
136
+
137
+ # If the caller supplied a block, only add the file if the block
138
+ # says we can.
139
+ add = block_given? ? select.call(path) : true
140
+ if add
141
+ if File.directory? path
142
+ zip.mkdir path if recurse
143
+ else
144
+ zip.add(path, path) if (File.dirname(path) == '.') or recurse
145
+ end
146
+ end
147
+ end
148
+ zip.close
149
+ end
150
+ zip_file
151
+ end
152
+ end # module ZipMixin
153
+
154
+ # +UnzipMixin+ provides convenient front-end methods for unzipping
155
+ # files; it uses the 'rubyzip' gem under the covers, so you must have
156
+ # 'rubyzip' installed to use this class. Mixing this module into your
157
+ # class mixes in methods that will allow you to unzip zip files.
158
+ # Related modules and classes:
159
+ #
160
+ # [Grizzled::FileUtil::Zipper] A class that includes this module
161
+ # and can be instantiated by itself.
162
+ # [Grizzled::FileUtil::ZipMixin] A module mixin for zipping zip files.
163
+ # [Grizzled::FileUtil::Unzipper] A class that includes `UnzipMixin'
164
+ # and can be instantiated by itself.
165
+ module UnzipMixin
166
+ # Unzips a zip file into a directory.
167
+ #
168
+ # Parameters:
169
+ #
170
+ # [+zip_file+] The zip file to unzip.
171
+ # [+directory+] The directory into which to unzip the file. The
172
+ # directory is created if it doesn't already exist.
173
+ # [+options+] Options hash, as described below.
174
+ # [+&select+] If a block (+select+) is given, then +unzip+ passes each
175
+ # zip file entry name to the block and only unzips the
176
+ # entry if the block returns +true+. If no block is
177
+ # given, then everything is unzipped (subject also to
178
+ # the +:recursive+ option, below).
179
+ #
180
+ # Options:
181
+ #
182
+ # [+:recursive+] If +false+, only extract the top-level files from
183
+ # the zip file. If +true+ (the default),
184
+ # recursively extract everything.
185
+ # [+:overwrite+] If +false+ (the default), do not overwrite existing
186
+ # files in the directory. If +true+, overwrite
187
+ # any existing files in the directory with extracted
188
+ # zip files whose names match.
189
+ #
190
+ # Example:
191
+ #
192
+ # import 'grizzled/fileutil/ziputil'
193
+ # import 'tmpdir'
194
+ #
195
+ # include Grizzled::FileUtil::ZipUtil
196
+ #
197
+ # Dir.mktmpdir do |d|
198
+ # unzip zipfile_path, d
199
+ # # muck with unpacked contents
200
+ # end
201
+
202
+ def unzip(zip_file, directory, options = {}, &select)
203
+ overwrite = options.fetch(:overwrite, false)
204
+ recurse = options.fetch(:recursive, true)
205
+
206
+ zip = Zip::ZipFile.open(zip_file)
207
+ Zip::ZipFile.foreach(zip_file) do |entry|
208
+ file_path = File.join(directory, entry.to_s)
209
+ parent_dir = File.dirname file_path
210
+ if recurse or (parent_dir == '.') or (parent_dir == '')
211
+ # If the caller supplied a block, only extract the file if
212
+ # the block says we can.
213
+ extract = block_given? ? select.call(path) : true
214
+ if extract
215
+ if parent_dir != ''
216
+ if not File.exists? parent_dir
217
+ FileUtils::mkdir_p parent_dir
218
+ end
219
+ end
220
+ end
221
+ end
222
+ zip.extract(entry, file_path)
223
+ end
224
+ end
225
+
226
+ # Call a given block with the list of entries in a zip file, without
227
+ # extracting them.
228
+ #
229
+ # Parameters:
230
+ #
231
+ # [+zip_file+] The zip file to unzip.
232
+ # [+block+] Block to execute on each entry. If omitted, an
233
+ # Enumerator is returned. The block receives a string
234
+ # representing the path of the item in the file.
235
+ def zip_file_entries(zip_file, &block)
236
+ if not block_given?
237
+ a = []
238
+ end
239
+
240
+ Zip::ZipFile.foreach(zip_file) do |entry|
241
+ if block_given?
242
+ block.call(entry.to_s)
243
+ else
244
+ a << entry.to_s
245
+ end
246
+ end
247
+
248
+ if not block_given?
249
+ return a.each
250
+ end
251
+ end
252
+ end # module UnzipMixin
253
+
254
+ # +Zipper+ is a class version of +ZipMixin+ and is useful when you
255
+ # don't want to mix the methods directly into your class or module.
256
+ # It provides the methods of +ZipMixin+ as class methods.
257
+ #
258
+ # Example:
259
+ #
260
+ # require 'grizzled/fileutil/ziputil'
261
+ # import 'tmpdir'
262
+ #
263
+ # include Grizzled::FileUtil::ZipUtil
264
+ #
265
+ # Dir.mktmpdir do |d|
266
+ # Zipper.zip zipfile_path, d
267
+ # end
268
+ class Zipper
269
+ class << self
270
+ include Grizzled::FileUtil::ZipUtil::ZipMixin
271
+ end
272
+ end
273
+
274
+ # +Unzipper+ is a class version of +UnzipMixin+ and is useful when
275
+ # you don't want to mix the methods directly into your class or
276
+ # module. It provides the methods of +UnzipMixin+ as class methods.
277
+ #
278
+ # import 'grizzled/fileutil/ziputil'
279
+ # import 'tmpdir'
280
+ #
281
+ # include Grizzled::FileUtil::ZipUtil
282
+ #
283
+ # Dir.mktmpdir do |d|
284
+ # Unzipper.unzip zipfile_path, d
285
+ # # muck with unpacked contents
286
+ # end
287
+ class Unzipper
288
+ class << self
289
+ include Grizzled::FileUtil::ZipUtil::UnzipMixin
290
+ end
291
+ end
292
+
293
+ end # module ZipUtil
294
+ end # module File
295
+ end # module Grizzled
296
+
@@ -0,0 +1,139 @@
1
+ # Miscellaneous additional Ruby file utility modules and classes.
2
+ #
3
+ #--
4
+ # This software is released under a BSD license, adapted from
5
+ # http://opensource.org/licenses/bsd-license.php
6
+ #
7
+ # Copyright (c) 2011, Brian M. Clapper
8
+ # All rights reserved.
9
+ #
10
+ # Redistribution and use in source and binary forms, with or without
11
+ # modification, are permitted provided that the following conditions are
12
+ # met:
13
+ #
14
+ # * Redistributions of source code must retain the above copyright notice,
15
+ # this list of conditions and the following disclaimer.
16
+ #
17
+ # * Redistributions in binary form must reproduce the above copyright
18
+ # notice, this list of conditions and the following disclaimer in the
19
+ # documentation and/or other materials provided with the distribution.
20
+ #
21
+ # * Neither the names "clapper.org", "Grizzled Ruby Library", nor the
22
+ # names of its contributors may be used to endorse or promote products
23
+ # derived from this software without specific prior written permission.
24
+ #
25
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
26
+ # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
27
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
+ # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
29
+ # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
+ # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
+ # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
+ #++
37
+
38
+ module Grizzled
39
+
40
+ # This module and its submodules contain various file-related utility
41
+ # methods.
42
+ module FileUtil
43
+
44
+ # Exception thrown for a bad directory tree value.
45
+ class BadDirectoryTreeValue < StandardError
46
+ def initialize(key, value)
47
+ super("Directory tree key '#{key}' has unsupported value '#{value}' " +
48
+ "of type #{value.class}. Values must be hashes or strings.")
49
+ end
50
+ end
51
+
52
+ # Exception thrown for bad directory tree key.
53
+ class BadDirectoryTreeKey < StandardError; end
54
+
55
+ # Create a file/directory hierarchy. The hash table specifies the
56
+ # entries, using the following rules.
57
+ #
58
+ # - A hash entry whose value is another hash table is taken to
59
+ # be a directory and will be recursively created.
60
+ # - A hash entry with a String value is a file, whose contents are the
61
+ # string.
62
+ # - A hash entry with an Enumerable value is a file, whose contents are
63
+ # the enumerable values, rendered as strings.
64
+ # - Anything else is an error.
65
+ #
66
+ # For instance, this hash:
67
+ #
68
+ # tree = {"foo" =>
69
+ # {"bar" => {"a" => "File a's contents",
70
+ # "b" => "File b's contents"},
71
+ # "baz" => {"c" => "Blah blah blah"},
72
+ # "xyzzy" => "Yadda yadda yadda"}}
73
+ #
74
+ # results in this directory tree:
75
+ #
76
+ # foo/
77
+ # bar/
78
+ # a # File a's contents
79
+ # b # File a's contents
80
+ #
81
+ # baz/
82
+ # c # Blah blah blah
83
+ #
84
+ # xyzzy # Yadda yadda yadda
85
+ #
86
+ # The keys should be simple file names, with no file separators (i.e.,
87
+ # no parent directories).
88
+ #
89
+ # Parameters:
90
+ #
91
+ # [+directory+] The starting directory, which is created if it does not
92
+ # exist.
93
+ # [+tree+] The entry tree, as described above
94
+ #
95
+ # Returns:
96
+ #
97
+ # A +Dir+ object for +directory+, for convenience.
98
+ def make_directory_tree(directory, tree)
99
+
100
+ require 'fileutils'
101
+
102
+ if File.exists? directory
103
+ if not File.directory? directory
104
+ raise BadDirectoryTreeKey.new("Directory '#{directory}' already " +
105
+ "exists and isn't a directory.")
106
+ end
107
+ else
108
+ Dir.mkdir directory
109
+ end
110
+
111
+ FileUtils.cd directory do
112
+ tree.each do |entry, contents|
113
+ if entry.include? File::SEPARATOR
114
+ raise BadDirectoryTreeKey.new("File tree key '#{key}' contains " +
115
+ "illegal file separator character.");
116
+ end
117
+
118
+ # Must test Hash first, because Hash is Enumerable.
119
+
120
+ if contents.kind_of? Hash
121
+ # This is a directory
122
+ make_directory_tree(entry, contents)
123
+
124
+ elsif contents.kind_of? Enumerable
125
+ f = File.open(File.join(entry), 'w')
126
+ contents.each {|thing| f.write(thing.to_s)}
127
+ f.close
128
+
129
+ else
130
+ raise BadDirectoryTreeValue.new(entry, contents)
131
+ end
132
+ end
133
+ end
134
+
135
+ return Dir.new(directory)
136
+ end
137
+
138
+ end # Module FileUtil
139
+ end # module Grizzled
@@ -1,8 +1,7 @@
1
1
  # Provides a module which, when mixed in, can be used to forward all
2
2
  # missing methods to another object.
3
3
  #
4
- # ---
5
- #
4
+ #--
6
5
  # This software is released under a BSD license, adapted from
7
6
  # http://opensource.org/licenses/bsd-license.php
8
7
  #
@@ -35,7 +34,7 @@
35
34
  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36
35
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
36
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
- # ---------------------------------------------------------------------------
37
+ #++
39
38
 
40
39
  module Grizzled
41
40
 
@@ -1,8 +1,7 @@
1
1
  # Provides a simple stack implementation. See the Grizzled::Stack class
2
2
  # for complete details.
3
3
  #
4
- # ---
5
- #
4
+ #--
6
5
  # This software is released under a BSD license, adapted from
7
6
  # http://opensource.org/licenses/bsd-license.php
8
7
  #
@@ -35,13 +34,8 @@
35
34
  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36
35
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
36
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
- # ---------------------------------------------------------------------------
37
+ #++
39
38
 
40
- # Grizzled Ruby: A library of miscellaneous, general-purpose Ruby modules.
41
- #
42
- # Author:: Brian M. Clapper (mailto:bmc@clapper.org)
43
- # Copyright:: Copyright (c) 2011 Brian M. Clapper
44
- # License:: BSD License
45
39
  module Grizzled
46
40
 
47
41
  # Thrown for un-safe stacks if the stack
@@ -3,8 +3,7 @@
3
3
  # module, the Grizzled::String::UnixShellStringTemplate class and the
4
4
  # Grizzled::String::WindowsCmdStringTemplate class for complete details.
5
5
  #
6
- # ---
7
- #
6
+ #--
8
7
  # This software is released under a BSD license, adapted from
9
8
  # http://opensource.org/licenses/bsd-license.php
10
9
  #
@@ -37,13 +36,8 @@
37
36
  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
38
37
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39
38
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40
- # ---------------------------------------------------------------------------
39
+ #++
41
40
 
42
- # Grizzled Ruby: A library of miscellaneous, general-purpose Ruby modules.
43
- #
44
- # Author:: Brian M. Clapper (mailto:bmc@clapper.org)
45
- # Copyright:: Copyright (c) 2011 Brian M. Clapper
46
- # License:: BSD License
47
41
  module Grizzled
48
42
 
49
43
  module String
data/lib/grizzled/unix.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # Miscellaneous Unix-related modules and classes
2
+ #
3
+ #--
1
4
  # This software is released under a BSD license, adapted from
2
5
  # http://opensource.org/licenses/bsd-license.php
3
6
  #
@@ -30,13 +33,8 @@
30
33
  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31
34
  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32
35
  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
- # ---------------------------------------------------------------------------
36
+ #++
34
37
 
35
- # Grizzled Ruby: A library of miscellaneous, general-purpose Ruby modules.
36
- #
37
- # Author:: Brian M. Clapper (mailto:bmc@clapper.org)
38
- # Copyright:: Copyright (c) 2011 Brian M. Clapper
39
- # License:: BSD License
40
38
  module Grizzled
41
39
 
42
40
  # Unix-related OS things.
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grizzled-ruby
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brian M. Clapper
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-12 00:00:00 -05:00
18
+ date: 2011-03-18 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -30,8 +30,10 @@ extensions: []
30
30
  extra_rdoc_files: []
31
31
 
32
32
  files:
33
+ - lib/grizzled/fileutil.rb
33
34
  - lib/grizzled/stack.rb
34
35
  - lib/grizzled/fileutil/includer.rb
36
+ - lib/grizzled/fileutil/ziputil.rb
35
37
  - lib/grizzled/dir.rb
36
38
  - lib/grizzled/forwarder.rb
37
39
  - lib/grizzled/string/template.rb