torquebox-vfs 1.1.1-java → 2.0.0.beta1-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +1,15 @@
1
1
  # Copyright 2008-2011 Red Hat, Inc, and individual contributors.
2
- #
2
+ #
3
3
  # This is free software; you can redistribute it and/or modify it
4
4
  # under the terms of the GNU Lesser General Public License as
5
5
  # published by the Free Software Foundation; either version 2.1 of
6
6
  # the License, or (at your option) any later version.
7
- #
7
+ #
8
8
  # This software is distributed in the hope that it will be useful,
9
9
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
11
  # Lesser General Public License for more details.
12
- #
12
+ #
13
13
  # You should have received a copy of the GNU Lesser General Public
14
14
  # License along with this software; if not, write to the Free
15
15
  # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
Binary file
@@ -1,17 +1,10 @@
1
1
  module TorqueboxVfs
2
- VERSION = '1.1.1'
3
- MAVEN_VERSION = '1.1.1'
2
+ VERSION = '2.0.0.beta1'
3
+ MAVEN_VERSION = '2.0.0.beta1'
4
4
  end
5
5
  begin
6
6
  require 'java'
7
7
  require File.dirname(__FILE__) + '/torquebox-vfs.jar'
8
- require File.dirname(__FILE__) + '/jboss-vfs-3.0.0.GA.jar'
9
- require File.dirname(__FILE__) + '/jboss-logging-spi-2.2.0.CR1.jar'
10
- require File.dirname(__FILE__) + '/jboss-logging-3.0.0.Beta4.jar'
11
- require File.dirname(__FILE__) + '/jboss-logmanager-1.2.0.CR9.jar'
12
- require File.dirname(__FILE__) + '/jboss-logmanager-log4j-1.0.0.CR3.jar'
13
- require File.dirname(__FILE__) + '/log4j-1.2.14.jar'
14
- require File.dirname(__FILE__) + '/jboss-common-core-2.2.17.GA.jar'
15
8
  rescue LoadError
16
9
  puts 'JAR-based gems require JRuby to load. Please visit www.jruby.org.'
17
10
  raise
@@ -33,11 +33,15 @@ require 'torquebox/vfs/ext/dir'
33
33
  require 'torquebox/vfs/ext/pathname'
34
34
  require 'torquebox/vfs/ext/kernel'
35
35
  require 'torquebox/vfs/ext/jdbc'
36
+ require 'torquebox/vfs/ext/process'
36
37
 
37
38
 
38
39
  module TorqueBox
39
40
  module VFS
40
41
  def self.resolve_within_archive(path)
42
+ if ( path.respond_to?(:vfs_path?) && path.vfs_path? )
43
+ return "vfs:#{path.to_s}"
44
+ end
41
45
  path = path.to_s
42
46
  return path if ( path =~ %r(^vfs:) )
43
47
  cur = path
@@ -117,7 +117,7 @@ class Dir
117
117
 
118
118
  def glob_one(pattern, flags=0, &block)
119
119
  #str_pattern = "#{pattern}"
120
- str_pattern = pattern.to_str
120
+ str_pattern = File.path_to_str(pattern)
121
121
 
122
122
  segments = str_pattern.split( '/' )
123
123
 
@@ -144,7 +144,7 @@ class Dir
144
144
 
145
145
  matcher_segments = segments - base_segments
146
146
  matcher = matcher_segments.join( '/' )
147
- dirs_only = (str_pattern[-1,1] == '/')
147
+ dirs_only = ( str_pattern[-1,1] == '/' )
148
148
  #puts "matcher [#{matcher}]"
149
149
 
150
150
  begin
@@ -164,8 +164,15 @@ class Dir
164
164
  #puts "base=#{base}"
165
165
  # puts "preparing glob filter for path #{child_path} and match #{matcher}"
166
166
  filter = TorqueBox::VFS::GlobFilter.new( child_path, matcher, dirs_only )
