el_finder 1.0.6 → 1.0.7

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.
@@ -63,12 +63,12 @@ module ElFinder
63
63
 
64
64
  #
65
65
  def to_hash(pathname)
66
- Base64.encode64(pathname == @root ? '/' : pathname.relative_path_from(@root).to_s).chomp
66
+ Base64.encode64(pathname.path.to_s).chomp
67
67
  end # of to_hash
68
68
 
69
69
  #
70
70
  def from_hash(hash)
71
- pathname = ElFinder::Pathname.new_with_root(@root, Base64.decode64(hash))
71
+ pathname = @root + Base64.decode64(hash)
72
72
  end # of from_hash
73
73
 
74
74
  #
@@ -154,7 +154,7 @@ module ElFinder
154
154
  end
155
155
 
156
156
  file = @current + @params[:name]
157
- if !file.exist? && FileUtils.touch(file)
157
+ if !file.exist? && file.touch
158
158
  @response[:select] = [to_hash(file)]
159
159
  _open(@current)
160
160
  else
@@ -199,7 +199,7 @@ module ElFinder
199
199
  select = []
200
200
  @params[:upload].to_a.each do |file|
201
201
  dst = @current + @options[:original_filename_method].call(file)
202
- FileUtils.mv(file.path, dst)
202
+ FileUtils.mv(file.path, dst.fullpath)
203
203
  select << to_hash(dst)
204
204
  end
205
205
  @response[:select] = select
@@ -227,15 +227,15 @@ module ElFinder
227
227
  dst = from_hash(@params[:dst]) + src.basename
228
228
  if dst.exist?
229
229
  @response[:error] ||= 'Some files were unable to be copied'
230
- @response[:errorData][src.basename.to_s] = "already exists in '#{dst.dirname.relative_path_from(@root)}'"
230
+ @response[:errorData][src.basename.to_s] = "already exists in '#{dst.dirname}'"
231
231
  else
232
232
  if @params[:cut].to_i > 0
233
233
  src.rename(dst)
234
234
  else
235
235
  if src.directory?
236
- FileUtils.cp_r(src, dst)
236
+ FileUtils.cp_r(src.fullpath, dst.fullpath)
237
237
  else
238
- FileUtils.copy(src, dst)
238
+ FileUtils.cp(src.fullpath, dst.fullpath)
239
239
  end
240
240
  end
241
241
  end
@@ -273,9 +273,9 @@ module ElFinder
273
273
 
274
274
  duplicate = @target.duplicate
275
275
  if @target.directory?
276
- FileUtils.cp_r(@target, duplicate)
276
+ FileUtils.cp_r(@target, duplicate.fullpath)
277
277
  else
278
- FileUtils.copy(@target, duplicate)
278
+ FileUtils.copy(@target, duplicate.fullpath)
279
279
  end
280
280
  @response[:select] = [to_hash(duplicate)]
281
281
  _open(@current)
@@ -321,8 +321,8 @@ module ElFinder
321
321
  @response[:error] = 'Access Denied' and return unless !@targets.nil? && @targets.all?{|e| perms_for(e)[:read]} && perms_for(@current)[:write] == true
322
322
  @response[:error] = 'No archiver available for this file type' and return if (archiver = @options[:archivers][@params[:type]]).nil?
323
323
  extension = archiver.shift
324
- basename = @params[:name] || @targets.first.basename_without_extension
325
- archive = ElFinder::Pathname.new_with_root(@root, "#{basename}#{extension}").unique
324
+ basename = @params[:name] || @targets.first.basename_sans_extension
325
+ archive = (@root + "#{basename}#{extension}").unique
326
326
  cmd = ['cd', @current.to_s.shellescape, '&&', archiver.map(&:shellescape), archive.to_s.shellescape, @targets.map{|t| t.basename.to_s.shellescape}].flatten.join(' ')
327
327
  if system(cmd)
328
328
  @response[:select] = [to_hash(archive)]
@@ -401,7 +401,7 @@ module ElFinder
401
401
  :name => pathname.basename.to_s,
402
402
  :hash => to_hash(pathname),
403
403
  :mime => 'directory',
404
- :rel => (@options[:home] + '/' + pathname.relative_path_from(@root).to_s),
404
+ :rel => pathname.is_root? ? @options[:home] : (@options[:home] + '/' + pathname.path.to_s),
405
405
  :size => 0,
406
406
  :date => pathname.mtime.to_s,
407
407
  }.merge(perms_for(pathname))
