s3ff 0.9.4 → 0.9.5

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: 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