167
- #puts "filter is #{filter}"
168
- paths = starting_point.getChildrenRecursively( filter ).collect{|e|
167
+ paths = starting_point.getChildrenRecursively( filter )
168
+
169
+ if ( str_pattern[str_pattern.length - 3, str_pattern.length - 1] == '**/' )
170
+ # if asking for double-splat and a trailing slash, the root counts too.
171
+ paths << org.jboss.vfs.VFS.child( child_path )
172
+ end
173
+
174
+ # paths = starting_point.getChildrenRecursively( filter ).collect{ |e|
175
+ paths = paths.collect { |e|
169
176
  #path_name = e.path_name
170
177
  path_name = e.getPathNameRelativeTo( starting_point )
171
178
  #puts "(collect) path_name=#{path_name}"
@@ -41,6 +41,26 @@ class File
41
41
  alias_method :new_without_vfs, :new
42
42
  alias_method :rename_without_vfs, :rename
43
43
  alias_method :join_without_vfs, :join
44
+ alias_method :to_s_without_vfs, :to_s
45
+
46
+ def to_s
47
+ s = to_s_without_vfs
48
+ vfs_path?( s ) ? s[4..-1] : s
49
+ end
50
+
51
+ #
52
+ # File.realpath is a 1.9ism
53
+ #
54
+ if ( File.respond_to? :realpath )
55
+ alias_method :realpath_without_vfs, :realpath
56
+ def realpath(path, dir_string=nil)
57
+ if vfs_path?( path )
58
+ virtual_file = TorqueBox::VFS.virtual_file( path )
59
+ return virtual_file.physical_file.to_s
60
+ end
61
+ realpath_without_vfs( path, dir_string )
62
+ end
63
+ end
44
64
 
45
65
  def open(fname,mode_str='r', flags=nil, &block)
46
66
  if ( Fixnum === fname )
@@ -267,6 +287,8 @@ class File
267
287
  end
268
288
 
269
289
  def vfs_path?(path)
290
+ return path.vfs_path? if path.respond_to?(:vfs_path?)
291
+ return path.path =~ /^vfs:/ if path.respond_to?(:path)
270
292
  path.to_s =~ /^vfs:/
271
293
  end
272
294
 
@@ -31,31 +31,23 @@ class IO
31
31
  write = false
32
32
  read = false
33
33
  create = false
34
+ binary = false
34
35
  case ( mode_str )
35
36
  when /r/
36
37
  read = true
37
- write = false
38
- append = false
39
- create = false
40
38
  when /r\+/
41
39
  read = true
42
40
  write = true
43
- create = false
44
- append = false
45
41
  when /w/
46
- read = false
47
42
  write = true
48
43
  create = true
49
- append = false
50
44
  truncate = true
51
45
  when /w\+/
52
- read = false
46
+ read = true
53
47
  write = true
54
48
  create = true
55
- append = false
56
49
  truncate = true
57
50
  when /a/
58
- read = false
59
51
  write = true
60
52
  create = true
61
53
  append = true
@@ -63,6 +55,7 @@ class IO
63
55
  read = true
64
56
  write = true
65
57
  create = true
58
+ append = true
66
59
  when Fixnum
67
60
  if ( mode_str & File::RDONLY != 0 )
68
61
  read = true
@@ -88,13 +81,15 @@ class IO
88
81
  end
89
82
  end
90
83
 
84
+ binary = mode_str =~ /b/
85
+
91
86
  # VFS doesn't correctly handle relative paths when
92
87
  # retrieving the physical file so expand it
93
88
  fd = File.expand_path( fd )
94
89
  virtual_file = org.jboss.vfs.VFS.child( fd )
95
90
 
96
91
  if ( ! create && ! virtual_file.exists )
97
- raise Errno::ENOENT
92
+ raise Errno::ENOENT, fd
98
93
  end
99
94
 
100
95
  if ( read && ! write )
@@ -105,16 +100,17 @@ class IO
105
100
  java_out = java.io::FileOutputStream.new( physical_file, append )
106
101
  ruby_io = java_out.to_io
107
102
  elsif ( read && write )
108
- raise Error.new( "Random-access on VFS not supported" )
103
+ raise ArgumentError.new( "Random-access on VFS not supported" )
109
104
  end
110
105
 
106
+ ruby_io.binmode if binary
111
107
  file_io = TorqueBox::VFS::Ext::VirtualFile.new( ruby_io, fd )
112
108
 
113
109
  if ( block )
114
110
  begin
115
111
  block.call( file_io )
116
112
  ensure
117
- file_io.close
113
+ file_io.close unless file_io.closed?
118
114
  end
119
115
  else
120
116
  return file_io
@@ -153,6 +149,15 @@ class IO
153
149
  vfs_open( name ).readlines( *options )
154
150
  end
155
151
  end
152
+
153
+ if RUBY_VERSION =~ /1.9/
154
+ alias_method :copy_stream_without_vfs, :copy_stream
155
+ def copy_stream(src, dst, *args)
156
+ src = src.__getobj__ if src.is_a?( TorqueBox::VFS::Ext::VirtualFile )
157
+ dst = dst.__getobj__ if dst.is_a?( TorqueBox::VFS::Ext::VirtualFile )
158
+ copy_stream_without_vfs( src, dst, *args )
159
+ end
160
+ end
156
161
  end
157
162
 
158
163
  end
@@ -23,15 +23,18 @@ class Java::java.sql::DriverManager
23
23
  # Monkey patch getConnection so we can sort out local filesystem url's for
24
24
  # SQLite (we need to remove the 'vfs:' from the url). This works
25
25
  # for activerecord-jdbc-adapter v1.1.2 and under. For v1.1.3 and
26
- # up, see web/web-core/src/main/java/org/torquebox/rails/core/boot.rb
26
+ # up, see web/src/main/java/org/torquebox/rails/boot.rb
27
27
  def getConnection(url, *params)
28
28
 
29
29
  # Remove any VFS prefix from the url (for SQLite)
30
30
  url = url.sub(':vfs:', ':')
31
31
 
32
32
  # Call the correct version based on the number of arguments
33
- raise NotImplementedError.new('Need to hande the single param version of getConnection') if params.count == 0
34
- params.count == 1 ? get_connection_with_properties(url, params.first) : get_connection_with_username_password(url, params[0], params[1])
33
+ case params.count
34
+ when 0 then get_connection_with_url(url)
35
+ when 1 then get_connection_with_properties(url, params.first)
36
+ when 2 then get_connection_with_username_password(url, params[0], params[1])
37
+ end
35
38
  end
36
39
 
37
40
  def registerDriver(driver)
@@ -41,12 +44,22 @@ class Java::java.sql::DriverManager
41
44
 
42
45
  private
43
46
 
47
+ # The 1 param version of getConnection passing in a url
48
+ def get_connection_with_url(url)
49
+ get_connection_without_vfs(url)
50
+ rescue => e
51
+ raise e unless @driver
52
+ # If we did register a driver, try to connect using it directly
53
+ props = java.util.Properties.new
54
+ @driver.connect(url, props)
55
+ end
56
+
44
57
  # The 2 param version of getConnection passing in url and a hash of properties
45
58
  def get_connection_with_properties(url, properties)
46
59
  get_connection_without_vfs(url, properties)
47
60
  rescue => e
48
61
  raise e unless @driver
49
- # If we did register a driver, try to connection using it directly
62
+ # If we did register a driver, try to connect using it directly
50
63
  @driver.connect(url, properties)
51
64
  end
52
65
 
@@ -19,6 +19,7 @@ module Kernel
19
19
 
20
20
  private
21
21
  alias_method :open_without_vfs, :open
22
+ alias_method :backtick_without_vfs, '`'
22
23
 
23
24
  def open(name, *rest, &block)
24
25
  if ( name =~ /^vfs:/ )
@@ -27,4 +28,11 @@ module Kernel
27
28
  open_without_vfs( name, *rest, &block )
28
29
  end
29
30
 
31
+ def `(*args)
32
+ non_vfs_args = args.map do |arg|
33
+ arg.is_a?(String) ? arg.gsub("vfs:", "") : arg
34
+ end
35
+ backtick_without_vfs(*non_vfs_args)
36
+ end
37
+
30
38
  end
@@ -21,16 +21,23 @@ class Pathname
21
21
 
22
22
  alias_method :realpath_without_vfs, :realpath
23
23
  alias_method :relative_without_vfs, :relative?
24
+ alias_method :to_s_without_vfs, :to_s
24
25
 
25
26
  def realpath
26
27
  vfs_path? ? expand_path : realpath_without_vfs
27
28
  end
28
29
 
29
30
  def vfs_path?
30
- @path.to_s =~ /^vfs:/
31
+ @path =~ /^vfs:/
31
32
  end
32
33
 
33
34
  def relative?
34
35
  vfs_path? ? false : relative_without_vfs
35
36
  end
37
+
38
+ def to_s
39
+ s = to_s_without_vfs
40
+ vfs_path? ? s[4..-1] : s
41
+ end
42
+
36
43
  end
@@ -0,0 +1,34 @@
1
+ # Copyright 2008-2011 Red Hat, Inc, and individual contributors.
2
+ #
3
+ # This is free software; you can redistribute it and/or modify it
4
+ # under the terms of the GNU Lesser General Public License as
5
+ # published by the Free Software Foundation; either version 2.1 of
6
+ # the License, or (at your option) any later version.
7
+ #
8
+ # This software is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this software; if not, write to the Free
15
+ # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
16
+ # 02110-1301 USA, or see the FSF site: http://www.fsf.org.
17
+
18
+ module Process
19
+
20
+ class << self
21
+
22
+ if self.respond_to?(:spawn)
23
+ alias_method :spawn_without_vfs, :spawn
24
+ def spawn(*args)
25
+ non_vfs_args = args.map do |arg|
26
+ arg.is_a?(String) ? arg.gsub("vfs:", "") : arg
27
+ end
28
+ spawn_without_vfs(*non_vfs_args)
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -36,7 +36,6 @@ module TorqueBox
36
36
  end
37
37
  @regexp = Regexp.new( regexp_str )
38
38
  @dirs_only = dirs_only
39
- # puts "glob #{glob} ==> #{@regexp}"
40
39
  end
41
40
 
42
41
  def accepts(file)
@@ -1,5 +1,5 @@
1
- GNU LESSER GENERAL PUBLIC LICENSE
2
- Version 2.1, February 1999
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 2.1, February 1999
3
3
 
4
4
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
5
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -10,7 +10,7 @@
10
10
  as the successor of the GNU Library Public License, version 2, hence
11
11
  the version number 2.1.]
12
12
 
13
- Preamble
13
+ Preamble
14
14
 
15
15
  The licenses for most software are designed to take away your
16
16
  freedom to share and change it. By contrast, the GNU General Public
@@ -112,7 +112,7 @@ modification follow. Pay close attention to the difference between a
112
112
  former contains code derived from the library, whereas the latter must
113
113
  be combined with the library in order to run.
114
114
 
115
- GNU LESSER GENERAL PUBLIC LICENSE
115
+ GNU LESSER GENERAL PUBLIC LICENSE
116
116
  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
117
 
118
118
  0. This License Agreement applies to any software library or other
@@ -146,7 +146,7 @@ such a program is covered only if its contents constitute a work based
146
146
  on the Library (independent of the use of the Library in a tool for
147
147
  writing it). Whether that is true depends on what the Library does
148
148
  and what the program that uses the Library does.
149
-
149
+
150
150
  1. You may copy and distribute verbatim copies of the Library's
151
151
  complete source code as you receive it, in any medium, provided that
152
152
  you conspicuously and appropriately publish on each copy an
@@ -432,7 +432,7 @@ decision will be guided by the two goals of preserving the free status
432
432
  of all derivatives of our free software and of promoting the sharing
433
433
  and reuse of software generally.
434
434
 
435
- NO WARRANTY
435
+ NO WARRANTY
436
436
 
437
437
  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
438
  WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
@@ -455,7 +455,7 @@ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
455
  SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
456
  DAMAGES.
457
457
 
458
- END OF TERMS AND CONDITIONS
458
+ END OF TERMS AND CONDITIONS
459
459
 
460
460
  How to Apply These Terms to Your New Libraries
461
461
 
@@ -500,5 +500,3 @@ necessary. Here is a sample; alter the names:
500
500
  Ty Coon, President of Vice
501
501
 
502
502
  That's all there is to it!
503
-
504
-
@@ -44,21 +44,21 @@ describe "Dir extensions for VFS" do
44
44
  end
45
45
 
46
46
  it "should ignore dotdirs by default" do
47
- items = Dir.glob( "#{prefix}/**/*" )
48
- items.should_not be_empty
49
- items.size.should eql(32)
47
+ items = Dir.glob( "#{prefix}/**/*" )
48
+ items.should_not be_empty
49
+ items.size.should eql(33)
50
50
  end
51
51
 
52
52
  it "should handle trailing double splats" do
53
- items = Dir.glob( "#{prefix}/**" )
54
- items.should_not be_empty
55
- items.size.should eql(5)
53
+ items = Dir.glob( "#{prefix}/**" )
54
+ items.should_not be_empty
55
+ items.size.should eql(6)
56
56
  end
57
57
 
58
58
  it "should handle Rails 2 glob-related arglebargle" do
59
- items = Dir.glob( "#{prefix}/**/*/**" )
60
- items.should_not be_empty
61
- items.size.should eql(27)
59
+ items = Dir.glob( "#{prefix}/**/*/**" )
60
+ items.should_not be_empty
61
+ items.size.should eql(27)
62
62
  end
63
63
 
64
64
  it "should ignore dotfiles by default" do
@@ -247,6 +247,51 @@ describe "Dir extensions for VFS" do
247
247
  items.should include( "#{prefix}/home" )
248
248
  items.should include( "#{prefix}/sound of music" )
249
249
  end
250
+
251
+ it "should match the current directory on a double-splat with trailing slash" do
252
+ items = Dir.glob( "#{prefix}/**/" )
253
+
254
+ puts "\nFor 255:"
255
+ items.each {|i| puts i}
256
+
257
+ items.should_not be_empty
258
+ items.size.should eql(4)
259
+ items.should include( "#{prefix}/" )
260
+ items.should include( "#{prefix}/dotfiles" )
261
+ items.should include( "#{prefix}/home" )
262
+ items.should include( "#{prefix}/sound of music" )
263
+ end
264
+
265
+ it "should match files on a double splat without a trailing slash" do
266
+ items = Dir.glob( "#{prefix}/**" )
267
+ items.should_not be_empty
268
+ items.size.should eql(6)
269
+ items.should include( "#{prefix}/dotfiles" )
270
+ items.should include( "#{prefix}/home" )
271
+ items.should include( "#{prefix}/sound of music" )
272
+ items.should include( "#{prefix}/#bad-uri#" )
273
+ items.should include( "#{prefix}/biscuit.jpg" )
274
+ items.should include( "#{prefix}/views%2Flocalhost%3A8080%2Fposts" )
275
+ end
276
+
277
+ it "should match using question marks" do
278
+ items = Dir.glob( "#{prefix}/biscuit.jp?" )
279
+ items.should_not be_empty
280
+ items.size.should eql(1)
281
+ items.should include( "#{prefix}/biscuit.jpg" )
282
+ end
283
+
284
+ it "should match files on a single splat without a trailing slash" do
285
+ items = Dir.glob( "#{prefix}/*" )
286
+ items.should_not be_empty
287
+ items.size.should eql(6)
288
+ items.should include( "#{prefix}/dotfiles" )
289
+ items.should include( "#{prefix}/home" )
290
+ items.should include( "#{prefix}/sound of music" )
291
+ items.should include( "#{prefix}/#bad-uri#" )
292
+ items.should include( "#{prefix}/biscuit.jpg" )
293
+ items.should include( "#{prefix}/views%2Flocalhost%3A8080%2Fposts" )
294
+ end
250
295
 
251
296
  it "should allow for multiple single-star globbing" do
252
297
  items = Dir.glob( "#{prefix}/home/**/*file*.txt" )
@@ -274,6 +319,16 @@ describe "Dir extensions for VFS" do
274
319
  items.should include( "#{prefix}/home/larry/file1.txt" )
275
320
  end
276
321
 
322
+ it "should allow globbing with pathnames via []" do
323
+ items = []
324
+ path = Pathname.new( prefix ).join( "home", "larry", "*" )
325
+ lambda {
326
+ items = Dir[path]
327
+ }.should_not raise_error
328
+
329
+ items.should include( "#{prefix}/home/larry/file1.txt" )
330
+ end
331
+
277
332
  it "should create new Dirs" do
278
333
  lambda {
279
334
  Dir.new(prefix)
@@ -7,6 +7,20 @@ describe "File extensions for VFS" do
7
7
 
8
8
  extend TestDataCopyHelper
9
9
 
10
+ it "should set __FILE__ correctly" do
11
+ __FILE__.should =~ /^#{absolute_prefix}/
12
+ end
13
+
14
+ if ( File.respond_to? :realpath)
15
+ it "should handle realpath on a normal path" do
16
+ File.realpath( __FILE__ ).should == __FILE__
17
+ end
18
+
19
+ it "should handle realpath on a VFS path" do
20
+ File.realpath( vfs_path(__FILE__) ).should =~ /^#{absolute_prefix}/
21
+ end
22
+ end
23
+
10
24
  it "should report writable-ness for VFS urls" do
11
25
  prefix = test_copy_base_path( :relative )
12
26
  url = vfs_path( "#{prefix}/home/larry/file1.txt" )
@@ -40,12 +54,12 @@ describe "File extensions for VFS" do
40
54
 
41
55
  it "should expand paths relative to VFS pathnames as VFS" do
42
56
  absolute = File.expand_path("db/development.sqlite3", Pathname.new( vfs_path( "/path/to/app" ) ) )
43
- absolute.should eql( vfs_path("#{absolute_prefix}/path/to/app/db/development.sqlite3") )
57
+ absolute.should eql( vfs_path( "#{absolute_prefix}/path/to/app/db/development.sqlite3" ) )
44
58
  end
45
59
 
46
60
  it "should expand absolute Pathname objects correctly" do
47
61
  File.expand_path( vfs_path("/foo") ).should eql( vfs_path("/foo") )
48
- File.expand_path(Pathname.new( vfs_path("/foo"))).should eql( vfs_path("/foo") )
62
+ File.expand_path(Pathname.new( vfs_path("/foo"))).should eql( "/foo" )
49
63
  end
50
64
 
51
65
  it "should return first path when given two vfs paths" do
@@ -206,6 +220,26 @@ describe "File extensions for VFS" do
206
220
  f.close
207
221
  }.should_not raise_error
208
222
  end
223
+
224
+ it "should respect binary mode for vfs files that don't yet exist" do
225
+ prefix = test_copy_base_path( :absolute )
226
+ in_path = "#{prefix}/biscuit.jpg"
227
+ out_path = vfs_path( "#{prefix}/binfile" )
228
+ data = File.read( in_path )
229
+ File.open( out_path, 'wb' ) { |f| f.write( data ) }
230
+ File.size( out_path ).should == File.size( in_path )
231
+ File.read( out_path ).should == data
232
+ end
233
+
234
+ it "should respect binary mode for vfs files that already exist" do
235
+ prefix = test_copy_base_path( :absolute )
236
+ path = "#{prefix}/biscuit.jpg"
237
+ data = File.read( path )
238
+ size = File.size( path )
239
+ File.open( path, 'wb' ) { |f| f.write( data ) }
240
+ File.size( path ).should == size
241
+ File.read( path ).should == data
242
+ end
209
243
  end
210
244
 
211
245
  describe "new" do
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ require 'fileutils'
3
+
4
+ describe "fileutils compatibility with VFS" do
5
+
6
+ extend TestDataCopyHelper
7
+
8
+ it "should support fileutils.cp for vfs paths" do
9
+ prefix = test_copy_base_path( :vfs )
10
+ source = File.join( prefix, "home", "larry", "file1.txt" )
11
+ destination = File.join( prefix, "home", "larry", "file1_copy.txt" )
12
+ FileUtils.cp( source, destination )
13
+ File.exist?( destination ).should be_true
14
+ end
15
+ end
@@ -5,6 +5,18 @@ describe "IO extensions for VFS" do
5
5
 
6
6
  extend TestDataHelper
7
7
 
8
+ describe "vfs_open" do
9
+ before(:each) do
10
+ @file = vfs_path( test_data_base_path( :absolute ) + "/home/larry/file1.txt" )
11
+ end
12
+
13
+ it "should raise when given RDWR" do
14
+ lambda {
15
+ IO.vfs_open( @file, File::RDWR )
16
+ }.should raise_error( ArgumentError )
17
+ end
18
+ end
19
+
8
20
  [ :absolute, :relative ].each do |style|
9
21
  [ :vfs, :normal ].each do |vfs_style|
10
22
  describe "with #{vfs_style} #{style} paths" do
@@ -13,6 +25,14 @@ describe "IO extensions for VFS" do
13
25
  prefix = vfs_path( prefix ) if vfs_style == :vfs
14
26
 
15
27
  describe 'read' do
28
+
29
+ it "should raise a proper exception if file not found" do
30
+ begin
31
+ content = IO.read( "#{prefix}/joey/jo/jo/junior.shabadoo" )
32
+ rescue => ex
33
+ ex.message.should include "joey/jo/jo/junior.shabadoo"
34
+ end
35
+ end
16
36
 
17
37
  it "should allow reading of regular files" do
18
38
  content = IO.read( "#{prefix}/home/larry/file1.txt" ).chomp
@@ -11,6 +11,12 @@ describe "JDBC Extensions for VFS" do
11
11
 
12
12
  describe "getConnection" do
13
13
 
14
+ it "should call get_connection_with_url if passed a single argument" do
15
+ @driver_manager.should_receive(:get_connection_with_url).
16
+ with("url")
17
+ @driver_manager.getConnection("url")
18
+ end
19
+
14
20
  it "should call get_connection_with_properties if passed two arguments" do
15
21
  properties = Properties.new
16
22
  @driver_manager.should_receive(:get_connection_with_properties).
@@ -26,6 +32,23 @@ describe "JDBC Extensions for VFS" do
26
32
 
27
33
  end
28
34
 
35
+ describe "get_connection_with_url" do
36
+
37
+ it "should delegate to original method" do
38
+ @driver_manager.should_receive(:get_connection_without_vfs).
39
+ with("url")
40
+ @driver_manager.send(:get_connection_with_url, "url")
41
+ end
42
+
43
+ it "should fall back to connect directly" do
44
+ driver = mock('driver')
45
+ driver.should_receive(:connect).with("url", an_instance_of(Properties))
46
+ @driver_manager.registerDriver(driver)
47
+ @driver_manager.send(:get_connection_with_url, "url")
48
+ end
49
+
50
+ end
51
+
29
52
  describe "get_connection_with_properties" do
30
53
 
31
54
  it "should delegate to original method" do
@@ -0,0 +1,32 @@
1
+
2
+ require File.dirname(__FILE__) + '/spec_helper.rb'
3
+
4
+ describe "Kernel stuff" do
5
+
6
+ extend PathHelper
7
+ extend TestDataCopyHelper
8
+
9
+ #
10
+ # Kernel.require_relative is a 1.9ism
11
+ #
12
+
13
+ if ( Kernel.respond_to? :require_relative )
14
+ it "should be able to handle require_relative" do
15
+ require_relative "relatively_requireable"
16
+ end
17
+
18
+ it "should be able to handle require_relative with VFS __FILE__" do
19
+ eval( 'require_relative "relatively_requireable"', binding, vfs_path(__FILE__) )
20
+ end
21
+ end
22
+
23
+ unless TESTING_ON_WINDOWS
24
+ it "should remove vfs: prefix from backtick commands" do
25
+ prefix = test_copy_base_path( :vfs )
26
+ path = File.join( prefix, "home", "larry", "file1.txt" )
27
+ result = `ls #{path} 2>&1`
28
+ result.should_not match( /No such file/i )
29
+ end
30
+ end
31
+
32
+ end
@@ -4,13 +4,34 @@ require 'pathname'
4
4
 
5
5
  describe "Pathname extensions for VFS" do
6
6
 
7
+ it "should test VFSness nicely" do
8
+ pathname = Pathname.new("vfs:/tmp/test")
9
+ pathname.should be_vfs_path
10
+ end
11
+
12
+ it "should test VFSness nicely for Windows" do
13
+ pathname = Pathname.new("vfs:/C/tmp/test")
14
+ pathname.should be_vfs_path
15
+ end
16
+
7
17
  describe "realpath" do
18
+
8
19
  it "should expand VFS paths" do
9
20
  pathname = Pathname.new("vfs:/tmp/test")
10
21
  pathname.should_receive(:expand_path).and_return(Pathname.new("/expanded/path"))
11
22
  pathname.realpath.to_s.should == "/expanded/path"
12
23
  end
13
24
 
25
+ it "should expand VFS paths correctly on Windows" do
26
+ pathname = Pathname.new("vfs:/C:/tmp/test")
27
+ pathname.expand_path.to_s.should == "/C:/tmp/test" and pathname.vfs_path?.should be_true
28
+ end
29
+
30
+ it "should apply realpath to VFS paths correctly on windows" do
31
+ pathname = Pathname.new("vfs:/C:/tmp/test")
32
+ pathname.realpath.to_s.should == "/C:/tmp/test" and pathname.vfs_path?.should be_true
33
+ end
34
+
14
35
  it "should find real path for non-VFS paths" do
15
36
  pathname = Pathname.new("/tmp/test")
16
37
  pathname.should_receive(:realpath_without_vfs).and_return(Pathname.new("/real/path"))
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Process compatibility with VFS" do
4
+
5
+ extend TestDataCopyHelper
6
+
7
+ if Process.respond_to?(:spawn) && !TESTING_ON_WINDOWS
8
+ it "should remove vfs: prefix from spawned commands" do
9
+ prefix = test_copy_base_path( :vfs )
10
+ path = File.join( prefix, "home", "larry", "file1.txt" )
11
+ r, w = IO.pipe
12
+ Process.spawn( {}, "ls #{path} 2>&1", STDERR => w, STDOUT => w )
13
+ w.close
14
+ result = r.readlines.join("")
15
+ r.close
16
+ result.should_not match( /No such file/i )
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,2 @@
1
+
2
+ puts "required, yay."
@@ -11,7 +11,7 @@ describe "VFS path resolution" do
11
11
  it "should return pathnames with vfs: prefix unmodified" do
12
12
  pathname = Pathname.new("vfs:/tmp/foo")
13
13
  path = TorqueBox::VFS.resolve_within_archive(pathname)
14
- path.should == pathname.to_s
14
+ pathname.vfs_path?.should be_true and path.should == "vfs:#{pathname}"
15
15
  end
16
16
  end
17
17
 
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: torquebox-vfs
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.1.1
4
+ prerelease: 6
5
+ version: 2.0.0.beta1
6
6
  platform: java
7
7
  authors:
8
8
  - The TorqueBox Team
@@ -10,8 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-09 00:00:00 -04:00
14
- default_executable:
13
+ date: 2011-12-02 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: rspec
@@ -21,7 +20,7 @@ dependencies:
21
20
  requirements:
22
21
  - - "="
23
22
  - !ruby/object:Gem::Version
24
- version: 2.3.0
23
+ version: 2.7.0
25
24
  type: :development
26
25
  version_requirements: *id001
27
26
  - !ruby/object:Gem::Dependency
@@ -30,9 +29,12 @@ dependencies:
30
29
  requirement: &id002 !ruby/object:Gem::Requirement
31
30
  none: false
32
31
  requirements:
33
- - - "="
32
+ - - ">="
34
33
  - !ruby/object:Gem::Version
35
34
  version: 0.8.7
35
+ - - <
36
+ - !ruby/object:Gem::Version
37
+ version: 1.0.0
36
38
  type: :development
37
39
  version_requirements: *id002
38
40
  description: ""
@@ -48,13 +50,6 @@ files:
48
50
  - licenses/lgpl-2.1.txt
49
51
  - lib/torquebox-vfs.jar
50
52
  - lib/torquebox-vfs.rb
51
- - lib/jboss-vfs-3.0.0.GA.jar
52
- - lib/jboss-logging-spi-2.2.0.CR1.jar
53
- - lib/jboss-logging-3.0.0.Beta4.jar
54
- - lib/jboss-logmanager-1.2.0.CR9.jar
55
- - lib/jboss-logmanager-log4j-1.0.0.CR3.jar
56
- - lib/log4j-1.2.14.jar
57
- - lib/jboss-common-core-2.2.17.GA.jar
58
53
  - lib/gem_hook.rb
59
54
  - lib/org.torquebox.vfs.rb
60
55
  - lib/vfs.rb
@@ -71,20 +66,24 @@ files:
71
66
  - lib/torquebox/vfs/ext/jdbc.rb
72
67
  - lib/torquebox/vfs/ext/kernel.rb
73
68
  - lib/torquebox/vfs/ext/pathname.rb
69
+ - lib/torquebox/vfs/ext/process.rb
74
70
  - lib/torquebox/vfs/ext/tempfile.rb
75
71
  - lib/torquebox/vfs/ext/vfs.rb
76
72
  - lib/torquebox/vfs/ext/virtual_file.rb
77
73
  - spec/dir_spec.rb
78
74
  - spec/file_spec.rb
79
75
  - spec/file_test_spec.rb
76
+ - spec/fileutils_spec.rb
80
77
  - spec/io_spec.rb
81
78
  - spec/jdbc_spec.rb
79
+ - spec/kernel_spec.rb
82
80
  - spec/pathname_spec.rb
81
+ - spec/process_spec.rb
82
+ - spec/relatively_requireable.rb
83
83
  - spec/spec_helper.rb
84
84
  - spec/vfs_dir_spec.rb
85
85
  - spec/vfs_spec.rb
86
- has_rdoc: true
87
- homepage: http://www.torquebox.org/gem-parent/torquebox-vfs/
86
+ homepage: http://www.torquebox.org/torquebox-gems-parent/torquebox-vfs/
88
87
  licenses:
89
88
  - lgpl
90
89
  post_install_message:
@@ -101,13 +100,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
100
  required_rubygems_version: !ruby/object:Gem::Requirement
102
101
  none: false
103
102
  requirements:
104
- - - ">="
103
+ - - ">"
105
104
  - !ruby/object:Gem::Version
106
- version: "0"
105
+ version: 1.3.1
107
106
  requirements: []
108
107
 
109
108
  rubyforge_project:
110
- rubygems_version: 1.5.1
109
+ rubygems_version: 1.8.9
111
110
  signing_key:
112
111
  specification_version: 3
113
112
  summary: TorqueBox VFS
@@ -115,8 +114,11 @@ test_files:
115
114
  - spec/dir_spec.rb
116
115
  - spec/file_spec.rb
117
116
  - spec/file_test_spec.rb
117
+ - spec/fileutils_spec.rb
118
118
  - spec/io_spec.rb
119
119
  - spec/jdbc_spec.rb
120
+ - spec/kernel_spec.rb
120
121
  - spec/pathname_spec.rb
122
+ - spec/process_spec.rb
121
123
  - spec/vfs_dir_spec.rb
122
124
  - spec/vfs_spec.rb
Binary file
Binary file