@@ -424,7 +424,7 @@ module ElFinder
424
424
  response.merge!(
425
425
  :size => pathname.size,
426
426
  :mime => mime_handler.for(pathname),
427
- :url => (@options[:url] + '/' + pathname.relative_path_from(@root).to_s)
427
+ :url => (@options[:url] + '/' + pathname.path.to_s)
428
428
  )
429
429
 
430
430
  if pathname.readable? && response[:mime] =~ /image/ && !image_size_handler.nil? && !image_resize_handler.nil?
@@ -438,9 +438,9 @@ module ElFinder
438
438
 
439
439
  if pathname.symlink?
440
440
  response.merge!(
441
- :link => to_hash(ElFinder::Pathname.new_with_root(@root, pathname.readlink)), # hash of file to which point link
442
- :linkTo => ElFinder::Pathname.new_with_root(@root, pathname.readlink).relative_path_from(pathname.dirname).to_s, # relative path to
443
- :parent => to_hash(ElFinder::Pathname.new_with_root(@root, pathname.readlink.dirname)) # hash of directory in which is linked file
441
+ :link => to_hash(@root + pathname.readlink), # hash of file to which point link
442
+ :linkTo => (@root + pathname.readlink).relative_to(pathname.dirname.path).to_s, # relative path to
443
+ :parent => to_hash((@root + pathname.readlink).dirname) # hash of directory in which is linked file
444
444
  )
445
445
  end
446
446
 
@@ -470,7 +470,7 @@ module ElFinder
470
470
  response[:write] &&= specific_perm_for(pathname, :write)
471
471
  response[:write] &&= @options[:default_perms][:write]
472
472
 
473
- response[:rm] = pathname != @root
473
+ response[:rm] = !pathname.is_root?
474
474
  response[:rm] &&= specific_perm_for(pathname, :rm)
475
475
  response[:rm] &&= @options[:default_perms][:rm]
476
476
 
@@ -479,7 +479,8 @@ module ElFinder
479
479
 
480
480
  #
481
481
  def specific_perm_for(pathname, perm)
482
- @options[:perms].select{ |k,v| pathname.relative_path_from(@root).to_s.send((k.is_a?(String) ? :== : :match), k) }.none?{|e| e.last[perm] == false}
482
+ pathname = pathname.path if pathname.is_a?(ElFinder::Pathname)
483
+ @options[:perms].select{ |k,v| pathname.to_s.send((k.is_a?(String) ? :== : :match), k) }.none?{|e| e.last[perm] == false}
483
484
  end # of specific_perm_for
484
485
 
485
486
  #
@@ -3,75 +3,179 @@ require 'pathname'
3
3
 
4
4
  module ElFinder
5
5
 
6
- class Pathname < ::Pathname
6
+ class Pathname
7
+ attr_reader :root, :path
7
8
 
9
+ #
10
+ def initialize(root, path = '.')
11
+ @root = root.is_a?(ElFinder::Pathname) ? root.root : ::Pathname.new(root)
12
+
13
+ @path = ::Pathname.new(path)
14
+ @path = path.is_a?(ElFinder::Pathname) ? path.path : ::Pathname.new(path)
15
+ if absolute?
16
+ if @path.cleanpath.to_s.start_with?(@root.to_s)
17
+ @path = ::Pathname.new @path.to_s.slice((@root.to_s.length + 1)..-1)
18
+ elsif @path.cleanpath.to_s.start_with?(@root.realpath.to_s)
19
+ @path = ::Pathname.new @path.to_s.slice((@root.realpath.to_s.length + 1)..-1)
20
+ else
21
+ raise SecurityError, "Absolute paths are not allowed"
22
+ end
23
+ end
24
+ raise SecurityError, "Paths outside the root are not allowed" if outside_of_root?
25
+
26
+ end # of initialize
27
+
8
28
  #
9
29
  def +(other)
10
- self.class.new(super(other).to_s)
11
- end
30
+ if other.is_a? ::ElFinder::Pathname
31
+ other = other.path
32
+ end
33
+ self.class.new(@root, (@path + other).to_s)
34
+ end # of +
12
35
 
13
36
  #
14
- def join(*args)
15
- self.class.new(super(*args).to_s)
37
+ def is_root?
38
+ @path.to_s == '.'
16
39
  end
17
40
 
18
41
  #
