vfs 0.3.15 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -0
- data/lib/vfs.rb +5 -4
- data/lib/vfs/drivers/local.rb +179 -0
- data/lib/vfs/drivers/specification.rb +169 -0
- data/lib/vfs/entries/dir.rb +28 -57
- data/lib/vfs/entries/entry.rb +39 -21
- data/lib/vfs/entries/file.rb +20 -73
- data/lib/vfs/entries/universal_entry.rb +8 -8
- data/lib/vfs/integration.rb +30 -0
- data/lib/vfs/vfs.rb +2 -2
- data/readme.md +1 -1
- data/spec/container_spec.rb +12 -11
- data/spec/dir_spec.rb +44 -44
- data/spec/entry_spec.rb +6 -6
- data/spec/file_spec.rb +30 -46
- data/spec/misc_spec.rb +19 -0
- data/spec/spec_helper.rb +8 -8
- data/spec/storages/local_spec.rb +14 -14
- data/spec/universal_entry_spec.rb +32 -10
- metadata +6 -6
- data/lib/vfs/integration/string.rb +0 -20
- data/lib/vfs/storages/local.rb +0 -183
- data/lib/vfs/storages/specification.rb +0 -161
- data/lib/vfs/support.rb +0 -2
data/lib/vfs/entries/entry.rb
CHANGED
@@ -1,26 +1,25 @@
|
|
1
1
|
module Vfs
|
2
2
|
class Entry
|
3
|
-
attr_reader :
|
3
|
+
attr_reader :driver, :path, :path_cache
|
4
4
|
|
5
5
|
def initialize *args
|
6
6
|
if args.size == 1 and args.first.is_a? Entry
|
7
7
|
entry = args.first
|
8
8
|
@path_cache = entry.path_cache
|
9
|
-
@
|
9
|
+
@driver, @path = entry.driver, entry.path
|
10
10
|
else
|
11
|
-
|
11
|
+
driver, path = *args
|
12
12
|
@path_cache = Path.new path
|
13
|
-
@
|
13
|
+
@driver, @path = driver, path_cache.to_s
|
14
14
|
end
|
15
|
-
raise "
|
15
|
+
raise "driver not defined!" unless self.driver
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
18
|
#
|
20
19
|
# Navigation
|
21
20
|
#
|
22
21
|
def parent
|
23
|
-
Dir.new(
|
22
|
+
Dir.new(driver, path_cache + '..')
|
24
23
|
end
|
25
24
|
|
26
25
|
|
@@ -30,7 +29,7 @@ module Vfs
|
|
30
29
|
def dir path = nil
|
31
30
|
if path
|
32
31
|
new_path = path_cache + path
|
33
|
-
Dir.new
|
32
|
+
Dir.new driver, new_path
|
34
33
|
else
|
35
34
|
Dir.new self
|
36
35
|
end
|
@@ -40,7 +39,7 @@ module Vfs
|
|
40
39
|
def file path = nil
|
41
40
|
if path
|
42
41
|
new_path = path_cache + path
|
43
|
-
File.new
|
42
|
+
File.new driver, new_path
|
44
43
|
else
|
45
44
|
File.new self
|
46
45
|
end
|
@@ -49,10 +48,9 @@ module Vfs
|
|
49
48
|
|
50
49
|
def entry path = nil
|
51
50
|
entry = if path
|
52
|
-
|
53
51
|
new_path = path_cache + path
|
54
52
|
klass = new_path.probably_dir? ? Dir : UniversalEntry
|
55
|
-
|
53
|
+
klass.new driver, new_path
|
56
54
|
else
|
57
55
|
UniversalEntry.new self
|
58
56
|
end
|
@@ -65,7 +63,7 @@ module Vfs
|
|
65
63
|
# Attributes
|
66
64
|
#
|
67
65
|
def get attr_name = nil
|
68
|
-
attrs =
|
66
|
+
attrs = driver.open{driver.attributes(path)}
|
69
67
|
(attr_name and attrs) ? attrs[attr_name] : attrs
|
70
68
|
end
|
71
69
|
|
@@ -88,19 +86,19 @@ module Vfs
|
|
88
86
|
end
|
89
87
|
|
90
88
|
def tmp &block
|
91
|
-
|
89
|
+
driver.open do
|
92
90
|
if block
|
93
|
-
|
94
|
-
block.call Dir.new(
|
91
|
+
driver.tmp do |path|
|
92
|
+
block.call Dir.new(driver, path)
|
95
93
|
end
|
96
94
|
else
|
97
|
-
Dir.new
|
95
|
+
Dir.new driver, driver.tmp
|
98
96
|
end
|
99
97
|
end
|
100
98
|
end
|
101
99
|
|
102
100
|
def local?
|
103
|
-
|
101
|
+
driver.local?
|
104
102
|
end
|
105
103
|
|
106
104
|
|
@@ -108,22 +106,42 @@ module Vfs
|
|
108
106
|
# Utils
|
109
107
|
#
|
110
108
|
def inspect
|
111
|
-
"#{
|
109
|
+
"#{driver}#{':' unless driver.to_s.empty?}#{path}"
|
112
110
|
end
|
113
111
|
alias_method :to_s, :inspect
|
114
112
|
|
115
113
|
def == other
|
116
114
|
return false unless other.is_a? Entry
|
117
|
-
|
115
|
+
driver == other.driver and path == other.path
|
118
116
|
end
|
119
117
|
|
120
118
|
def hash
|
121
|
-
|
119
|
+
driver.hash + path.hash
|
122
120
|
end
|
123
121
|
|
124
122
|
def eql? other
|
125
123
|
return false unless other.class == self.class
|
126
|
-
|
124
|
+
driver.eql?(other.driver) and path.eql?(other.path)
|
127
125
|
end
|
126
|
+
|
127
|
+
protected
|
128
|
+
def destroy_entry first = :file, second = :dir
|
129
|
+
driver.open do
|
130
|
+
begin
|
131
|
+
driver.send :"delete_#{first}", path
|
132
|
+
rescue StandardError => e
|
133
|
+
attrs = get
|
134
|
+
if attrs and attrs[first]
|
135
|
+
# some unknown error
|
136
|
+
raise e
|
137
|
+
elsif attrs and attrs[second]
|
138
|
+
driver.send :"delete_#{second}", path
|
139
|
+
else
|
140
|
+
# do nothing, entry already not exist
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
self
|
145
|
+
end
|
128
146
|
end
|
129
147
|
end
|
data/lib/vfs/entries/file.rb
CHANGED
@@ -11,13 +11,13 @@ module Vfs
|
|
11
11
|
#
|
12
12
|
def read options = {}, &block
|
13
13
|
options[:bang] = true unless options.include? :bang
|
14
|
-
|
14
|
+
driver.open do
|
15
15
|
begin
|
16
16
|
if block
|
17
|
-
|
17
|
+
driver.read_file path, &block
|
18
18
|
else
|
19
19
|
data = ""
|
20
|
-
|
20
|
+
driver.read_file(path){|buff| data << buff}
|
21
21
|
data
|
22
22
|
end
|
23
23
|
rescue StandardError => e
|
@@ -39,18 +39,14 @@ module Vfs
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
def content options = {}
|
43
|
-
|
44
|
-
end
|
42
|
+
# def content options = {}
|
43
|
+
# read options
|
44
|
+
# end
|
45
45
|
|
46
46
|
def create options = {}
|
47
47
|
write '', options
|
48
48
|
self
|
49
49
|
end
|
50
|
-
def create! options = {}
|
51
|
-
options[:override] = true
|
52
|
-
create options
|
53
|
-
end
|
54
50
|
|
55
51
|
def write *args, &block
|
56
52
|
if block
|
@@ -61,35 +57,24 @@ module Vfs
|
|
61
57
|
end
|
62
58
|
raise "can't do :override and :append at the same time!" if options[:override] and options[:append]
|
63
59
|
|
64
|
-
|
65
|
-
# TODO2 Performance lost, extra call to check file existence
|
66
|
-
# We need to check if the file exist before writing to it, otherwise it's
|
67
|
-
# impossible to distinguish if the StandardError caused by the 'already exist' error or
|
68
|
-
# some other error.
|
69
|
-
entry = self.entry
|
70
|
-
if entry.exist?
|
71
|
-
if options[:override]
|
72
|
-
entry.destroy
|
73
|
-
else
|
74
|
-
raise Error, "entry #{self} already exist!"
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
60
|
+
driver.open do
|
78
61
|
try = 0
|
79
62
|
begin
|
80
63
|
try += 1
|
81
64
|
if block
|
82
|
-
|
65
|
+
driver.write_file(path, options[:append], &block)
|
83
66
|
else
|
84
|
-
|
67
|
+
driver.write_file(path, options[:append]){|writer| writer.write data}
|
85
68
|
end
|
86
69
|
rescue StandardError => error
|
87
70
|
parent = self.parent
|
88
|
-
if
|
89
|
-
|
90
|
-
|
91
|
-
else
|
71
|
+
if entry.exist?
|
72
|
+
entry.destroy
|
73
|
+
elsif !parent.exist?
|
92
74
|
parent.create(options)
|
75
|
+
else
|
76
|
+
# unknown error
|
77
|
+
raise error
|
93
78
|
end
|
94
79
|
|
95
80
|
try < 2 ? retry : raise(error)
|
@@ -97,11 +82,6 @@ module Vfs
|
|
97
82
|
end
|
98
83
|
self
|
99
84
|
end
|
100
|
-
def write! *args, &block
|
101
|
-
args << {} unless args.last.is_a? Hash
|
102
|
-
args.last[:override] = true
|
103
|
-
write *args, &block
|
104
|
-
end
|
105
85
|
|
106
86
|
def append *args, &block
|
107
87
|
options = (args.last.is_a?(Hash) && args.pop) || {}
|
@@ -110,37 +90,12 @@ module Vfs
|
|
110
90
|
end
|
111
91
|
|
112
92
|
def update options = {}, &block
|
113
|
-
options[:override] = true
|
114
93
|
data = read options
|
115
94
|
write block.call(data), options
|
116
95
|
end
|
117
96
|
|
118
|
-
def destroy
|
119
|
-
|
120
|
-
begin
|
121
|
-
fs.delete_file path
|
122
|
-
self
|
123
|
-
rescue StandardError => e
|
124
|
-
attrs = get
|
125
|
-
if attrs and attrs[:dir]
|
126
|
-
if options[:force]
|
127
|
-
dir.destroy
|
128
|
-
else
|
129
|
-
raise Error, "can't destroy Dir #{dir} (you are trying to destroy it as if it's a File)"
|
130
|
-
end
|
131
|
-
elsif attrs and attrs[:file]
|
132
|
-
# unknown internal error
|
133
|
-
raise e
|
134
|
-
else
|
135
|
-
# do nothing, file already not exist
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
self
|
140
|
-
end
|
141
|
-
def destroy! options = {}
|
142
|
-
options[:force] = true
|
143
|
-
destroy options
|
97
|
+
def destroy
|
98
|
+
destroy_entry
|
144
99
|
end
|
145
100
|
|
146
101
|
|
@@ -166,20 +121,12 @@ module Vfs
|
|
166
121
|
|
167
122
|
target
|
168
123
|
end
|
169
|
-
def copy_to! to, options = {}
|
170
|
-
options[:override] = true
|
171
|
-
copy_to to, options
|
172
|
-
end
|
173
124
|
|
174
|
-
def move_to to
|
175
|
-
copy_to to
|
176
|
-
destroy
|
125
|
+
def move_to to
|
126
|
+
copy_to to
|
127
|
+
destroy
|
177
128
|
to
|
178
129
|
end
|
179
|
-
def move_to! to, options = {}
|
180
|
-
options[:override] = true
|
181
|
-
move_to to, options
|
182
|
-
end
|
183
130
|
|
184
131
|
|
185
132
|
#
|
@@ -8,17 +8,17 @@ module Vfs
|
|
8
8
|
end
|
9
9
|
|
10
10
|
|
11
|
+
def copy_to to, options = {}
|
12
|
+
from = file? ? to_file : to_dir
|
13
|
+
from.copy_to to, options
|
14
|
+
end
|
15
|
+
|
16
|
+
|
11
17
|
#
|
12
18
|
# CRUD
|
13
19
|
#
|
14
|
-
def destroy
|
15
|
-
|
16
|
-
attrs = get
|
17
|
-
fs.delete_dir path if attrs and attrs[:dir]
|
18
|
-
fs.delete_file path if attrs and attrs[:file]
|
19
|
-
end
|
20
|
-
self
|
20
|
+
def destroy
|
21
|
+
destroy_entry
|
21
22
|
end
|
22
|
-
alias_method :destroy!, :destroy
|
23
23
|
end
|
24
24
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class String
|
2
|
+
def to_entry_on driver = nil
|
3
|
+
path = self
|
4
|
+
driver ||= Vfs.default_driver
|
5
|
+
|
6
|
+
path = "./#{path}" unless path =~ /^[\/\.\~]/
|
7
|
+
Vfs::Entry.new(driver, path).entry
|
8
|
+
end
|
9
|
+
alias_method :to_entry, :to_entry_on
|
10
|
+
|
11
|
+
def to_file_on driver = nil
|
12
|
+
to_entry_on(driver).file
|
13
|
+
end
|
14
|
+
alias_method :to_file, :to_file_on
|
15
|
+
|
16
|
+
def to_dir_on driver = nil
|
17
|
+
to_entry_on(driver).dir
|
18
|
+
end
|
19
|
+
alias_method :to_dir, :to_dir_on
|
20
|
+
end
|
21
|
+
|
22
|
+
class File
|
23
|
+
def to_entry
|
24
|
+
path.to_entry
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_file
|
28
|
+
path.to_file
|
29
|
+
end
|
30
|
+
end
|
data/lib/vfs/vfs.rb
CHANGED
data/readme.md
CHANGED
@@ -51,7 +51,7 @@ projects['cool_app'].copy_to deploy_dir
|
|
51
51
|
|
52
52
|
dbc = deploy_dir.file('config/database.yml') # <= the 'config' dir not exist yet
|
53
53
|
dbc.write("user: root\npassword: secret") # <= now the 'database.yml' and parent 'config' has been created
|
54
|
-
dbc.
|
54
|
+
dbc.read =~ /database/ # => false, we forgot to add the database
|
55
55
|
dbc.append("\ndatabase: mysql") # let's do it
|
56
56
|
|
57
57
|
dbc.update do |content| # and add host info
|
data/spec/container_spec.rb
CHANGED
@@ -1,29 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Container' do
|
4
|
-
|
4
|
+
with_test_dir
|
5
5
|
|
6
6
|
it "should threat paths as UniversalEntry except it ends with '/'" do
|
7
|
-
|
8
|
-
|
7
|
+
test_dir.should_receive(:entry).with('tmp/a/b')
|
8
|
+
test_dir['tmp/a/b']
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
test_dir.should_receive(:dir).with('tmp/a/b')
|
11
|
+
test_dir['tmp/a/b/']
|
12
12
|
end
|
13
13
|
|
14
14
|
it '/' do
|
15
|
-
|
16
|
-
|
15
|
+
test_dir[:some_path].should == test_dir / :some_path
|
16
|
+
test_dir[:some_path][:another_path].should == test_dir / :some_path / :another_path
|
17
17
|
end
|
18
18
|
|
19
19
|
it "UniversalEntry should be wrapped inside of proxy, Dir and File should not" do
|
20
|
-
-> {
|
21
|
-
-> {
|
22
|
-
|
20
|
+
-> {test_dir.dir.proxy?}.should raise_error(NoMethodError)
|
21
|
+
-> {test_dir.file.proxy?}.should raise_error(NoMethodError)
|
22
|
+
test_dir.entry.proxy?.should be_true
|
23
23
|
end
|
24
24
|
|
25
25
|
it "sometimes it also should inexplicitly guess that path is a Dir instead of UniversalEntry (but still wrap it inside of Proxy)" do
|
26
|
-
|
26
|
+
|
27
|
+
dir = test_dir['tmp/a/..']
|
27
28
|
dir.proxy?.should be_true
|
28
29
|
dir.should be_a(Vfs::Dir)
|
29
30
|
end
|
data/spec/dir_spec.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Dir' do
|
4
|
-
|
4
|
+
with_test_dir
|
5
5
|
|
6
6
|
before do
|
7
|
-
@path =
|
7
|
+
@path = test_dir['a/b/c']
|
8
8
|
end
|
9
9
|
|
10
10
|
describe 'existence' do
|
@@ -13,7 +13,7 @@ describe 'Dir' do
|
|
13
13
|
@path.file.create
|
14
14
|
@path.should be_file
|
15
15
|
@path.dir.should_not exist
|
16
|
-
@path.dir.create
|
16
|
+
@path.dir.create
|
17
17
|
@path.should be_dir
|
18
18
|
@path.dir.should exist
|
19
19
|
end
|
@@ -27,7 +27,6 @@ describe 'Dir' do
|
|
27
27
|
describe 'create' do
|
28
28
|
it 'should be chainable' do
|
29
29
|
@path.dir.create.should == @path
|
30
|
-
@path.dir.create!.should == @path
|
31
30
|
end
|
32
31
|
|
33
32
|
it 'should create parent dirs if not exists' do
|
@@ -41,27 +40,29 @@ describe 'Dir' do
|
|
41
40
|
@path.dir.create
|
42
41
|
end
|
43
42
|
|
44
|
-
it 'should override existing file
|
43
|
+
it 'should override existing file' do
|
45
44
|
@path.file.create
|
46
45
|
@path.should be_file
|
47
|
-
|
48
|
-
@path.dir.create!
|
46
|
+
@path.dir.create
|
49
47
|
@path.should be_dir
|
50
48
|
end
|
51
49
|
|
52
|
-
it 'should override existing dir
|
53
|
-
@path.dir
|
54
|
-
|
55
|
-
|
56
|
-
|
50
|
+
it 'should not override existing dir with content' do
|
51
|
+
dir = @path.dir
|
52
|
+
dir.create
|
53
|
+
file = dir.file :file
|
54
|
+
file.create
|
55
|
+
file.should exist
|
56
|
+
|
57
|
+
dir.create
|
58
|
+
file.should exist
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
60
62
|
describe 'destroying' do
|
61
|
-
it "should
|
63
|
+
it "should destroy a file" do
|
62
64
|
@path.file.create
|
63
|
-
|
64
|
-
@path.dir.destroy!
|
65
|
+
@path.dir.destroy
|
65
66
|
@path.entry.should_not exist
|
66
67
|
end
|
67
68
|
|
@@ -72,9 +73,9 @@ describe 'Dir' do
|
|
72
73
|
it 'should destroy recursivelly' do
|
73
74
|
dir = @path.dir
|
74
75
|
dir.create
|
75
|
-
dir.file(
|
76
|
-
dir.dir(
|
77
|
-
dir.file(
|
76
|
+
dir.file(:file).write 'something'
|
77
|
+
dir.dir(:dir).create.tap do |dir|
|
78
|
+
dir.file(:file2).write 'something2'
|
78
79
|
end
|
79
80
|
|
80
81
|
dir.destroy
|
@@ -83,7 +84,6 @@ describe 'Dir' do
|
|
83
84
|
|
84
85
|
it 'should be chainable' do
|
85
86
|
@path.dir.destroy.should == @path
|
86
|
-
@path.dir.destroy!.should == @path
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
@@ -97,10 +97,14 @@ describe 'Dir' do
|
|
97
97
|
it 'entries' do
|
98
98
|
-> {@path['non_existing'].entries}.should raise_error(Vfs::Error, /not exist/)
|
99
99
|
@path['non_existing'].entries(bang: false).should == []
|
100
|
-
@path.entries.to_set.should be_eql([@path.
|
100
|
+
@path.entries.to_set.should be_eql([@path.entry('dir'), @path.entry('file')].to_set)
|
101
101
|
list = []
|
102
102
|
@path.entries{|e| list << e}
|
103
|
-
list.to_set.should be_eql([@path.
|
103
|
+
list.to_set.should be_eql([@path.entry('dir'), @path.entry('file')].to_set)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'entries with type' do
|
107
|
+
@path.entries(type: true).to_set.should be_eql([@path.dir('dir'), @path.file('file')].to_set)
|
104
108
|
end
|
105
109
|
|
106
110
|
it "glob search support" do
|
@@ -151,32 +155,28 @@ describe 'Dir' do
|
|
151
155
|
end
|
152
156
|
|
153
157
|
shared_examples_for 'copy_to behavior' do
|
154
|
-
it 'should
|
155
|
-
|
156
|
-
|
157
|
-
@from.copy_to! @to.file
|
158
|
+
it 'should copy to file and overwrite it' do
|
159
|
+
@from.copy_to @to.file
|
158
160
|
@to['file'].read.should == 'something'
|
159
161
|
end
|
160
162
|
|
161
|
-
it 'should
|
163
|
+
it 'should override files' do
|
162
164
|
@from.copy_to @to
|
163
|
-
-> {@from.copy_to @to}.should raise_error(/already exist/)
|
164
165
|
|
165
|
-
@from['dir/file2'].write
|
166
|
-
@from.copy_to
|
166
|
+
@from['dir/file2'].write 'another'
|
167
|
+
@from.copy_to @to
|
167
168
|
@to['dir/file2'].read.should == 'another'
|
168
169
|
end
|
169
170
|
|
170
|
-
it 'should copy to UniversalEntry (and overwrite
|
171
|
+
it 'should copy to UniversalEntry (and overwrite)' do
|
171
172
|
@from.copy_to @to.entry
|
172
|
-
-> {@from.copy_to @to.entry}.should raise_error(/already exist/)
|
173
173
|
|
174
|
-
@from.copy_to
|
174
|
+
@from.copy_to @to.entry
|
175
175
|
@to['file'].read.should == 'something'
|
176
176
|
end
|
177
177
|
|
178
178
|
it "shouldn't delete existing content of directory" do
|
179
|
-
@to.dir.create
|
179
|
+
@to.dir.create
|
180
180
|
@to.file('existing_file').write 'existing_content'
|
181
181
|
@to.dir('existing_dir').create
|
182
182
|
@to.file('dir/existing_file2').write 'existing_content2'
|
@@ -193,16 +193,21 @@ describe 'Dir' do
|
|
193
193
|
|
194
194
|
it 'should be chainable' do
|
195
195
|
@from.copy_to(@to).should == @to
|
196
|
-
@from.copy_to!(@to).should == @to
|
197
196
|
end
|
198
197
|
|
199
198
|
it "should override without deleting other files" do
|
200
199
|
@from.copy_to(@to).should == @to
|
201
200
|
@to.file('other_file').write 'other'
|
202
201
|
|
203
|
-
@from.copy_to
|
202
|
+
@from.copy_to(@to).should == @to
|
204
203
|
@to.file('other_file').read.should == 'other'
|
205
204
|
end
|
205
|
+
|
206
|
+
it "should raise error if try to copy file as dir" do
|
207
|
+
dir = @from.dir 'file'
|
208
|
+
dir.file?.should be_true
|
209
|
+
-> {dir.copy_to @to}.should raise_error(Vfs::Error)
|
210
|
+
end
|
206
211
|
end
|
207
212
|
|
208
213
|
describe 'general copy' do
|
@@ -212,7 +217,7 @@ describe 'Dir' do
|
|
212
217
|
# prevenging usage of :efficient_dir_copy
|
213
218
|
# Vfs::Dir.dont_use_efficient_dir_copy = true
|
214
219
|
|
215
|
-
@to =
|
220
|
+
@to = test_dir['to']
|
216
221
|
end
|
217
222
|
# after do
|
218
223
|
# Vfs::Dir.dont_use_efficient_dir_copy = false
|
@@ -223,7 +228,7 @@ describe 'Dir' do
|
|
223
228
|
# it_should_behave_like 'copy_to behavior'
|
224
229
|
#
|
225
230
|
# before do
|
226
|
-
# @to =
|
231
|
+
# @to = test_dir['to']
|
227
232
|
# end
|
228
233
|
# end
|
229
234
|
end
|
@@ -231,19 +236,14 @@ describe 'Dir' do
|
|
231
236
|
describe 'moving' do
|
232
237
|
it 'move_to' do
|
233
238
|
from, to = @path.file('from'), @path.file('to')
|
234
|
-
from.should_receive(:copy_to).with(to
|
235
|
-
from.should_receive(:destroy).with(
|
239
|
+
from.should_receive(:copy_to).with(to)
|
240
|
+
from.should_receive(:destroy).with()
|
236
241
|
from.move_to to
|
237
|
-
|
238
|
-
from.should_receive(:move_to).with(to, override: true)
|
239
|
-
from.move_to! to
|
240
242
|
end
|
241
243
|
|
242
244
|
it 'should be chainable' do
|
243
245
|
from, to = @path.dir('from').create, @path.dir('to')
|
244
246
|
from.move_to(to).should == to
|
245
|
-
from.create
|
246
|
-
from.move_to!(to).should == to
|
247
247
|
end
|
248
248
|
end
|
249
249
|
end
|