s3ff 0.9.1 → 0.9.2

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: f22ad02b8e3eeca86cbd5349b62531a764b43614
4
- data.tar.gz: 43199824a91fbad288a0507b8f0391d951946089
3
+ metadata.gz: 804b22add6dbaad3b44df45846e522113b9c848e
4
+ data.tar.gz: 290fe54e2b6ede4b2d914af03534eb019945b442
5
5
  SHA512:
6
- metadata.gz: 8ad7fdfba1a7ba04ab13530c8d049d41cf9360605e7db8d6aa8e4072891594f824302d4750e8dbd016fe6c66955802b076d10a9b3063f003912b7ac9c9ffd5d6
7
- data.tar.gz: dc89543f7ef182df36d1c94183fb18287de533f536ac34983ebf25524db944c1ece6fb7b6ad7df644409aa7886115af942c19e9bc9648a3ab47392f76ffecad3
6
+ metadata.gz: 1263f70cfdb4dd17e6284aebbc8d8cc9d588ba3d422f4b15c044ea7dc1503246becdfbbfb09e70ff7aa75bb74ab4e6e151e5f58ec4aed4484cbe10455264d393
7
+ data.tar.gz: 51cf9eb3149442474c227fcd93042152462cc9c46aaa4ccb8b84c890a0455f57e61a155a8b8fb373feabcab519e75612d1140cde4e20c2d1c3a56e92536e2428
data/README.md CHANGED
@@ -21,35 +21,11 @@ Or install it yourself as:
21
21
 
22
22
  ## Usage
23
23
 
24
- ### 0. Add initializer for s3_file_field:
25
-
26
- ```ruby
27
- if defined?(S3FileField) && ENV['AWS_KEY']
28
- cdn_hostname = ENV.fetch('CDN_HOSTNAME') { ENV['S3_BUCKET'] && "#{ENV['S3_BUCKET']}.s3.amazonaws.com" }
29
- S3FileField.config do |c|
30
- c.access_key_id = ENV['AWS_KEY']
31
- c.secret_access_key = ENV['AWS_SECRET']
32
- c.bucket = ENV['S3_BUCKET']
33
- c.region = ENV['S3_BUCKET_REGION'] || 'us-west-2'
34
- c.url = "//#{cdn_hostname}" if cdn_hostname # S3 API endpoint (optional), eg. "https://#{c.bucket}.s3.amazonaws.com/"
35
- # c.acl = "public-read"
36
- # c.expiration = 10.hours.from_now.utc.iso8601
37
- # c.max_file_size = 100.megabytes
38
- # c.conditions = []
39
- # c.key_starts_with = 'uploads/
40
- # c.ssl = true # if true, force SSL connection
41
- end
24
+ ### 1. Configure s3_file_field
42
25
 
43
- elsif defined?(S3FileField) # for when no S3 is configured, fallback to regular `file_field`
44
- S3FileField::FormBuilder.class_eval do
45
- def s3_file_field(method, options = {})
46
- @template.file_field(@object_name, method, options)
47
- end
48
- end
49
- end
50
- ```
26
+ add a config like `sample/config_s3_file_field.rb` into your Rails `config/initializers/` directory
51
27
 
52
- ### 1. Add javascript
28
+ ### 2. Add javascript
53
29
 
54
30
  in your application.js
55
31
 
@@ -57,24 +33,24 @@ in your application.js
57
33
  //= require s3ff
58
34
  ```
59
35
 
60
- ### 2. Change `file_field` input to use `s3_file_field`
36
+ ### 3. Change `file_field` input to use `s3_file_field`
61
37
 
62
- ```
38
+ ``` haml
63
39
  = form_for :user do |f|
64
40
  = f.s3_file_field :avatar
65
41
  ```
66
42
 
67
43
  or if you're using `simple_form`
68
44
 
69
- ```
45
+ ``` haml
70
46
  = simple_form_for :user do |f|
71
47
  = f.input :avatar do
72
48
  = f.s3_file_field :avatar, :class => "form-control"
73
49
  ```
74
50
 
75
- ### 3. Add footer
51
+ ### 4. Add footer
76
52
 
77
- ```
53
+ ``` haml
78
54
  = include_s3ff_templates
79
55
  ```
80
56
 
@@ -84,22 +60,19 @@ NOTE: Feel free to modify & render the templates manually, but keep the `s3ff_`
84
60
 
85
61
  To illustate, if you have a file field like this
86
62
 
87
- ```
63
+ ``` html
88
64
  <input type="file" name="user[avatar]">