19
- def rename(to)
20
- super(to)
21
- rescue Errno::EXDEV
22
- FileUtils.move(self.to_s, to.to_s)
23
- @path = to.to_s
24
- end # of rename
42
+ def absolute?
43
+ @path.absolute?
44
+ end # of absolute?
45
+
46
+ #
47
+ def relative?
48
+ @path.relative?
49
+ end # of relative?
50
+
51
+ #
52
+ def outside_of_root?
53
+ !cleanpath.to_s.start_with?(@root.to_s)
54
+ end # of outside_of_root?
55
+
56
+ #
57
+ def fullpath
58
+ @path.nil? ? @root : @root + @path
59
+ end # of fullpath
60
+
61
+ #
62
+ def cleanpath
63
+ fullpath.cleanpath
64
+ end # of cleanpath
65
+
66
+ #
67
+ def realpath
68
+ fullpath.realpath
69
+ end # of realpath
70
+
71
+ #
72
+ def basename(*args)
73
+ @path.basename(*args)
74
+ end # of basename
75
+
76
+ #
77
+ def basename_sans_extension
78
+ @path.basename(@path.extname)
79
+ end # of basename
80
+
81
+ #
82
+ def basename(*args)
83
+ @path.basename(*args)
84
+ end # of basename
85
+
86
+ #
87
+ def dirname
88
+ self.class.new(@root, @path.dirname)
89
+ end # of basename
90
+
91
+ #
92
+ def extname
93
+ @path.nil? ? '' : @path.extname
94
+ end # of extname
25
95
 
26
96
  #
27
- def self.new_with_root(root, path = '')
28
- path = path.to_s.sub(root, '') if path.to_s[0,1] == '/'
29
- new(superclass.new(File.join(root, path)).cleanpath.to_s)
30
- end # of self.new_with_root
97
+ def to_s
98
+ cleanpath.to_s
99
+ end # of to_s
100
+ alias_method :to_str, :to_s
101
+
102
+
103
+ #
104
+ def children(with_directory=true)
105
+ realpath.children(with_directory).map{|e| self.class.new(@root, e)}
106
+ end
31
107
 
32
108
  #
33
- def basename_without_extension
34
- basename(extname)
109
+ def touch(options = {})
110
+ FileUtils.touch(cleanpath, options)
35
111
  end
36
112
 
113
+ #
114
+ def relative_to(other)
115
+ @path.relative_path_from(other)
116
+ end
117
+
118
+ #
119
+ def unique
120
+ return self.dup unless self.file?
121
+ copy = 1
122
+ begin
123
+ new_file = self.class.new(@root, dirname + "#{basename_sans_extension} #{copy}#{extname}")
124
+ copy += 1
125
+ end while new_file.exist?
126
+ new_file
127
+ end # of unique
128
+
37
129
  #
38
130
  def duplicate
39
- _dirname = dirname
40
- _extname = extname
41
- _basename = basename(_extname)
42
- copy = 0
131
+ _basename = basename_sans_extension
132
+ copy = 1
43
133
  if _basename.to_s =~ /^(.*) copy (\d+)$/
44
134
  _basename = $1
45
135
  copy = $2.to_i
46
136
  end
47
-
48
137
  begin
138
+ new_file = self.class.new(@root, dirname + "#{_basename} copy #{copy}#{extname}")
49
139
  copy += 1
50
- new_file = self.class.superclass.new(_dirname + "#{_basename} copy #{copy}#{_extname}")
51
140
  end while new_file.exist?
52
141
  new_file
53
142
  end # of duplicate
54
143
 
55
144
  #
56
- def unique
57
- return self.dup unless self.file?
58
-
59
- _dirname = dirname
60
- _extname = extname
61
- _basename = basename(_extname)
62
- copy = 0
145
+ def rename(to)
146
+ to = self.class.new(@root, to.to_s)
147
+ realpath.rename(to.fullpath.to_s)
148
+ rescue Errno::EXDEV
149
+ FileUtils.move(realpath.to_s, to.fullpath.to_s)
150
+ ensure
151
+ @path = to.path
152
+ end # of rename
63
153
 
