org.torquebox.vfs 1.0.0.Beta22

Sign up to get free protection for your applications and to get access to all the features.
data/spec/dir_spec.rb ADDED
@@ -0,0 +1,159 @@
1
+
2
+ require File.dirname(__FILE__) + '/spec_helper.rb'
3
+
4
+ describe "Dir extensions for VFS" do
5
+
6
+ before(:each) do
7
+ @executor = java.util.concurrent::Executors.newScheduledThreadPool( 1 )
8
+ @temp_file_provider = org.jboss.vfs::TempFileProvider.create( "vfs-test", @executor )
9
+
10
+ @archive1_path = File.expand_path( "#{TEST_DATA_DIR}/home/larry/archive1.jar" )
11
+ @archive1_file = org.jboss.vfs::VFS.child( @archive1_path )
12
+ @archive1_mount_point = org.jboss.vfs::VFS.child( @archive1_path )
13
+ @archive1_handle = org.jboss.vfs::VFS.mountZip( @archive1_file, @archive1_mount_point, @temp_file_provider )
14
+
15
+ @archive2_path = "#{@archive1_path}/lib/archive2.jar"
16
+ @archive2_file = org.jboss.vfs::VFS.child( @archive2_path )
17
+ @archive2_mount_point = org.jboss.vfs::VFS.child( @archive2_path )
18
+ @archive2_handle = org.jboss.vfs::VFS.mountZip( @archive2_file, @archive2_mount_point, @temp_file_provider )
19
+
20
+
21
+ end
22
+
23
+ after(:each) do
24
+ @archive2_handle.close
25
+ @archive1_handle.close
26
+ end
27
+
28
+ describe "with vfs urls" do
29
+ it "should allow globbing within archives with explicit vfs" do
30
+ pattern = "vfs:#{@archive1_path}/*"
31
+ items = Dir.glob( pattern )
32
+ items.should_not be_empty
33
+ items.should include File.join( "vfs:#{@archive1_path}", 'web.xml' )
34
+ items.should include File.join( "vfs:#{@archive1_path}", 'lib' )
35
+ end
36
+
37
+ it "should allow globbing within nested archives with explicit vfs" do
38
+ pattern = "vfs:#{@archive2_path}/*"
39
+ items = Dir.glob( pattern )
40
+ items.should_not be_empty
41
+ items.should include "vfs:#{@archive2_path}/manifest.txt"
42
+ end
43
+ end
44
+
45
+ [ :absolute, :relative ].each do |style|
46
+ describe "with #{style} paths" do
47
+
48
+ case ( style )
49
+ when :relative
50
+ prefix = "./#{TEST_DATA_BASE}"
51
+ when :absolute
52
+ prefix = File.expand_path( File.join( File.dirname( __FILE__ ), '..', TEST_DATA_BASE ) )
53
+ end
54
+
55
+ it "should allow globbing without any special globbing characters on normal files" do
56
+ items = Dir.glob( "#{prefix}/home/larry" )
57
+ items.should_not be_empty
58
+ items.should include( "#{prefix}/home/larry" )
59
+ end
60
+
61
+ it "should allow globbing without any special globbing characters on a single normal file" do
62
+ items = Dir.glob( "#{prefix}/home/larry/file1.txt" )
63
+ items.should_not be_empty
64
+ items.should include( "#{prefix}/home/larry/file1.txt" )
65
+ end
66
+
67
+ it "should allow globbing without any special globbing characters for archives" do
68
+ items = Dir.glob( "#{prefix}/home/larry/archive1.jar" )
69
+ items.should_not be_empty
70
+ items.should include( "#{prefix}/home/larry/archive1.jar" )
71
+ end
72
+
73
+ it "should allow globbing without any special globbing characters within archives" do
74
+ items = Dir.glob( "#{prefix}/home/larry/archive1.jar/web.xml" )
75
+ items.should_not be_empty
76
+ items.should include( "#{prefix}/home/larry/archive1.jar/web.xml" )
77
+ end
78
+
79
+ it "should allow globbing without any special globbing characters for nested archives" do
80
+ items = Dir.glob( "#{prefix}/home/larry/archive1.jar/lib/archive2.jar" )
81
+ items.should_not be_empty
82
+ items.should include( "#{prefix}/home/larry/archive1.jar/lib/archive2.jar" )
83
+ end
84
+
85
+ it "should allow globbing without any special globbing characters for within archives" do
86
+ items = Dir.glob( "#{prefix}/home/larry/archive1.jar/lib/archive2.jar/manifest.txt" )
87
+ items.should_not be_empty
88
+ items.should include( "#{prefix}/home/larry/archive1.jar/lib/archive2.jar/manifest.txt" )
89
+ end
90
+
91
+ it "should allow appropriate globbing of normal files" do
92
+ items = Dir.glob( "#{prefix}/home/larry/*" )
93
+ items.should_not be_empty
94
+ items.should include( "#{prefix}/home/larry/file1.txt" )
95
+ items.should include( "#{prefix}/home/larry/file2.txt" )
96
+ items.should include( "#{prefix}/home/larry/archive1.jar" )
97
+ end
98
+
99
+ it "should determine if VFS is needed for archives" do
100
+ items = Dir.glob( "#{@archive1_path}/*" )
101
+ items.should_not be_empty
102
+ end
103
+
104
+ it "should determine if VFS is needed for nested archives" do
105
+ base = "#{prefix}/home/larry/archive1.jar/lib/archive2.jar"
106
+ items = Dir.glob( "#{base}/*" )
107
+ items.should_not be_empty
108
+ items.should include( "#{base}/manifest.txt" )
109
+ end
110
+
111
+ it "should determine if VFS is needed with relative paths" do
112
+ base = "#{prefix}/home/larry/archive1.jar/lib/archive2.jar"
113
+ items = Dir.glob( "#{base}/*" )
114
+ items.should_not be_empty
115
+ items.should include( "#{base}/manifest.txt" )
116
+ end
117
+
118
+ it "should allow alternation globbing on normal files" do
119
+ items = Dir.glob( "#{prefix}/home/{larry}/file{,1,2}.{txt}" )
120
+ items.should_not be_empty
121
+ items.size.should eql 2
122
+ items.should include( "#{prefix}/home/larry/file1.txt" )
123
+ items.should include( "#{prefix}/home/larry/file2.txt" )
124
+ end
125
+
126
+ it "should allow alternation globbing within archives" do
127
+ items = Dir.glob( "#{prefix}/home/larry/archive1.jar/lib/archive*{.zip,.jar,.ear}" )
128
+ items.should_not be_empty
129
+ items.size.should eql 3
130
+ items.should include( "#{prefix}/home/larry/archive1.jar/lib/archive2.jar" )
131
+ items.should include( "#{prefix}/home/larry/archive1.jar/lib/archive3.ear" )
132
+ items.should include( "#{prefix}/home/larry/archive1.jar/lib/archive4.zip" )
133
+ items.should_not include( "#{prefix}/home/larry/archive1.jar/lib/archive4.txt" )
134
+ end
135
+
136
+ it "should allow alternation globbing wiht trailing comma" do
137
+ items = Dir.glob( "#{prefix}/home/todd/index{.en,}{.html,}{.erb,.haml,}" )
138
+ items.should_not be_empty
139
+ items.size.should eql 4
140
+ items.should include( "#{prefix}/home/todd/index.html.erb" )
141
+ items.should include( "#{prefix}/home/todd/index.en.html.erb" )
142
+ items.should include( "#{prefix}/home/todd/index.html.haml" )
143
+ items.should include( "#{prefix}/home/todd/index.en.html.haml" )
144
+ end
145
+
146
+ it "should allow for double-star globbing within archives" do
147
+ #items = Dir.glob( "#{prefix}#{TEST_DATA_DIR}/home/larry/**/*{.zip,.jar,.ear}" )
148
+ items = Dir.glob( "#{prefix}/home/larry/archive1.jar/**/*.jar" )
149
+ items.should_not be_empty
150
+ #items.size.should eql 1
151
+ items.should include( "#{prefix}/home/larry/archive1.jar/lib/archive2.jar" )
152
+ items.should include( "#{prefix}/home/larry/archive1.jar/other_lib/subdir/archive6.jar" )
153
+ items.should_not include( "#{prefix}/home/larry/archive1.jar/lib/archive4.txt" )
154
+ end
155
+
156
+ end
157
+ end
158
+
159
+ end
data/spec/file_spec.rb ADDED
@@ -0,0 +1,234 @@
1
+
2
+ require File.dirname(__FILE__) + '/spec_helper.rb'
3
+ require 'tempfile'
4
+ require 'pathname'
5
+
6
+ describe "File extensions for VFS" do
7
+
8
+ TEST_COPY_BASE = File.join( File.dirname( TEST_DATA_BASE ), 'test-copy' )
9
+
10
+ before(:each) do
11
+ test_copy_dir = File.join( File.dirname( TEST_DATA_DIR ), 'test-copy' )
12
+ FileUtils.rm_rf( test_copy_dir )
13
+ FileUtils.cp_r( TEST_DATA_DIR, test_copy_dir )
14
+ @executor = java.util.concurrent::Executors.newScheduledThreadPool( 1 )
15
+ @temp_file_provider = org.jboss.vfs::TempFileProvider.create( "vfs-test", @executor )
16
+
17
+ #@archive1_path = File.join( TEST_DATA_DIR, "/home/larry/archive1.jar" )
18
+ @archive1_path = File.join( test_copy_dir, "/home/larry/archive1.jar" )
19
+ @archive1_file = org.jboss.vfs::VFS.child( @archive1_path )
20
+ @archive1_mount_point = org.jboss.vfs::VFS.child( @archive1_path )
21
+ @archive1_handle = org.jboss.vfs::VFS.mountZip( @archive1_file, @archive1_mount_point, @temp_file_provider )
22
+
23
+ @archive2_path = "#{@archive1_path}/lib/archive2.jar"
24
+ @archive2_file = org.jboss.vfs::VFS.child( @archive2_path )
25
+ @archive2_mount_point = org.jboss.vfs::VFS.child( @archive2_path )
26
+ @archive2_handle = org.jboss.vfs::VFS.mountZip( @archive2_file, @archive2_mount_point, @temp_file_provider )
27
+ end
28
+
29
+ after(:each) do
30
+ @archive2_handle.close
31
+ @archive1_handle.close
32
+ end
33
+
34
+
35
+ it "should report writable-ness for VFS urls" do
36
+ prefix = File.expand_path( File.join( File.dirname( __FILE__ ), '..', TEST_COPY_BASE ) )
37
+ url = "vfs:#{prefix}/home/larry/file1.txt"
38
+ File.exists?( url ).should be_true
39
+ File.exist?( url ).should be_true
40
+ File.writable?( url ).should be_true
41
+ end
42
+
43
+ it "should expand paths relative to VFS urls as absolute" do
44
+ absolute = File.expand_path("db/development.sqlite3", "vfs:/path/to/app")
45
+ absolute.should eql("/path/to/app/db/development.sqlite3")
46
+ end
47
+
48
+ it "should expand paths relative to VFS pathnames as absolute" do
49
+ absolute = File.expand_path("db/development.sqlite3", Pathname.new("vfs:/path/to/app"))
50
+ absolute.should eql("/path/to/app/db/development.sqlite3")
51
+ end
52
+
53
+ it "should expand absolute Pathname objects correctly" do
54
+ File.expand_path("vfs:/foo").should eql("vfs:/foo")
55
+ File.expand_path(Pathname.new("vfs:/foo")).should eql("vfs:/foo")
56
+ end
57
+
58
+ it "should handle vfs urls as readable" do
59
+ File.readable?( __FILE__ ).should be_true
60
+ File.readable?( "vfs:#{__FILE__}" ).should be_true
61
+ end
62
+
63
+ it "should handle #'s in filenames properly" do
64
+ prefix = File.expand_path( File.join( File.dirname( __FILE__ ), '..', TEST_COPY_BASE ) )
65
+ File.file?( "#{prefix}/#bad-uri#" ).should be_true
66
+ File.file?( "vfs:#{prefix}/#bad-uri#" ).should be_true
67
+ File.file?( "vfs:#{prefix}/#missing#" ).should be_false
68
+ end
69
+
70
+ it "should be able to chmod real files with vfs urls" do
71
+ path = File.expand_path("foo")
72
+ begin
73
+ f = File.new(path, "w")
74
+ FileUtils.chmod( 666, "vfs:#{path}")
75
+ m1 = f.stat.mode
76
+ FileUtils.chmod( 644, "vfs:#{path}")
77
+ m2 = f.stat.mode
78
+ m1.should_not eql(m2)
79
+ ensure
80
+ File.delete(path) rescue nil
81
+ end
82
+ end
83
+
84
+ it "should be able to create new files with vfs urls" do
85
+ lambda {
86
+ File.new("vfs:#{__FILE__}", 'r')
87
+ }.should_not raise_error
88
+ end
89
+
90
+ it "should be able to create new tempfiles" do
91
+ lambda {
92
+ Tempfile.new("temp_file_test")
93
+ }.should_not raise_error
94
+ end
95
+
96
+ describe "open" do
97
+ it "should return File when called on File with VFS url" do
98
+ puts @archive1_path
99
+ File.open("vfs:#{@archive1_path}", 'r').should be_an_instance_of(File)
100
+ end
101
+
102
+ it "should return File when called on File without VFS url" do
103
+ File.open(@archive1_path, 'r').should be_an_instance_of(File)
104
+ end
105
+ end
106
+
107
+ describe "new" do
108
+ it "should return File when called on File with VFS url" do
109
+ File.new("vfs:#{@archive1_path}", 'r').should be_an_instance_of(File)
110
+ end
111
+
112
+ it "should return File when called on File without VFS url" do
113
+ File.new(@archive1_path, 'r').should be_an_instance_of(File)
114
+ end
115
+ end
116
+
117
+ [ :absolute, :relative, :vfs ].each do |style|
118
+ describe "with #{style} paths" do
119
+ case ( style )
120
+ when :relative
121
+ prefix = "./#{TEST_COPY_BASE}"
122
+ when :absolute
123
+ prefix = File.expand_path( File.join( File.dirname( __FILE__ ), '..', TEST_COPY_BASE ) )
124
+ when :vfs
125
+ prefix = "vfs:#{File.expand_path( File.join( File.dirname( __FILE__ ), '..', TEST_COPY_BASE ) )}"
126
+ end
127
+
128
+ it "should provide mtime for normal files" do
129
+ mtime = File.mtime( "#{prefix}/home/larry/file1.txt" )
130
+ mtime.should_not be_nil
131
+ end
132
+
133
+ it "should report writeable-ness for normal files" do
134
+ File.writable?( "#{prefix}/home/larry/file1.txt" ).should be_true
135
+ end
136
+
137
+ # move to kernel_spec
138
+ it "should allow writing with truncation via open()" do
139
+ open( "#{prefix}/home/larry/file1.txt", (File::WRONLY | File::TRUNC | File::CREAT) ) do |file|
140
+ file.puts "howdy"
141
+ end
142
+ contents = File.read( "#{prefix}/home/larry/file1.txt" )
143
+ contents.should eql( "howdy\n" )
144
+ end
145
+
146
+ # move to kernel_spec
147
+ it "should allow writing with appending via open()" do
148
+ open( "#{prefix}/home/larry/file1.txt", (File::WRONLY | File::APPEND | File::CREAT) ) do |file|
149
+ file.puts "howdy"
150
+ end
151
+ contents = File.read( "#{prefix}/home/larry/file1.txt" )
152
+ contents.should eql( "This is file 1\nhowdy\n" )
153
+
154
+ fs_file = File.join( File.dirname(__FILE__), '..', TEST_COPY_BASE, 'home/larry/file1.txt' )
155
+ puts "confirm from #{fs_file}"
156
+ fs_contents = File.read( fs_file )
157
+ fs_contents.should eql( "This is file 1\nhowdy\n" )
158
+ end
159
+
160
+ it "should allow stat for normal files" do
161
+ file = "#{prefix}/home/larry/file1.txt"
162
+ stat = File.stat( file )
163
+ stat.should_not be_nil
164
+ stat.mtime.should eql( File.mtime( file ) )
165
+ end
166
+
167
+ it "should provide mtime for files in an archive" do
168
+ mtime = File.mtime( "#{prefix}/home/larry/archive1.jar/web.xml" )
169
+ mtime.should_not be_nil
170
+ end
171
+
172
+ it "should allow stat for files in an archive" do
173
+ file = "#{prefix}/home/larry/archive1.jar/web.xml"
174
+ stat = File.stat( file )
175
+ stat.should_not be_nil
176
+ stat.mtime.should eql( File.mtime( file ) )
177
+ end
178
+
179
+ it "should provide mtime for files in a nested archive" do
180
+ mtime = File.mtime( "#{prefix}/home/larry/archive1.jar/lib/archive2.jar/manifest.txt" )
181
+ mtime.should_not be_nil
182
+ end
183
+
184
+ it "should test existance of normal files" do
185
+ File.exist?( "#{prefix}/home/larry/file1.txt" ).should be_true
186
+ File.exist?( "#{prefix}/home/larry/file42.txt" ).should be_false
187
+ end
188
+
189
+ it "should test existance of files in an archive" do
190
+ File.exist?( "#{prefix}/home/larry/archive1.jar/web.xml" ).should be_true
191
+ end
192
+
193
+ it "should test directoryness for normal files" do
194
+ File.directory?( "#{prefix}/home/larry" ).should be_true
195
+ File.directory?( "#{prefix}/home/larry/file1.txt" ).should be_false
196
+ end
197
+
198
+ it "should test directoryness for files within an archive" do
199
+ File.directory?( "#{prefix}/home/larry/archive1.jar/lib" ).should be_true
200
+ File.directory?( "#{prefix}/home/larry/archive1.jar/web.xml" ).should be_false
201
+ end
202
+
203
+ it "should test directoryness for non-existant files" do
204
+ File.directory?( "#{prefix}/home/larry/archive1.jar/fib" ).should be_false
205
+ File.directory?( "#{prefix}/home/larry/archive1.jar/tacos" ).should be_false
206
+ File.directory?( "#{prefix}/tacos" ).should be_false
207
+ end
208
+
209
+ it "should test fileness for normal files" do
210
+ File.file?( "#{prefix}/home/larry" ).should be_false
211
+ File.file?( "#{prefix}/home/larry/file1.txt" ).should be_true
212
+ end
213
+
214
+ it "should test fileness for files within an archive" do
215
+ File.file?( "#{prefix}/home/larry/archive1.jar/lib" ).should be_false
216
+ File.file?( "#{prefix}/home/larry/archive1.jar/web.xml" ).should be_true
217
+ end
218
+ end
219
+ end
220
+
221
+ describe 'dirname' do
222
+ it "should properly handle non-vfs paths" do
223
+ File.dirname('/').should == '/'
224
+ File.dirname('/a').should == '/'
225
+ File.dirname('/a/b').should == '/a'
226
+ end
227
+
228
+ it "should return vfs paths when given a vfs path" do
229
+ File.dirname('vfs:/').should == 'vfs:/'
230
+ File.dirname('vfs:/a').should == 'vfs:/'
231
+ File.dirname('vfs:/a/b').should == 'vfs:/a'
232
+ end
233
+ end
234
+ end
data/spec/io_spec.rb ADDED
@@ -0,0 +1,67 @@
1
+
2
+ require File.dirname(__FILE__) + '/spec_helper.rb'
3
+
4
+ describe "IO extensions for VFS" do
5
+
6
+
7
+ before(:each) do
8
+ @executor = java.util.concurrent::Executors.newScheduledThreadPool( 1 )
9
+ @temp_file_provider = org.jboss.vfs::TempFileProvider.create( "vfs-test", @executor )
10
+
11
+ @archive1_path = File.join( TEST_DATA_DIR, "/home/larry/archive1.jar" )
12
+ @archive1_file = org.jboss.vfs::VFS.child( @archive1_path )
13
+ @archive1_mount_point = org.jboss.vfs::VFS.child( @archive1_path )
14
+ @archive1_handle = org.jboss.vfs::VFS.mountZip( @archive1_file, @archive1_mount_point, @temp_file_provider )
15
+
16
+ @archive2_path = "#{@archive1_path}/lib/archive2.jar"
17
+ @archive2_file = org.jboss.vfs::VFS.child( @archive2_path )
18
+ @archive2_mount_point = org.jboss.vfs::VFS.child( @archive2_path )
19
+ @archive2_handle = org.jboss.vfs::VFS.mountZip( @archive2_file, @archive2_mount_point, @temp_file_provider )
20
+ end
21
+
22
+ after(:each) do
23
+ @archive2_handle.close
24
+ @archive1_handle.close
25
+ end
26
+
27
+ it "should allow reading of full VFS URLs" do
28
+ content = IO.read( "vfs:#{TEST_DATA_DIR}/home/larry/archive1.jar/lib/archive2.jar/manifest.txt" ).chomp
29
+ content.should_not be_nil
30
+ content.should_not be_empty
31
+ content.should eql( "This is manifest.txt" )
32
+ end
33
+
34
+ [ :absolute, :relative ].each do |style|
35
+ describe "with #{style} paths" do
36
+
37
+ case ( style )
38
+ when :relative
39
+ prefix = "./#{TEST_DATA_BASE}"
40
+ when :absolute
41
+ prefix = File.expand_path( File.join( File.dirname( __FILE__ ), '..', TEST_DATA_BASE ) )
42
+ end
43
+
44
+ it "should allow reading of regular files" do
45
+ content = IO.read( "#{prefix}/home/larry/file1.txt" ).chomp
46
+ content.should_not be_nil
47
+ content.should_not be_empty
48
+ content.should eql( "This is file 1" )
49
+ end
50
+
51
+ it "should allow reading of files within an archive" do
52
+ content = IO.read( "#{prefix}/home/larry/archive1.jar/web.xml" ).chomp
53
+ content.should_not be_nil
54
+ content.should_not be_empty
55
+ content.should eql( "This is web.xml" )
56
+ end
57
+
58
+ it "should allow reading of files within a nested archive" do
59
+ content = IO.read( "#{prefix}/home/larry/archive1.jar/lib/archive2.jar/manifest.txt" ).chomp
60
+ content.should_not be_nil
61
+ content.should_not be_empty
62
+ content.should eql( "This is manifest.txt" )
63
+ end
64
+ end
65
+ end
66
+
67
+ end
@@ -0,0 +1,9 @@
1
+ require 'java'
2
+
3
+ $: << File.dirname(__FILE__) + '/../lib'
4
+
5
+ require 'vfs'
6
+
7
+ TEST_DATA_BASE = 'target/test-data'
8
+ TEST_DATA_DIR = File.expand_path( File.join( File.dirname(__FILE__), "/../#{TEST_DATA_BASE}" ) )
9
+
data/spec/vfs_spec.rb ADDED
@@ -0,0 +1,20 @@
1
+
2
+ describe "VFS path resolution" do
3
+
4
+ it "should prefix relative paths with the current dir" do
5
+ cwd = Dir.pwd
6
+ path = VFS.resolve_path_url( "foo/bar" )
7
+ path.should match /^vfs:#{cwd}\/foo\/bar$/
8
+ end
9
+
10
+ it "should not prefix absolute paths with the current dir" do
11
+ path = VFS.resolve_path_url( "/foo/bar" )
12
+ path.should match /^vfs:\/foo\/bar$/
13
+ end
14
+
15
+ it "should treat paths with windows drive letters as absolute" do
16
+ path = VFS.resolve_path_url( "C:/foo/bar" )
17
+ path.should match /^vfs:\/C:\/foo\/bar$/
18
+ end
19
+
20
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: org.torquebox.vfs
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: true
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 0
9
+ - Beta22
10
+ version: 1.0.0.Beta22
11
+ platform: ruby
12
+ authors: []
13
+
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-30 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 3
31
+ - 0
32
+ version: 1.3.0
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ - 8
45
+ - 7
46
+ version: 0.8.7
47
+ type: :development
48
+ version_requirements: *id002
49
+ description: ""
50
+ email:
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files: []
56
+
57
+ files:
58
+ - licenses/lgpl-2.1.txt
59
+ - lib/vfs.rb
60
+ - lib/vfs/dir.rb
61
+ - lib/vfs/file.rb
62
+ - lib/vfs/glob_filter.rb
63
+ - lib/vfs/ext/dir.rb
64
+ - lib/vfs/ext/file.rb
65
+ - lib/vfs/ext/io.rb
66
+ - lib/vfs/ext/kernel.rb
67
+ - lib/vfs/ext/vfs.rb
68
+ - spec/dir_spec.rb
69
+ - spec/file_spec.rb
70
+ - spec/io_spec.rb
71
+ - spec/spec_helper.rb
72
+ - spec/vfs_spec.rb
73
+ has_rdoc: true
74
+ homepage: http://www.torquebox.org/vfs/
75
+ licenses:
76
+ - lgpl
77
+ post_install_message:
78
+ rdoc_options: []
79
+
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">"
92
+ - !ruby/object:Gem::Version
93
+ segments:
94
+ - 1
95
+ - 3
96
+ - 1
97
+ version: 1.3.1
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.3.6
102
+ signing_key:
103
+ specification_version: 3
104
+ summary: TorqueBox VFS
105
+ test_files:
106
+ - spec/dir_spec.rb
107
+ - spec/file_spec.rb
108
+ - spec/io_spec.rb
109
+ - spec/vfs_spec.rb