copy_carrierwave_file 1.0.1.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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