64
- begin
65
- copy += 1
66
- new_file = self.class.superclass.new(_dirname + "#{_basename} #{copy}#{_extname}")
67
- end while new_file.exist?
68
- new_file
69
- end # of unique
154
+ {
155
+ 'directory?' => {:path => 'realpath', :rescue => true },
156
+ 'exist?' => {:path => 'realpath', :rescue => true },
157
+ 'file?' => {:path => 'realpath', :rescue => true },
158
+ 'ftype' => {:path => 'realpath', },
159
+ 'mkdir' => {:path => 'fullpath', :args => '(*args)' },
160
+ 'mkdir' => {:path => 'fullpath', :args => '(*args)' },
161
+ 'mtime' => {:path => 'realpath', },
162
+ 'open' => {:path => 'fullpath', :args => '(*args, &block)' },
163
+ 'read' => {:path => 'fullpath', :args => '(*args)' },
164
+ 'readlink' => {:path => 'fullpath', },
165
+ 'readable?' => {:path => 'realpath', :rescue => true },
166
+ 'size' => {:path => 'realpath', },
167
+ 'symlink?' => {:path => 'fullpath', },
168
+ 'unlink' => {:path => 'realpath', },
169
+ 'writable?' => {:path => 'realpath', :rescue => true },
170
+ }.each_pair do |meth, opts|
171
+ class_eval <<-METHOD, __FILE__, __LINE__ + 1
172
+ def #{meth}#{opts[:args]}
173
+ #{opts[:path]}.#{meth}#{opts[:args]}
174
+ #{"rescue Errno::ENOENT\nfalse" if opts[:rescue]}
175
+ end
176
+ METHOD
177
+ end
70
178
 
71
- #
72
- def relative_to(pathname)
73
- self == pathname ? '' : relative_path_from(pathname).to_s
74
- end # of relative_to
75
179
 
76
180
  end # of class Pathname
77
181
 
@@ -1,3 +1,3 @@
1
1
  module ElFinder
2
- VERSION = '1.0.6'
2
+ VERSION = '1.0.7'
3
3
  end
@@ -24,7 +24,7 @@ class TestMimeType < Test::Unit::TestCase
24
24
  end
25
25
 
26
26
  def test_passing_pathname
27
- assert_equal 'text/plain', ElFinder::MimeType.for(ElFinder::Pathname.new('README.txt'))
27
+ assert_equal 'text/plain', ElFinder::MimeType.for(ElFinder::Pathname.new('/tmp', 'README.txt'))
28
28
  end
29
29
 
30
30
  end
@@ -1,6 +1,7 @@
1
- require "test/unit"
2
- require "el_finder"
3
- require "fileutils"
1
+ require 'test/unit'
2
+ require 'el_finder'
3
+ require 'fileutils'
4
+ require 'pp'
4
5
 
5
6
  class TestPathname < Test::Unit::TestCase
6
7
 
@@ -16,64 +17,268 @@ class TestPathname < Test::Unit::TestCase
16
17
 
17
18
  ################################################################################
18
19
 
19
- def test_paths_are_always_clean
20
- assert_equal File.join(@vroot, 'foo/bar'), ElFinder::Pathname.new_with_root(@vroot, File.join('foo', '..', 'foo', 'bar')).to_s
21
- assert_equal @vroot, ElFinder::Pathname.new_with_root(@vroot, '').to_s
22
- assert_equal File.join(@vroot, 'foo/bar'), ElFinder::Pathname.new_with_root(@vroot, File.join('/foo', 'bar')).to_s
20
+ def test_new_fails_without_root
21
+ assert_raise ArgumentError do
22
+ ElFinder::Pathname.new()
23
+ end
24
+ end
25
+
26
+ def test_new_okay_with_root
27
+ assert_nothing_raised do
28
+ ElFinder::Pathname.new(@vroot)
29
+ end
30
+ end
31
+
32
+ def test_new_okay_with_root_and_path
33
+ assert_nothing_raised do
34
+ ElFinder::Pathname.new(@vroot, 'foo.txt')
35
+ end
36
+ end
37
+
38
+ def test_instance_variables_are_set_correctly
39
+ p = ElFinder::Pathname.new(@vroot, 'foo.txt')
40
+ assert_equal @vroot, p.root.to_s
41
+ assert_equal 'foo.txt', p.path.to_s
42
+ end
43
+
44
+ def test_instance_variables_are_set_correctly_with_nil_path
45
+ p = ElFinder::Pathname.new(@vroot)
46
+ assert_equal @vroot, p.root.to_s
47
+ assert_equal '.', p.path.to_s
48
+ end
49
+
50
+ def test_instance_variables_are_kind_of_pathname
51
+ p = ElFinder::Pathname.new(@vroot, 'foo.txt')
52
+ assert_kind_of ::Pathname, p.root
53
+ assert_kind_of ::Pathname, p.path
54
+ end
55
+
56
+ def test_attempt_to_break_out_of_root_using_relative_path
57
+ assert_raise SecurityError do
58
+ p = ElFinder::Pathname.new(@vroot, '../foo.txt')
59
+ end
60
+ end
61
+
62
+ def test_attempt_to_break_out_of_root_using_absolute_path
63
+ assert_raise SecurityError do
64
+ p = ElFinder::Pathname.new(@vroot, '/foo.txt')
65
+ end
66
+ end
67
+
68
+ def test_new_with_full_path_matching_root
69
+ p = ElFinder::Pathname.new(@vroot, "#{@vroot}/foo.txt")
70
+ assert_equal 'foo.txt', p.path.to_s
71
+ end
72
+
73
+ def test_new_with_full_path_matching_root_realpath
74
+ p = ElFinder::Pathname.new(@vroot, "#{Pathname.new(@vroot).realpath.to_s}/foo.txt")
75
+ assert_equal 'foo.txt', p.path.to_s
76
+ end
77
+
78
+ def test_plus_string
79
+ p = ElFinder::Pathname.new(@vroot, 'foo')
80
+ p1 = p + 'bar'
81
+ assert_equal 'foo/bar', p1.path.to_s
82
+ end
83
+
84
+ def test_plus_pathname
85
+ p = ElFinder::Pathname.new(@vroot, 'foo')
86
+ p1 = p + Pathname.new('bar')
87
+ assert_equal 'foo/bar', p1.path.to_s
23
88
  end
