vfs 0.4.8 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/vfs/drivers/local.rb +7 -25
- data/lib/vfs/drivers/specification.rb +3 -6
- data/lib/vfs/entries/dir.rb +18 -33
- data/lib/vfs/entries/entry.rb +9 -21
- data/lib/vfs/entries/file.rb +8 -16
- data/lib/vfs/entries/universal_entry.rb +5 -9
- data/lib/vfs/entry_proxy.rb +1 -3
- metadata +6 -20
- data/Rakefile +0 -11
- data/readme.md +0 -143
- data/spec/container_spec.rb +0 -31
- data/spec/dir_spec.rb +0 -253
- data/spec/entry_spec.rb +0 -42
- data/spec/file_spec.rb +0 -215
- data/spec/misc_spec.rb +0 -19
- data/spec/path_spec.rb +0 -127
- data/spec/spec_helper.rb +0 -50
- data/spec/storages/local_spec.rb +0 -24
- data/spec/storages/local_spec/emptygit +0 -0
- data/spec/universal_entry_spec.rb +0 -69
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 912da8917a494c212593b79a0b180ab7938df9e1
|
4
|
+
data.tar.gz: 1bf02fc5cb03e6ce27320956a80ac035cfe07d34
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e24ebb55a45cc9c031231c2e0b792776b206431d7760906bca065227acc72469c444a84757cad7ce60125d8e0bf9b517636134f37f03bfbdaa78fe8f560821fa
|
7
|
+
data.tar.gz: 45d5f24d6d93992d445409107dd858738c1809a09d6283ef14ac393a8df25f16ebcf9756127c5d14744ed820f6f41e80d813f8c4d166f3ddc938e1fced5e34ae
|
data/lib/vfs/drivers/local.rb
CHANGED
@@ -30,9 +30,8 @@ module Vfs
|
|
30
30
|
@buffer || DEFAULT_BUFFER
|
31
31
|
end
|
32
32
|
|
33
|
-
#
|
34
|
-
|
35
|
-
#
|
33
|
+
# Attributes.
|
34
|
+
|
36
35
|
def attributes path
|
37
36
|
path = with_root path
|
38
37
|
|
@@ -53,14 +52,12 @@ module Vfs
|
|
53
52
|
end
|
54
53
|
|
55
54
|
def set_attributes path, attrs
|
56
|
-
# TODO2 set attributes
|
55
|
+
# TODO2 set attributes.
|
57
56
|
not_implemented
|
58
57
|
end
|
59
58
|
|
59
|
+
# File.
|
60
60
|
|
61
|
-
#
|
62
|
-
# File
|
63
|
-
#
|
64
61
|
def read_file path, &block
|
65
62
|
path = with_root path
|
66
63
|
::File.open path, 'r' do |is|
|
@@ -88,10 +85,7 @@ module Vfs
|
|
88
85
|
# FileUtils.mv from, to
|
89
86
|
# end
|
90
87
|
|
91
|
-
|
92
|
-
#
|
93
|
-
# Dir
|
94
|
-
#
|
88
|
+
# Dir.
|
95
89
|
def create_dir path
|
96
90
|
path = with_root path
|
97
91
|
::Dir.mkdir path
|
@@ -110,21 +104,11 @@ module Vfs
|
|
110
104
|
::Dir["#{path_with_trailing_slash}#{query}"].each do |absolute_path|
|
111
105
|
name = absolute_path.sub path_with_trailing_slash, ''
|
112
106
|
block.call name, ->{::File.directory?(absolute_path) ? :dir : :file}
|
113
|
-
# if ::File.directory? absolute_path
|
114
|
-
# block.call relative_path, :dir
|
115
|
-
# else
|
116
|
-
# block.call relative_path, :file
|
117
|
-
# end
|
118
107
|
end
|
119
108
|
else
|
120
109
|
::Dir.foreach path do |name|
|
121
110
|
next if name == '.' or name == '..'
|
122
111
|
block.call name, ->{::File.directory?("#{path}/#{name}") ? :dir : :file}
|
123
|
-
# if ::File.directory? "#{path}/#{relative_name}"
|
124
|
-
# block.call relative_name, :dir
|
125
|
-
# else
|
126
|
-
# block.call relative_name, :file
|
127
|
-
# end
|
128
112
|
end
|
129
113
|
end
|
130
114
|
end
|
@@ -144,14 +128,12 @@ module Vfs
|
|
144
128
|
# end
|
145
129
|
# end
|
146
130
|
|
147
|
-
#
|
148
|
-
|
149
|
-
#
|
131
|
+
# Other.
|
132
|
+
|
150
133
|
def local?; true end
|
151
134
|
|
152
135
|
def tmp &block
|
153
136
|
path = "/tmp/#{rand(10**6)}"
|
154
|
-
# tmp_dir = "#{::Dir.tmpdir}/#{rand(10**6)}"
|
155
137
|
if block
|
156
138
|
begin
|
157
139
|
::FileUtils.mkdir_p with_root(path)
|
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'rspec_ext'
|
2
|
-
require 'ruby_ext'
|
3
|
-
|
4
1
|
shared_examples_for 'vfs driver basic' do
|
5
2
|
it 'should respond to :local?' do
|
6
3
|
@driver.should respond_to(:local?)
|
@@ -35,16 +32,16 @@ shared_examples_for 'vfs driver files' do
|
|
35
32
|
end
|
36
33
|
|
37
34
|
it "read, write, append" do
|
38
|
-
#
|
35
|
+
# Write.
|
39
36
|
@driver.write_file('/file', false){|w| w.write 'something'}
|
40
37
|
@driver.attributes('/file')[:file].should == true
|
41
38
|
|
42
|
-
#
|
39
|
+
# Read.
|
43
40
|
data = ""
|
44
41
|
@driver.read_file('/file'){|buff| data << buff}
|
45
42
|
data.should == 'something'
|
46
43
|
|
47
|
-
#
|
44
|
+
# Append.
|
48
45
|
@driver.write_file('/file', true){|w| w.write ' another'}
|
49
46
|
data = ""
|
50
47
|
@driver.read_file('/file'){|buff| data << buff}
|
data/lib/vfs/entries/dir.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
module Vfs
|
2
2
|
class Dir < Entry
|
3
|
-
|
4
|
-
# Container
|
5
|
-
#
|
3
|
+
|
4
|
+
# Container.
|
6
5
|
def [] path
|
7
6
|
path = path.to_s
|
8
7
|
if path =~ /.+[\/]$/
|
@@ -17,15 +16,11 @@ module Vfs
|
|
17
16
|
alias_method :/, :[]
|
18
17
|
|
19
18
|
|
20
|
-
#
|
21
|
-
# Attributes
|
22
|
-
#
|
19
|
+
# Attributes.
|
23
20
|
alias_method :exist?, :dir?
|
24
21
|
|
22
|
+
# CRUD.
|
25
23
|
|
26
|
-
#
|
27
|
-
# CRUD
|
28
|
-
#
|
29
24
|
def create options = {}
|
30
25
|
driver.open do
|
31
26
|
try = 0
|
@@ -36,7 +31,7 @@ module Vfs
|
|
36
31
|
entry = self.entry
|
37
32
|
attrs = entry.get
|
38
33
|
if attrs and attrs[:file] #entry.exist?
|
39
|
-
entry.
|
34
|
+
entry.delete
|
40
35
|
elsif attrs and attrs[:dir]
|
41
36
|
# dir already exist, no need to recreate it
|
42
37
|
return self
|
@@ -56,14 +51,12 @@ module Vfs
|
|
56
51
|
self
|
57
52
|
end
|
58
53
|
|
59
|
-
def
|
60
|
-
|
54
|
+
def delete options = {}
|
55
|
+
delete_entry :dir, :file
|
61
56
|
end
|
62
57
|
|
58
|
+
# Content.
|
63
59
|
|
64
|
-
#
|
65
|
-
# Content
|
66
|
-
#
|
67
60
|
def entries *args, &block
|
68
61
|
raise "invalid arguments #{args.inspect}!" if args.size > 2
|
69
62
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
@@ -75,9 +68,9 @@ module Vfs
|
|
75
68
|
driver.open do
|
76
69
|
begin
|
77
70
|
list = []
|
78
|
-
#
|
71
|
+
# Query option is optional and supported only for some drivers (local driver for example).
|
79
72
|
driver.each_entry path, query do |name, type|
|
80
|
-
#
|
73
|
+
# For performance reasons some drivers may return the type of entry as
|
81
74
|
# optionally evaluated callback.
|
82
75
|
type = type.call if (filter or type_required) and type.is_a?(Proc)
|
83
76
|
|
@@ -98,10 +91,10 @@ module Vfs
|
|
98
91
|
if attrs and attrs[:file]
|
99
92
|
raise Error, "can't query entries on File ('#{self}')!"
|
100
93
|
elsif attrs and attrs[:dir]
|
101
|
-
#
|
94
|
+
# Some unknown error.
|
102
95
|
raise error
|
103
96
|
else
|
104
|
-
# TODO2 remove :bang
|
97
|
+
# TODO2 remove :bang.
|
105
98
|
raise Error, "'#{self}' not exist!" if options[:bang]
|
106
99
|
[]
|
107
100
|
end
|
@@ -138,10 +131,8 @@ module Vfs
|
|
138
131
|
end
|
139
132
|
end
|
140
133
|
|
134
|
+
# Transfers.
|
141
135
|
|
142
|
-
#
|
143
|
-
# Transfers
|
144
|
-
#
|
145
136
|
def copy_to to, options = {}
|
146
137
|
options[:bang] = true unless options.include? :bang
|
147
138
|
|
@@ -151,10 +142,9 @@ module Vfs
|
|
151
142
|
target = if to.is_a? File
|
152
143
|
to.dir
|
153
144
|
elsif to.is_a? Dir
|
154
|
-
to.dir
|
145
|
+
to.dir
|
155
146
|
elsif to.is_a? UniversalEntry
|
156
|
-
|
157
|
-
to.dir #.create
|
147
|
+
to.dir
|
158
148
|
else
|
159
149
|
raise "can't copy to unknown Entry!"
|
160
150
|
end
|
@@ -167,14 +157,10 @@ module Vfs
|
|
167
157
|
|
168
158
|
def move_to to, options = {}
|
169
159
|
copy_to to, options
|
170
|
-
|
160
|
+
delete options
|
171
161
|
to
|
172
162
|
end
|
173
163
|
|
174
|
-
# class << self
|
175
|
-
# attr_accessor :dont_use_efficient_dir_copy
|
176
|
-
# end
|
177
|
-
|
178
164
|
protected
|
179
165
|
def unefficient_dir_copy to, options
|
180
166
|
to.create options
|
@@ -189,7 +175,6 @@ module Vfs
|
|
189
175
|
end
|
190
176
|
end
|
191
177
|
|
192
|
-
|
193
178
|
# def efficient_dir_copy to, options
|
194
179
|
# return false if self.class.dont_use_efficient_dir_copy
|
195
180
|
#
|
@@ -215,14 +200,14 @@ module Vfs
|
|
215
200
|
# attrs = to.get
|
216
201
|
# if attrs and attrs[:file]
|
217
202
|
# if options[:override]
|
218
|
-
# to.
|
203
|
+
# to.delete
|
219
204
|
# else
|
220
205
|
# raise Vfs::Error, "entry #{to} already exist!"
|
221
206
|
# end
|
222
207
|
# elsif attrs and attrs[:dir]
|
223
208
|
# unknown_errors += 1
|
224
209
|
# # if options[:override]
|
225
|
-
# # to.
|
210
|
+
# # to.delete
|
226
211
|
# # else
|
227
212
|
# # dir_already_exist = true
|
228
213
|
# # # raise Vfs::Error, "entry #{to} already exist!"
|
data/lib/vfs/entries/entry.rb
CHANGED
@@ -15,17 +15,13 @@ module Vfs
|
|
15
15
|
raise "driver not defined!" unless self.driver
|
16
16
|
end
|
17
17
|
|
18
|
-
#
|
19
|
-
# Navigation
|
20
|
-
#
|
18
|
+
# Navigation.
|
21
19
|
def parent
|
22
20
|
Dir.new(driver, path_cache.parent)
|
23
21
|
end
|
24
22
|
|
23
|
+
# Transformations.
|
25
24
|
|
26
|
-
#
|
27
|
-
# Transformations
|
28
|
-
#
|
29
25
|
def dir path = nil
|
30
26
|
if path
|
31
27
|
new_path = path_cache + path
|
@@ -58,10 +54,8 @@ module Vfs
|
|
58
54
|
end
|
59
55
|
alias_method :to_entry, :entry
|
60
56
|
|
57
|
+
# Attributes.
|
61
58
|
|
62
|
-
#
|
63
|
-
# Attributes
|
64
|
-
#
|
65
59
|
def get attr_name = nil
|
66
60
|
attrs = driver.open{driver.attributes(path)}
|
67
61
|
(attr_name and attrs) ? attrs[attr_name] : attrs
|
@@ -77,10 +71,8 @@ module Vfs
|
|
77
71
|
def created_at; get :created_at end
|
78
72
|
def updated_at; get :updated_at end
|
79
73
|
|
74
|
+
# Miscellaneous.
|
80
75
|
|
81
|
-
#
|
82
|
-
# Miscellaneous
|
83
|
-
#
|
84
76
|
def name
|
85
77
|
path_cache.name
|
86
78
|
end
|
@@ -101,10 +93,8 @@ module Vfs
|
|
101
93
|
driver.local?
|
102
94
|
end
|
103
95
|
|
96
|
+
# Utils.
|
104
97
|
|
105
|
-
#
|
106
|
-
# Utils
|
107
|
-
#
|
108
98
|
def inspect
|
109
99
|
"#{driver}#{':' unless driver.to_s.empty?}#{path}"
|
110
100
|
end
|
@@ -124,13 +114,11 @@ module Vfs
|
|
124
114
|
driver.eql?(other.driver) and path.eql?(other.path)
|
125
115
|
end
|
126
116
|
|
127
|
-
def delete *args
|
128
|
-
|
129
|
-
end
|
130
|
-
alias_method :remove, :delete
|
117
|
+
def destroy *args; delete *args end
|
118
|
+
def remove *args; delete *args end
|
131
119
|
|
132
120
|
protected
|
133
|
-
def
|
121
|
+
def delete_entry first = :file, second = :dir
|
134
122
|
driver.open do
|
135
123
|
begin
|
136
124
|
driver.send :"delete_#{first}", path
|
@@ -142,7 +130,7 @@ module Vfs
|
|
142
130
|
elsif attrs and attrs[second]
|
143
131
|
driver.send :"delete_#{second}", path
|
144
132
|
else
|
145
|
-
#
|
133
|
+
# Do nothing, entry already not exist.
|
146
134
|
end
|
147
135
|
end
|
148
136
|
end
|
data/lib/vfs/entries/file.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
module Vfs
|
2
2
|
class File < Entry
|
3
|
-
#
|
4
|
-
# Attributes
|
5
|
-
#
|
3
|
+
# Attributes.
|
6
4
|
alias_method :exist?, :file?
|
7
5
|
|
6
|
+
# CRUD.
|
8
7
|
|
9
|
-
#
|
10
|
-
# CRUD
|
11
|
-
#
|
12
8
|
def read options = {}, &block
|
13
9
|
options[:bang] = true unless options.include? :bang
|
14
10
|
driver.open do
|
@@ -70,7 +66,7 @@ module Vfs
|
|
70
66
|
rescue StandardError => error
|
71
67
|
parent = self.parent
|
72
68
|
if entry.exist?
|
73
|
-
entry.
|
69
|
+
entry.delete
|
74
70
|
elsif !parent.exist?
|
75
71
|
parent.create(options)
|
76
72
|
else
|
@@ -95,14 +91,12 @@ module Vfs
|
|
95
91
|
write block.call(data), options
|
96
92
|
end
|
97
93
|
|
98
|
-
def
|
99
|
-
|
94
|
+
def delete
|
95
|
+
delete_entry
|
100
96
|
end
|
101
97
|
|
98
|
+
# Transfers.
|
102
99
|
|
103
|
-
#
|
104
|
-
# Transfers
|
105
|
-
#
|
106
100
|
def copy_to to, options = {}
|
107
101
|
raise Error, "you can't copy to itself" if self == to
|
108
102
|
|
@@ -125,14 +119,12 @@ module Vfs
|
|
125
119
|
|
126
120
|
def move_to to
|
127
121
|
copy_to to
|
128
|
-
|
122
|
+
delete
|
129
123
|
to
|
130
124
|
end
|
131
125
|
|
126
|
+
# Extra Stuff.
|
132
127
|
|
133
|
-
#
|
134
|
-
# Extra Stuff
|
135
|
-
#
|
136
128
|
def render *args
|
137
129
|
require 'tilt'
|
138
130
|
|
@@ -1,24 +1,20 @@
|
|
1
1
|
module Vfs
|
2
2
|
class UniversalEntry < Entry
|
3
|
-
#
|
4
|
-
|
5
|
-
#
|
3
|
+
# Attributes.
|
4
|
+
|
6
5
|
def exist?
|
7
6
|
!!get
|
8
7
|
end
|
9
8
|
|
10
|
-
|
11
9
|
def copy_to to, options = {}
|
12
10
|
from = file? ? to_file : to_dir
|
13
11
|
from.copy_to to, options
|
14
12
|
end
|
15
13
|
|
14
|
+
# CRUD.
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
#
|
20
|
-
def destroy
|
21
|
-
destroy_entry
|
16
|
+
def delete
|
17
|
+
delete_entry
|
22
18
|
end
|
23
19
|
end
|
24
20
|
end
|
data/lib/vfs/entry_proxy.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vfs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alexey Petrushin
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-05-05 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description:
|
15
14
|
email:
|
@@ -17,8 +16,6 @@ executables: []
|
|
17
16
|
extensions: []
|
18
17
|
extra_rdoc_files: []
|
19
18
|
files:
|
20
|
-
- Rakefile
|
21
|
-
- readme.md
|
22
19
|
- lib/vfs/drivers/local.rb
|
23
20
|
- lib/vfs/drivers/specification.rb
|
24
21
|
- lib/vfs/entries/dir.rb
|
@@ -31,39 +28,28 @@ files:
|
|
31
28
|
- lib/vfs/path.rb
|
32
29
|
- lib/vfs/vfs.rb
|
33
30
|
- lib/vfs.rb
|
34
|
-
|
35
|
-
- spec/dir_spec.rb
|
36
|
-
- spec/entry_spec.rb
|
37
|
-
- spec/file_spec.rb
|
38
|
-
- spec/misc_spec.rb
|
39
|
-
- spec/path_spec.rb
|
40
|
-
- spec/spec_helper.rb
|
41
|
-
- spec/storages/local_spec/emptygit
|
42
|
-
- spec/storages/local_spec.rb
|
43
|
-
- spec/universal_entry_spec.rb
|
44
|
-
homepage: http://alexeypetrushin.github.com/vfs
|
31
|
+
homepage: http://alexeypetrushin.github.io/vfs
|
45
32
|
licenses: []
|
33
|
+
metadata: {}
|
46
34
|
post_install_message:
|
47
35
|
rdoc_options: []
|
48
36
|
require_paths:
|
49
37
|
- lib
|
50
38
|
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
39
|
requirements:
|
53
40
|
- - ! '>='
|
54
41
|
- !ruby/object:Gem::Version
|
55
42
|
version: '0'
|
56
43
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
44
|
requirements:
|
59
45
|
- - ! '>='
|
60
46
|
- !ruby/object:Gem::Version
|
61
47
|
version: '0'
|
62
48
|
requirements: []
|
63
49
|
rubyforge_project:
|
64
|
-
rubygems_version:
|
50
|
+
rubygems_version: 2.0.3
|
65
51
|
signing_key:
|
66
|
-
specification_version:
|
52
|
+
specification_version: 4
|
67
53
|
summary: Virtual File System - simple and unified API over different storages (Local,
|
68
54
|
S3, SFTP, ...)
|
69
55
|
test_files: []
|