omnistore 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -69,7 +69,13 @@ module OmniStore
69
69
  FileUtils.mv(src_path, dest_path, options)
70
70
  end
71
71
 
72
- private
72
+ def copy(src, dest, other = self, options = {})
73
+ src_path = expand(src)
74
+ dest_path = expand(dest, other.dir)
75
+ FileUtils.copy(src_path, dest_path, options)
76
+ end
77
+
78
+ private
73
79
 
74
80
  def expand(path, dir = @dir)
75
81
  File.expand_path(path, dir)
@@ -47,6 +47,11 @@ module OmniStore
47
47
  options[:bucket_name] = other.bucket.name
48
48
  bucket.objects[src].move_to(dest, options)
49
49
  end
50
+
51
+ def copy(src, dest, other = self, options = {})
52
+ options[:bucket] = other.bucket
53
+ bucket.objects[src].copy_to(dest, options)
54
+ end
50
55
  end
51
56
  end
52
57
  end
@@ -1,3 +1,3 @@
1
1
  module OmniStore
2
- VERSION = "0.0.17"
2
+ VERSION = "0.0.18"
3
3
  end
@@ -59,4 +59,31 @@ describe OmniStore::Storage::Local::Mountpoint do
59
59
  it { should_not raise_error }
60
60
  end
61
61
  end
62
+
63
+ describe '#copy' do
64
+ let(:src) { t = Tempfile.new(TEST_FILENAME, MOUNTPOINT); File.basename(t.path) }
65
+ let(:dst) { TEST_FILENAME + Time.new.to_i.to_s }
66
+ let(:other) { OmniStore::Storage::Local.mountpoint(:a) }
67
+ subject { lambda { OmniStore::Storage::Local.mountpoint.copy(src, dst, other) } }
68
+
69
+ before do
70
+ OmniStore::Config.mountpoint = { :a => MOUNTPOINT, :b => TMPDIR }
71
+ OmniStore::Storage.remount!
72
+ end
73
+ after { other.delete(dst) rescue nil }
74
+
75
+ context 'when specified a file path that does not exist' do
76
+ let(:src) { TEST_FILENAME + Time.new.to_i.to_s }
77
+ it { should raise_error }
78
+ end
79
+
80
+ context 'when specified a file path that exist' do
81
+ it { should_not raise_error }
82
+ end
83
+
84
+ context 'when copy to another mountpoint' do
85
+ let(:other) { OmniStore::Storage::Local.mountpoint(:b) }
86
+ it { should_not raise_error }
87
+ end
88
+ end
62
89
  end
@@ -116,4 +116,38 @@ describe 'OmniStore::Storage::S3::Mountpoint' do
116
116
  end
117
117
  end
118
118
 
119
+ describe '#copy' do
120
+ let(:src) { TEST_FILENAME }
121
+ let(:dst) { TEST_FILENAME + Time.new.to_i.to_s }
122
+ let(:other) { OmniStore::Storage::S3.mountpoint(:a) }
123
+ subject { lambda { OmniStore::Storage::S3.mountpoint.copy(src, dst, other) } }
124
+
125
+ before do
126
+ OmniStore::Config.mountpoint = { :a => AWS_BUCKET, :b => AWS_BUCKET + 'b' }
127
+ OmniStore::Storage.remount!
128
+ end
129
+
130
+ context 'when copy to same mountpoint' do
131
+ before do
132
+ AWS::S3::S3Object.any_instance.stub(:copy_to).with do |*args|
133
+ args[0].should eq dst
134
+ args[1][:bucket].name.should eq AWS_BUCKET
135
+ true
136
+ end
137
+ end
138
+ it { should_not raise_error }
139
+ end
140
+
141
+ context 'when copy to another mountpoint' do
142
+ before do
143
+ AWS::S3::S3Object.any_instance.stub(:copy_to).with do |*args|
144
+ args[0].should eq dst
145
+ args[1][:bucket].name.should eq other.bucket.name
146
+ true
147
+ end
148
+ end
149
+ let(:other) { OmniStore::Storage::S3.mountpoint(:b) }
150
+ it { should_not raise_error }
151
+ end
152
+ end
119
153
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnistore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.18
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-01 00:00:00.000000000 Z
12
+ date: 2013-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
@@ -123,7 +123,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
123
  version: '0'
124
124
  segments:
125
125
  - 0
126
- hash: -916143315
126
+ hash: -527908049
127
127
  required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  version: '0'
133
133
  segments:
134
134
  - 0
135
- hash: -916143315
135
+ hash: -527908049
136
136
  requirements: []
137
137
  rubyforge_project:
138
138
  rubygems_version: 1.8.24