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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e31dab346d0480a789d011a3792ad317b29cf8bc
4
- data.tar.gz: 263e5057fe26f9aa6fbdf83b8e8cc3de48ca2c0f
3
+ metadata.gz: 7bbcbdf165c676f2df699c6301f514920939bf2e
4
+ data.tar.gz: 2044f3f7002b743532e6c1f21faacd2dc9ef75fc
5
5
  SHA512:
6
- metadata.gz: 7fae0c63c655eb7ac72300b6609b68e1dbad04b5459ad5801fa6af74883ea64c1cabebc73cca17f3d85959bb1595c6461fc1becea90a9b7ccba1528518df783f
7
- data.tar.gz: 92e68045b0dff3621efd197a103ed88be57de7e96ae1b8ca9bebab2cf2e0c963d11558a71d6e6c534d3b83616b8a2bcfc62820a387443eb85dee7268c0bdc3a6
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', github: 'equivalent/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
- # Set file from original resource
21
+ # #set_file
22
+ #
23
+ # sets file for given storage type
19
24
  #
20
- # Founded originally at http://bit.ly/ROGtPR
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
- begin
25
- set_file_for_remote_storage
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
- rescue NoMethodError
29
- raise "Original resource has no File"
34
+ when 'CarrierWave::Storage::Fog'
35
+ set_file_for_remote_storage
36
+ else
37
+ raise UnknowStorage
30
38
  end
31
39
  else
32
- raise "Original resource has no File"
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
- set_resource_mounter_file open(original_resource_mounter.url)
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
- set_resource_mounter_file File.open(original_resource_mounter.file.file)
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
@@ -1,3 +1,3 @@
1
1
  module CopyCarrierwaveFile
2
- VERSION = "1.0.1.1"
2
+ VERSION = "1.1.0"
3
3
  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(Document.new, Document.new, :file)
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, Document.new, :file) }.
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(Document.new, User.new, :file) }.
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(Document.new, Document.new, :foo) }.
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) { Document.new }
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 = Document.new
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) { Document.new }
7
- let(:copy_service){ CopyCarrierwaveFile::CopyFileService.new(original_document, document, :file)}
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.stubs(:file).returns(mock_file)
21
- CopyCarrierwaveFile::CopyFileService.any_instance.expects(:open).with('http://foo').returns(test_file1)
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
- copy_service.set_file
24
- document.save
23
+ CopyCarrierwaveFile::CopyFileService
24
+ .new(original_document, document, :file)
25
+ .set_file
25
26
 
26
- subject.must_equal true
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
- def remove_uploaded_test_files
37
- FileUtils.rm_rf(Dir.glob(TEST_DIR+"/tmp/uploads/*"))
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.0.1.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-03-13 00:00:00.000000000 Z
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.2.2
184
+ rubygems_version: 2.4.3
157
185
  signing_key:
158
186
  specification_version: 4
159
187
  summary: Copy Carrierwave files between records