89
65
  ```
90
66
 
91
- When `s3ff` kicks in, it would upgrade the field to a `s3_file_field`. When your user chooses a file, it will be uploaded, with a progress indicator, directly into your S3 bucket (see `s3_file_field` gem for configuration). Your `form` will be disabled during the upload and re-enabled once upload completes. After this process, 4 new hidden form fields will be attached to your form:
67
+ When `s3ff` kicks in, it would upgrade the field to a `s3_file_field`. When your user chooses a file, it will be uploaded, with a progress indicator, directly into your S3 bucket (see `s3_file_field` gem for configuration). Your `form` will be disabled during the upload and re-enabled once upload completes. After this process, a new hidden form field will be attached to your form:
92
68
 
93
- ```
69
+ ``` html
94
70
  <input type="file" name="user[avatar_direct_url]" value="https://....">
95
- <input type="file" name="user[avatar_file_name]" value="face.png">
96
- <input type="file" name="user[avatar_file_size]" value="162534">
97
- <input type="file" name="user[avatar_content_type]" value="image/png">
98
71
  ```
99
72
 
100
73
  ## Code changes to your app
101
74
 
102
- `s3ff` designed to minimize moving parts and code changes to your Rails app - all it does is give you 4 form fields in return for every direct s3 file upload that happened in your user's browser.
75
+ `s3ff` designed to minimize moving parts and code changes to your Rails app - all it does is give you new hidden form fields in return for every direct s3 file upload that happened in your user's browser.
103
76
 
104
77
  How you deal with these form fields are entirely up to you. Here's a simple way:
105
78
 
@@ -107,44 +80,53 @@ How you deal with these form fields are entirely up to you. Here's a simple way:
107
80
 
108
81
  If your controller was specifying
109
82
 
110
- ```
83
+ ``` ruby
111
84
  params.require(:user).permit(:avatar)
112
85
  ```
113
86
 
114
87
  It would need to be changed to accept the new form fields
115
88
 
116
- ```
117
- params.require(:user).permit(:avatar,
118
- :avatar_direct_url,
119
- :avatar_file_name,
120
- :avatar_file_size,
121
- :avatar_content_type
122
- )
89
+ ``` ruby
90
+ params.require(:user).permit(:avatar, :avatar_direct_url)
123
91
  ```
124
92
 
125
93
  #### 2. Upgrade model to also accept direct url
126
94
 
127
95
  If your model was originally
128
96
 
129
- ```
97
+ ``` ruby
130
98
  class User < ActiveRecord::Base
131
99
  has_attached_file :avatar
100
+ validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
132
101
  end
133
102
  ```
134
103
 
135
- Download the file from S3 when given `avatar_direct_url`. This leave all your existing Paperclip code and logic unchanged.
104
+ Download the file from S3 when given `avatar_direct_url`. This leaves all your existing Paperclip code and logic unchanged.
136
105
 
137
- ```
106
+ ``` ruby
138
107
  class User < ActiveRecord::Base
139
108
  has_attached_file :avatar
109
+ validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
110
+
111
+ # s3ff changes
140
112
 
141
- attr_accessor :avatar_direct_url
142
113
  def avatar_direct_url=(value)
143
- self.avatar = open(value) if value.present?
114
+ self.avatar =
115
+ ActionDispatch::Http::UploadedFile.new(
116
+ tempfile: open(value),
117
+ filename: File.basename(value),
118
+ ).tap do |upload|
119
+ upload.content_type = Paperclip::ContentTypeDetector.new(upload.path).detect
120
+ end
144
121
  end
145
122
  end
146
123
  ```
147
124
 
125
+ #### CAVEAT
126
+
127
+ It isn't ideal to handle your attachment processing synchronously during the web request. For usage with `Sidekiq` or `DelayedJob`, look at the reference code in `sample/user.*.rb`
128
+
129
+
148
130
  ## Contributing
149
131
 
150
132
  1. Fork it ( http://github.com/jollygoodcode/s3ff/fork )
data/lib/s3ff/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module S3FF
2
- VERSION = '0.9.1'
2
+ VERSION = '0.9.2'
3
3
  end
@@ -1,6 +1,6 @@
1
1
  module S3FF
2
2
  module ViewHelper
3
- def include_s3ff_templates(map = { _direct_url: 'result.url', _file_name: 'result.filename', _file_size: 'result.filesize', _content_type: 'result.filetype' })
3
+ def include_s3ff_templates(map = { _direct_url: 'result.url' }) # extras: , _file_name: 'result.filename', _file_size: 'result.filesize', _content_type: 'result.filetype' })
4
4
  <<-EOM
5
5
  <div style="display:none;">
6
6
  <script id="s3ff_label" type="text/x-tmpl">
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.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chew Choon Keat