s3ff 0.9.4 → 0.9.5

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: 945f26d43ebe1d6948e75709b443f1c10ecae50e
4
- data.tar.gz: e90b28d666f592ddda901d5b0e13216a05214587
3
+ metadata.gz: 8f484d70a13f4f286c5c2359cfb0b2ce008646d9
4
+ data.tar.gz: b2ba48eb5a830b8369b70dac313ff6d1c4a239b0
5
5
  SHA512:
6
- metadata.gz: e5d76292b4e71cb1f4d53ac99e7ed5765483206e46bb78561cd51b1f8854eee23d0d3702ea1434f14c3d4be61c0b205711666ff56aa093b78262a2ad7aa362e8
7
- data.tar.gz: 3992c0fc1c8803b062eb07d0e6856db5cf0030570a01637437ac5bdc12428c5e08103f00ce0a77175872f645d01472d4e48034791cce942dcd8f9c6b4129256b
6
+ metadata.gz: 6ef9c3c7d3ebe06188c702897b123405eda017cbdd3f358520561ba5e06d0868baad82049777cf91db81fd5d4e2ced7c433305e694fa14c505efeccae303a6ea
7
+ data.tar.gz: 954dc7d61321c80d3d9fab2eaa02a4c7dcd22c83cbfca13d11bbc7798d674a9bc1764513737d2ae2c70cf7f2a258e02c12bc339b9f5c498614d0200df6ec12ab
data/README.md CHANGED
@@ -123,8 +123,19 @@ end
123
123
 
124
124
  #### CAVEAT
125
125
 
126
- It is not ideal to handle your attachment processing synchronously inside the web request. For usage with `Sidekiq` or `DelayedJob`, look at the reference code in [sample/user.*.rb](https://github.com/jollygoodcode/s3ff/tree/master/sample)
126
+ It is not ideal to handle your attachment processing synchronously inside the web request. If you have `Sidekiq` or `DelayedJob` installed, you should use the `download_from_direct_url_with_delay` helper method instead
127
127
 
128
+ ``` ruby
129
+ class User < ActiveRecord::Base
130
+ has_attached_file :avatar
131
+ validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
132
+
133
+ # s3ff changes
134
+ # for delayed_job, you MUST add a `avatar_direct_url` database column of string type
135
+ # for sidekiq, `avatar_direct_url` is a virtual attribute; adding a database column is optional
136
+ download_from_direct_url_with_delay :avatar
137
+ end
138
+ ```
128
139
 
129
140
  ## Contributing
130
141
 
data/lib/s3ff.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require 's3_file_field'
2
2
  require 's3ff/view_helper'
3
+ require 's3ff/model_helper'
3
4
  require 's3ff/railtie'
4
5
  require 's3ff/engine'
5
6
 
6
7
  ActionView::Base.send(:include, S3FF::ViewHelper)
8
+ ActiveRecord::Base.send(:extend, S3FF::ModelHelper)
7
9
 
8
10
  S3FileField::FormBuilder.class_eval do
9
11
  def s3_file_field_with_s3ff(method, options = {})
@@ -0,0 +1,42 @@
1
+ module S3FF
2
+ module ModelHelper
3
+ def download_from_direct_url_with_delay(attr_name)
4
+ if self.respond_to?(:delay)
5
+ self.class_eval <<-EOM
6
+ attr_accessor :#{attr_name}_direct_url unless self.column_names.include?("#{attr_name}_direct_url")
7
+ after_save :delay_s3ff_download_direct_url, if: proc { #{attr_name}_direct_url.present? }
8
+
9
+ def delay_s3ff_download_direct_url
10
+ self.class.delay.s3ff_download_direct_url(id, #{attr_name}_direct_url)
11
+ end
12
+
13
+ def self.s3ff_download_direct_url(instance_id, #{attr_name}_direct_url)
14
+ open(#{attr_name}_direct_url, ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE) do |file|
15
+ find(instance_id).update(
16
+ #{attr_name}: file,
17
+ #{attr_name}_file_name: File.basename(#{attr_name}_direct_url),
18
+ )
19
+ end
20
+ end
21
+ EOM
22
+ elsif self.respond_to?(:handle_asynchronously)
23
+ self.class_eval <<-EOM
24
+ after_save :s3ff_download_direct_url, if: -> { #{attr_name}_direct_url.present? && #{attr_name}_direct_url_changed? }
25
+
26
+ def s3ff_download_direct_url
27
+ open(#{attr_name}_direct_url, ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE) do |file|
28
+ update(
29
+ #{attr_name}: file,
30
+ #{attr_name}_file_name: File.basename(#{attr_name}_direct_url),
31
+ )
32
+ end
33
+ end
34
+
35
+ handle_asynchronously :s3ff_download_direct_url
36
+ EOM
37
+ else
38
+ raise NotImplementedError('download_from_direct_url_with_delay only supports delayed_job or sidekiq delayed extension')
39
+ end
40
+ end
41
+ end
42
+ end
data/lib/s3ff/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module S3FF
2
- VERSION = '0.9.4'
2
+ VERSION = '0.9.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3ff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chew Choon Keat
@@ -77,6 +77,7 @@ files:
77
77
  - app/assets/javascripts/s3ff.js
78
78
  - lib/s3ff.rb
79
79
  - lib/s3ff/engine.rb
80
+ - lib/s3ff/model_helper.rb
80
81
  - lib/s3ff/railtie.rb
81
82
  - lib/s3ff/version.rb
82
83
  - lib/s3ff/view_helper.rb