24
89
 
90
+ def test_plus_elfinder_pathname
91
+ p = ElFinder::Pathname.new(@vroot, 'foo')
92
+ p1 = p + ElFinder::Pathname.new(@vroot, 'bar')
93
+ assert_equal 'foo/bar', p1.path.to_s
94
+ end
95
+
96
+ def test_fullpath
97
+ assert_equal "#{@vroot}/one/two/three.txt", ElFinder::Pathname.new(@vroot, 'one/two/three.txt').fullpath.to_s
98
+ end
99
+
100
+ def test_file?
101
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'README.txt').file?, "README.txt should be a file"
102
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'INVALID').file?, "INVALID should not be a file"
103
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'foo').file?, "foo should not be a file (it's a directory)"
104
+ end
105
+
106
+ def test_directory?
107
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'foo').directory?, "foo should be a directory"
108
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'README.txt').directory?, "README.txt should not be a directory (it's a file)"
109
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'INVALID').directory?, "INVALID should not be a directory"
110
+ end
111
+
112
+ def test_exist?
113
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'foo').exist?, "foo should exist"
114
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'README.txt').exist?, "README.txt should exist"
115
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'INVALID').exist?, "INVALID should not exist"
116
+ end
117
+
118
+ def test_symlink?
119
+ File.symlink(File.join(@vroot, 'README.txt'), File.join(@vroot, 'symlink.txt'))
120
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'symlink.txt').symlink?, "symlink.txt should be a symlink"
121
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'README.txt').symlink?, "README.txt should not be a symlink"
122
+ end
123
+
124
+ def test_readable?
125
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'foo').readable?, "foo should be readable"
126
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'README.txt').readable?, "README.txt should be readable"
127
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'INVALID').readable?, "INVALID should not be readable"
128
+ end
129
+
130
+ def test_writable?
131
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'foo').writable?, "foo should be writable"
132
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'README.txt').writable?, "README.txt should be writable"
133
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'INVALID').writable?, "INVALID should not be writable"
134
+ end
135
+
136
+ def test_mtime
137
+ assert_equal File.new(File.join(@vroot, 'foo')).mtime, ElFinder::Pathname.new(@vroot, 'foo').mtime
138
+ assert_equal File.new(File.join(@vroot, 'README.txt')).mtime, ElFinder::Pathname.new(@vroot, 'README.txt').mtime
139
+ assert_raise Errno::ENOENT do
140
+ ElFinder::Pathname.new(@vroot, 'INVALID').mtime
141
+ end
142
+ end
143
+
144
+ def test_unlink
145
+ assert_equal true, ElFinder::Pathname.new(@vroot, 'README.txt').exist?
146
+ ElFinder::Pathname.new(@vroot, 'README.txt').unlink
147
+ assert_equal false, ElFinder::Pathname.new(@vroot, 'README.txt').exist?
148
+ assert_raise Errno::ENOENT do
149
+ ElFinder::Pathname.new(@vroot, 'INVALID').unlink
150
+ end
151
+ assert_raise Errno::ENOTEMPTY do
152
+ ElFinder::Pathname.new(@vroot, 'foo').unlink
153
+ end
154
+ end
155
+
156
+ def test_basename
157
+ assert_equal 'README.txt', ElFinder::Pathname.new(@vroot, 'README.txt').basename.to_s
158
+ assert_equal 'README', ElFinder::Pathname.new(@vroot, 'README.txt').basename('.txt').to_s
159
+ assert_equal 'tom.txt', ElFinder::Pathname.new(@vroot, 'foo/tom.txt').basename.to_s
160
+ end
161
+
162
+ def test_basename_sans_extension
163
+ assert_equal 'README', ElFinder::Pathname.new(@vroot, 'README.txt').basename_sans_extension.to_s
164
+ assert_equal 'tom', ElFinder::Pathname.new(@vroot, 'foo/tom.txt').basename_sans_extension.to_s
165
+ end
166
+
167
+ def test_dirname
168
+ assert_equal '.', ElFinder::Pathname.new(@vroot, 'README.txt').dirname.path.to_s
169
+ assert_equal 'foo', ElFinder::Pathname.new(@vroot, 'foo/tom.txt').dirname.path.to_s
170
+ end
171
+
172
+ def test_to_s
173
+ assert_equal "#{@vroot}/README.txt", ElFinder::Pathname.new(@vroot, 'README.txt').to_s
174
+ assert_equal "#{@vroot}/foo/tom.txt", ElFinder::Pathname.new(@vroot, 'foo/tom.txt').to_s
175
+ end
176
+
177
+ def test_children
178
+ children = ElFinder::Pathname.new(@vroot, 'foo').children
179
+ assert_equal 4, children.size
180
+ assert_equal %w[philip sam sandy tom], children.map{|e| e.basename_sans_extension.to_s}.sort
181
+ end
182
+
183
+ def test_mkdir
184
+ p = ElFinder::Pathname.new(@vroot, 'some-dir')
185
+ assert_equal false, p.directory?
186
+ p.mkdir
187
+ assert_equal true, p.directory?
188
+ end
189
+
190
+ def test_read
191
+ p = ElFinder::Pathname.new(@vroot, 'foo/philip.txt')
192
+ assert_equal File.read(File.join(@vroot, 'foo/philip.txt')), p.read
193
+ end
194
+
195
+ def test_touch
196
+ p = ElFinder::Pathname.new(@vroot, 'newfile')
197
+ p.touch
198
+ assert_equal true, p.file?
199
+ end
200
+
201
+ def test_open
202
+ p = ElFinder::Pathname.new(@vroot, 'newfile')
203
+ assert_equal false, p.file?
204
+ p.open('w') {|f| f.puts "new"}
205
+ assert_equal true, p.file?
206
+ assert_equal File.read(File.join(@vroot, 'newfile')), p.read
207
+ end
208
+
209
+ def test_unique_on_create
210
+ file = ElFinder::Pathname.new(@vroot, 'foo.txt')
211
+ assert_equal 'foo.txt', file.unique.basename.to_s
212
+ end
213
+
214
+ def test_unique_conflict
215
+ file = ElFinder::Pathname.new(@vroot, 'pjkh.png')
216
+ assert_equal 'pjkh 1.png', file.unique.basename.to_s
217
+ end
218
+
219
+ def test_unique_conflict_twice
220
+ ElFinder::Pathname.new(@vroot, 'pjkh 1.png').touch
221
+ file = ElFinder::Pathname.new(@vroot, 'pjkh.png')
222
+ assert_equal 'pjkh 2.png', file.unique.basename.to_s
223
+ end
224
+
225
+
25
226
  def test_duplication_without_extension
