copy_carrierwave_file 1.0.1.1 → 1.1.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -0
- data/Gemfile +0 -0
- data/LICENSE.txt +0 -0
- data/README.md +2 -2
- data/Rakefile +0 -0
- data/copy_carrierwave_file.gemspec +2 -0
- data/lib/copy_carrierwave_file/copy_file_service.rb +18 -25
- data/lib/copy_carrierwave_file/version.rb +1 -1
- data/lib/copy_carrierwave_file.rb +0 -0
- data/test/copy_carrierwave_file_test.rb +0 -0
- data/test/copy_file_service_wrong_initialization_test.rb +4 -4
- data/test/copy_local_storage_file_test.rb +2 -2
- data/test/copy_remote_storage_file_test.rb +15 -14
- data/test/fixtures/uploads/test_file1.txt +0 -0
- data/test/fixtures/uploads/test_file2.txt +0 -0
- data/test/support/upload_file_macros.rb +0 -0
- data/test/test_helper.rb +18 -5
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bbcbdf165c676f2df699c6301f514920939bf2e
|
4
|
+
data.tar.gz: 2044f3f7002b743532e6c1f21faacd2dc9ef75fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2da82d12ae7da6b071224759a5a7687f205fd43fd9e1584cfdf316386323f8546a96221a33531f58654c32e4f24e4b3d6f2b1f0db06e76ea96174158e36980f
|
7
|
+
data.tar.gz: 6515ccf613c39e62364ec9a77eba435fbde3914e8c07065ad9b4140e7581bc0eab7faaf571477b29ff45fb0ac106ff57a3a46a9b33f69567c0a70316f7b6e05b
|
data/.gitignore
CHANGED
File without changes
|
data/Gemfile
CHANGED
File without changes
|
data/LICENSE.txt
CHANGED
File without changes
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ It's solving issues with local and remote storage discussed
|
|
10
10
|
|
11
11
|
Add this line to your application's Gemfile:
|
12
12
|
|
13
|
-
gem 'copy_carrierwave_file'
|
13
|
+
gem 'copy_carrierwave_file'
|
14
14
|
|
15
15
|
And then execute:
|
16
16
|
|
@@ -25,7 +25,7 @@ You can use service class directly:
|
|
25
25
|
new_resource = User.new
|
26
26
|
|
27
27
|
CopyCarrierwaveFile::CopyFileService.new(original_resource, new_resource, :avatar).set_file
|
28
|
-
# :avatar represents mount point
|
28
|
+
# :avatar represents mount point (field)
|
29
29
|
|
30
30
|
new_resource.save
|
31
31
|
|
data/Rakefile
CHANGED
File without changes
|
@@ -25,4 +25,6 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency "minitest", "~> 5"
|
26
26
|
spec.add_development_dependency "mocha", "~> 0.14"
|
27
27
|
spec.add_development_dependency "sqlite3"
|
28
|
+
spec.add_development_dependency "fog"
|
29
|
+
spec.add_development_dependency "pry"
|
28
30
|
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module CopyCarrierwaveFile
|
2
2
|
class CopyFileService
|
3
|
+
NoFileForOriginalResource = Class.new(StandardError)
|
4
|
+
UnknowStorage = Class.new(StandardError)
|
5
|
+
|
3
6
|
attr_reader :original_resource, :resource, :mount_point
|
4
7
|
|
5
8
|
def initialize(original_resource, resource, mount_point)
|
@@ -15,21 +18,26 @@ module CopyCarrierwaveFile
|
|
15
18
|
@resource = resource
|
16
19
|
end
|
17
20
|
|
18
|
-
#
|
21
|
+
# #set_file
|
22
|
+
#
|
23
|
+
# sets file for given storage type
|
19
24
|
#
|
20
|
-
#
|
25
|
+
# reason why case is comparing String and not actual storage class
|
26
|
+
# is that user may or may not add gem "fog" => this class may not be
|
27
|
+
# loaded
|
21
28
|
#
|
22
29
|
def set_file
|
23
30
|
if have_file?
|
24
|
-
|
25
|
-
|
26
|
-
rescue Errno::ENOENT
|
31
|
+
case original_resource_mounter.send(:storage).class.name
|
32
|
+
when 'CarrierWave::Storage::File'
|
27
33
|
set_file_for_local_storage
|
28
|
-
|
29
|
-
|
34
|
+
when 'CarrierWave::Storage::Fog'
|
35
|
+
set_file_for_remote_storage
|
36
|
+
else
|
37
|
+
raise UnknowStorage
|
30
38
|
end
|
31
39
|
else
|
32
|
-
raise
|
40
|
+
raise NoFileForOriginalResource
|
33
41
|
end
|
34
42
|
end
|
35
43
|
|
@@ -37,32 +45,17 @@ module CopyCarrierwaveFile
|
|
37
45
|
original_resource_mounter.file.present?
|
38
46
|
end
|
39
47
|
|
40
|
-
# Set file when you use remote storage for your files (like S3)
|
41
|
-
#
|
42
|
-
# will try to fetch full remote path of a file with `open-uri`
|
43
|
-
#
|
44
|
-
# If you use local storage, `doc.avatar.url` will return relative path, therefor
|
45
|
-
# this will fail with Errno::ENOENT
|
46
|
-
#
|
47
|
-
# If you have issues with code try alternative code:
|
48
|
-
#
|
49
|
-
# resource.remote_file_url = original_resource.avatar.url
|
50
|
-
#
|
51
48
|
def set_file_for_remote_storage
|
52
|
-
|
49
|
+
resource.send(:"remote_#{mount_point.to_s}_url=", original_resource_mounter.url)
|
53
50
|
end
|
54
51
|
|
55
52
|
def set_file_for_local_storage
|
56
|
-
|
53
|
+
resource.send(:"#{mount_point.to_s}=", File.open(original_resource_mounter.file.file))
|
57
54
|
end
|
58
55
|
|
59
56
|
def original_resource_mounter
|
60
57
|
original_resource.send(mount_point)
|
61
58
|
end
|
62
59
|
|
63
|
-
def set_resource_mounter_file(file)
|
64
|
-
resource.send( :"#{mount_point.to_s}=", file)
|
65
|
-
end
|
66
|
-
|
67
60
|
end
|
68
61
|
end
|
File without changes
|
File without changes
|
@@ -9,13 +9,13 @@ describe CopyCarrierwaveFile::CopyFileService, 'initialization' do
|
|
9
9
|
|
10
10
|
context 'with resources with uploader and right mount point' do
|
11
11
|
it "should not raise an error" do
|
12
|
-
CopyCarrierwaveFile::CopyFileService.new(
|
12
|
+
CopyCarrierwaveFile::CopyFileService.new(LocalDocument.new, LocalDocument.new, :file)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
context 'when original resources without uploader' do
|
17
17
|
it "should raise an error" do
|
18
|
-
proc{ CopyCarrierwaveFile::CopyFileService.new(User.new,
|
18
|
+
proc{ CopyCarrierwaveFile::CopyFileService.new(User.new, LocalDocument.new, :file) }.
|
19
19
|
must_raise RuntimeError
|
20
20
|
end
|
21
21
|
end
|
@@ -23,14 +23,14 @@ describe CopyCarrierwaveFile::CopyFileService, 'initialization' do
|
|
23
23
|
|
24
24
|
context 'when resources without uploader' do
|
25
25
|
it "should raise an error" do
|
26
|
-
proc{ CopyCarrierwaveFile::CopyFileService.new(
|
26
|
+
proc{ CopyCarrierwaveFile::CopyFileService.new(LocalDocument.new, User.new, :file) }.
|
27
27
|
must_raise RuntimeError
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
context 'with resources with uploader but wrong mount point' do
|
32
32
|
it do
|
33
|
-
proc{ CopyCarrierwaveFile::CopyFileService.new(
|
33
|
+
proc{ CopyCarrierwaveFile::CopyFileService.new(LocalDocument.new, LocalDocument.new, :foo) }.
|
34
34
|
must_raise RuntimeError
|
35
35
|
end
|
36
36
|
end
|
@@ -7,10 +7,10 @@ describe 'CopyCarrierwaveFile', 'copying local storage file' do
|
|
7
7
|
FileUtils.rm_rf(Dir.glob(TEST_DIR+"/tmp/uploads/*"))
|
8
8
|
end
|
9
9
|
|
10
|
-
let(:document) {
|
10
|
+
let(:document) { LocalDocument.new }
|
11
11
|
let(:copy_service){ CopyCarrierwaveFile::CopyFileService.new(original_document, document, :file)}
|
12
12
|
let(:original_document) do
|
13
|
-
doc =
|
13
|
+
doc = LocalDocument.new
|
14
14
|
doc.file = test_file1
|
15
15
|
doc.save
|
16
16
|
doc
|
@@ -1,28 +1,29 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'pry'
|
2
3
|
|
3
4
|
describe CopyCarrierwaveFile::CopyFileService, 'copying remote storage file' do
|
4
5
|
include UploadedFileMacros
|
5
6
|
|
6
|
-
let(:document)
|
7
|
-
let(:
|
8
|
-
let(:original_document){ Document.create }
|
7
|
+
let(:document) { RemoteDocument.new }
|
8
|
+
let(:original_document) { RemoteDocument.create }
|
9
9
|
|
10
10
|
after(:all){ remove_uploaded_test_files }
|
11
11
|
|
12
|
-
subject{ FileUtils.identical?(test_file1, document.file.file.file) }
|
13
|
-
|
14
|
-
|
15
12
|
it 'Document file must be identical to Original document file' do
|
16
|
-
mock_file = mock()
|
17
|
-
mock_file.expects(:file).at_least_once.returns('a_file_mock')
|
18
|
-
mock_file.expects(:url).at_least_once.returns('http://foo')
|
19
13
|
|
20
|
-
original_document
|
21
|
-
|
14
|
+
# set any file on original_document so that copy can start
|
15
|
+
original_document.remote_file_url = 'http://mock.com/test.jpg'
|
16
|
+
|
17
|
+
# because we do Fog.mock! storage acts now as local, we return some url
|
18
|
+
original_document
|
19
|
+
.file
|
20
|
+
.stubs(:url)
|
21
|
+
.returns('http://mock.com/test.jpg')
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
CopyCarrierwaveFile::CopyFileService
|
24
|
+
.new(original_document, document, :file)
|
25
|
+
.set_file
|
25
26
|
|
26
|
-
|
27
|
+
document.file.file.must_be_kind_of CarrierWave::SanitizedFile
|
27
28
|
end
|
28
29
|
end
|
File without changes
|
File without changes
|
File without changes
|
data/test/test_helper.rb
CHANGED
@@ -16,11 +16,12 @@ class Minitest::Spec
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
Fog.mock!
|
20
|
+
|
19
21
|
ActiveRecord::Base::establish_connection(adapter: 'sqlite3', database: ':memory:')
|
20
22
|
ActiveRecord::Base.connection.execute(%{CREATE TABLE documents (id INTEGER PRIMARY KEY, file STRING );})
|
21
23
|
|
22
|
-
|
23
|
-
class FileUploader < CarrierWave::Uploader::Base
|
24
|
+
class LocalFileUploader < CarrierWave::Uploader::Base
|
24
25
|
storage :file
|
25
26
|
|
26
27
|
def root
|
@@ -28,13 +29,25 @@ class FileUploader < CarrierWave::Uploader::Base
|
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
32
|
+
class RemoteFileUploader < CarrierWave::Uploader::Base
|
33
|
+
storage :fog
|
34
|
+
|
35
|
+
def root
|
36
|
+
"#{TEST_DIR}/tmp/" #
|
37
|
+
end
|
38
|
+
end
|
31
39
|
|
32
40
|
class Document < ActiveRecord::Base
|
33
|
-
mount_uploader :file, FileUploader
|
34
41
|
end
|
35
42
|
|
36
|
-
|
37
|
-
|
43
|
+
class LocalDocument < Document
|
44
|
+
mount_uploader :file, LocalFileUploader
|
38
45
|
end
|
39
46
|
|
47
|
+
class RemoteDocument < Document
|
48
|
+
mount_uploader :file, RemoteFileUploader
|
49
|
+
end
|
40
50
|
|
51
|
+
def remove_uploaded_test_files
|
52
|
+
FileUtils.rm_rf(Dir.glob(TEST_DIR+"/tmp/uploads/*"))
|
53
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: copy_carrierwave_file
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Valent
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: carrierwave
|
@@ -108,6 +108,34 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: fog
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
111
139
|
description: 'Gems main responsibility is to provide service for copying Carrierwave
|
112
140
|
files between records '
|
113
141
|
email:
|
@@ -153,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
181
|
version: '0'
|
154
182
|
requirements: []
|
155
183
|
rubyforge_project:
|
156
|
-
rubygems_version: 2.
|
184
|
+
rubygems_version: 2.4.3
|
157
185
|
signing_key:
|
158
186
|
specification_version: 4
|
159
187
|
summary: Copy Carrierwave files between records
|