26
- assert_equal File.join(@vroot, 'README copy 1'), ElFinder::Pathname.new_with_root(@vroot,'README').duplicate.to_s
227
+ assert_equal File.join(@vroot, 'README copy 1'), ElFinder::Pathname.new(@vroot,'README').duplicate.fullpath.to_s
27
228
  end
28
229
 
29
230
  def test_2nd_duplication_without_extension
30
231
  ::FileUtils.touch(File.join(@vroot, 'README copy 1'))
31
- assert_equal File.join(@vroot, 'README copy 2'), ElFinder::Pathname.new_with_root(@vroot,'README').duplicate.to_s
232
+ assert_equal File.join(@vroot, 'README copy 2'), ElFinder::Pathname.new(@vroot,'README').duplicate.fullpath.to_s
32
233
  end
33
234
 
34
235
  def test_duplication_with_extension
35
- assert_equal File.join(@vroot, 'README copy 1.txt'), ElFinder::Pathname.new_with_root(@vroot,'README.txt').duplicate.to_s
236
+ assert_equal File.join(@vroot, 'README copy 1.txt'), ElFinder::Pathname.new(@vroot,'README.txt').duplicate.fullpath.to_s
36
237
  end
37
238
 
38
239
  def test_2nd_duplication_with_extension
39
240
  ::FileUtils.touch(File.join(@vroot, 'README copy 1.txt'))
40
- assert_equal File.join(@vroot, 'README copy 2.txt'), ElFinder::Pathname.new_with_root(@vroot,'README.txt').duplicate.to_s
241
+ assert_equal File.join(@vroot, 'README copy 2.txt'), ElFinder::Pathname.new(@vroot,'README.txt').duplicate.fullpath.to_s
41
242
  end
42
243
 
43
244
  def test_duplication_of_duplication_lookalike
44
- assert_equal File.join(@vroot, 'README copy A copy 1.txt'), ElFinder::Pathname.new_with_root(@vroot,'README copy A.txt').duplicate.to_s
245
+ assert_equal File.join(@vroot, 'README copy A copy 1.txt'), ElFinder::Pathname.new(@vroot,'README copy A.txt').duplicate.fullpath.to_s
45
246
  end
46
247
 
47
248
  def test_duplication_of_duplication_lookalike2
48
- assert_equal File.join(@vroot, 'README copy copy 1.txt'), ElFinder::Pathname.new_with_root(@vroot,'README copy.txt').duplicate.to_s
249
+ assert_equal File.join(@vroot, 'README copy copy 1.txt'), ElFinder::Pathname.new(@vroot,'README copy.txt').duplicate.fullpath.to_s
49
250
  end
50
251
 
51
252
  def test_on_disk_duplication
52
- file = ElFinder::Pathname.new_with_root(@vroot, 'README.txt')
53
- FileUtils.touch(file)
253
+ file = ElFinder::Pathname.new(@vroot, 'README.txt')
254
+ file.touch
54
255
  assert_equal true, File.exist?(File.join(@vroot, 'README.txt'))
55
256
  duplicate = file.duplicate
56
- FileUtils.touch(duplicate)
257
+ duplicate.touch
57
258
  assert_equal true, File.exist?(File.join(@vroot, 'README copy 1.txt'))
58
259
  end
59
260
 
60
- ################################################################################
61
-
62
261
  def test_rename_on_same_filesystem
63
- file = ElFinder::Pathname.new_with_root(@vroot, 'old.txt')
64
- FileUtils.touch(file)
262
+ file = ElFinder::Pathname.new(@vroot, 'old.txt')
263
+ file.touch
65
264
  assert_equal true, File.exist?(File.join(@vroot, 'old.txt'))
66
265
  file.rename(File.join(@vroot, 'new.txt'))
67
266
  assert_equal false, File.exist?(File.join(@vroot, 'old.txt'))
68
267
  assert_equal true, File.exist?(File.join(@vroot, 'new.txt'))
268
+ assert_equal 'new.txt', file.path.to_s
69
269
  end
70
270
 
71
271
  def test_rename_on_different_filesystem
72
272
  if File.directory?('/Volumes/MyBook')
73
- file = ElFinder::Pathname.new_with_root(@vroot, 'old.txt')
74
- FileUtils.touch(file)
273
+ file = ElFinder::Pathname.new(@vroot, 'old.txt')
274
+ file.touch
75
275
  assert_equal true, File.exist?(File.join(@vroot, 'old.txt'))
76
- file.rename('/Volumes/MyBook/elfinder.rename.test.safe.to.delete')
276
+
277
+ File.symlink('/Volumes/MyBook', File.join(@vroot, 'mybook'))
278
+ assert_equal true, File.symlink?(File.join(@vroot, 'mybook'))
279
+ assert_equal '/Volumes/MyBook', File.readlink(File.join(@vroot, 'mybook'))
280
+
281
+ file.rename('mybook/elfinder.rename.test.safe.to.delete')
77
282
  assert_equal false, File.exist?(File.join(@vroot, 'old.txt'))
78
283
  assert_equal true, File.exist?('/Volumes/MyBook/elfinder.rename.test.safe.to.delete')
79
284
  file.unlink
@@ -81,40 +286,4 @@ class TestPathname < Test::Unit::TestCase
81
286
  end
82
287
  end
83
288
 
84
- ################################################################################
85
-
86
- def test_basename_without_extension
87
- file = ElFinder::Pathname.new_with_root(@vroot, 'foo.txt')
88
- assert_respond_to file, :basename_without_extension
89
- assert_equal 'foo', file.basename_without_extension.to_s
90
- end
91
-
92
- def test_unique_on_create
93
- file = ElFinder::Pathname.new_with_root(@vroot, 'foo.txt')
94
- assert_equal 'foo.txt', file.unique.basename.to_s
95
- end
96
-
97
- def test_unique_conflict
98
- file = ElFinder::Pathname.new_with_root(@vroot, 'pjkh.png')
99
- assert_equal 'pjkh 1.png', file.unique.basename.to_s
100
- end
101
-
102
- def test_unique_conflict_twice
103
- FileUtils.touch ElFinder::Pathname.new_with_root(@vroot, 'pjkh 1.png')
104
- file = ElFinder::Pathname.new_with_root(@vroot, 'pjkh.png')
105
- assert_equal 'pjkh 2.png', file.unique.basename.to_s
106
- end
107
-
108
- def test_relative_to_method
109
- assert_equal "", ElFinder::Pathname.new_with_root(@vroot).relative_to(::Pathname.new(@vroot)).to_s
110
- assert_equal "foo.txt", ElFinder::Pathname.new_with_root(@vroot, 'foo.txt').relative_to(::Pathname.new(@vroot)).to_s
111
- assert_equal "foo/bar.txt", ElFinder::Pathname.new_with_root(@vroot, 'foo/bar.txt').relative_to(::Pathname.new(@vroot)).to_s
112
- end
113
-
114
- def test_class_type
115
- assert_kind_of ElFinder::Pathname, ElFinder::Pathname.new_with_root(@vroot, 'foo')
116
- assert_kind_of ElFinder::Pathname, ElFinder::Pathname.new_with_root(@vroot, 'foo') + 'bar'
117
- assert_kind_of ElFinder::Pathname, ElFinder::Pathname.new_with_root(@vroot, 'foo').join('bar')
118
- end
119
-
120
289
  end
@@ -69,6 +69,18 @@ class TestElFinder < Test::Unit::TestCase
69
69
  end
70
70
  end
71
71
 
72
+ def test_cwd_name_for_root
73
+ h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
74
+ assert r[:cwd][:name], 'Home'
75
+ end
76
+
77
+ def test_cwd_name_for_sub_directory
78
+ h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
79
+ target = r[:cdc].find{|e| e[:name] == 'foo'}
80
+ h, r = @elfinder.run(:cmd => 'open', :target => target[:hash])
81
+ assert r[:cwd][:name], 'Home/foo'
82
+ end
83
+
72
84
  def test_mkdir
73
85
  h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
74
86
  h1, r1 = @elfinder.run(:cmd => 'mkdir', :current => r[:cwd][:hash], :name => 'dir1')
@@ -7,13 +7,13 @@ class TestElFinder < Test::Unit::TestCase
7
7
  ################################################################################
8
8
 
9
9
  def test_to_hash_method
10
- assert_equal Base64.encode64('foo/bar').chomp, @elfinder.to_hash(ElFinder::Pathname.new_with_root(@vroot, 'foo/bar'))
11
- assert_equal Base64.encode64('/').chomp, @elfinder.to_hash(ElFinder::Pathname.new_with_root(@vroot))
10
+ assert_equal Base64.encode64('foo/bar').chomp, @elfinder.to_hash(ElFinder::Pathname.new(@vroot, 'foo/bar'))
11
+ assert_equal Base64.encode64('.').chomp, @elfinder.to_hash(ElFinder::Pathname.new(@vroot))
12
12
  end
13
13
 
14
14
  def test_from_hash_method
15
15
  assert_equal File.join(@vroot, 'foo/bar'), @elfinder.from_hash(Base64.encode64('foo/bar').chomp).to_s
16
- assert_equal @vroot, @elfinder.from_hash(Base64.encode64('').chomp).to_s
16
+ assert_equal @vroot, @elfinder.from_hash(Base64.encode64('.').chomp).to_s
17
17
  end
18
18
 
19
19
  end
@@ -51,8 +51,6 @@ class TestElFinderSymlink < Test::Unit::TestCase
51
51
  h, r = @elfinder.run(:cmd => 'open', :target => foo[:hash])
52
52
  source = r[:cdc].find{|e| e[:name] == 'tom.txt'}
53
53
 
54
- pp source
55
- pp target
56
54
 
57
55
  assert_equal source[:hash], target[:link]
58
56
  assert_equal 'foo/tom.txt', target[:linkTo]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: el_finder
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 6
10
- version: 1.0.6
9
+ - 7
10
+ version: 1.0.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Philip Hallstrom
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-11 00:00:00 -08:00
18
+ date: 2011-01-12 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency