anaconda 1.0.6 → 1.0.7

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: 5c7cbd46c8a54f1460ab2f8ef0c3d3742d100938
4
- data.tar.gz: 9a8ecdddccff63cdcbbfe5584a1031f418f3009a
3
+ metadata.gz: 911805ae124cc803fe5b8b0bb0a83d33f57bffe8
4
+ data.tar.gz: 9d0dab201af413c396fd6dd8f2a2bb53e4f67d12
5
5
  SHA512:
6
- metadata.gz: 100a0f6e07ab2c95a3a56e4dbe4ee23a81fb5ebe98b1987d0f9a36f7d90abb09f8423f5deee9c111d598bb9d20e02469a10eb5f89b46d2103c8a9b869e243cb2
7
- data.tar.gz: 56943ca4dc3d75f739e3157defec071616dab407bf7c493d6a82082f3ec5c5a4617b40a6615684452ca3a6ba9e295b0fd66d919efb30bb339c719c5dfb627a83
6
+ metadata.gz: c419a1acb382d201e2e92094cbfc06a075ca96bd7297dcf1e82c96e5b167dbf5c501874ffb4343aa7a3161b556a6074f71721bd9de6e122b777a63dc4679ab7d
7
+ data.tar.gz: 8638e2cc7119df3e65e3b1a8daff553d2e1862e2bf2d43333e158c962e1dc272182c014db1a19ef872f77ae6152c3c9b584b0d3412bd9c5b6fd2f8a281073285
data/README.markdown CHANGED
@@ -134,8 +134,9 @@ We highly recommend the `figaro` gem [https://github.com/laserlemon/figaro](http
134
134
  * `allowed_file_types` default: _all_
135
135
  * `host` String. If specified, this will be used to access publically stored objects instead of the S3 bucket. Useful for CloudFront integration. Note: At this time privately stored objects will still be requested via S3. Default: _false_
136
136
  * `protocol` `https`, `http`, or `:auto`. If `:auto`, `//` will be used as the protocol. Note: At this time, all privately stored objects are requested over https. Default: `http`
137
- * `remove_previous_s3_files_on_change` Boolean. If true, files will be removed from S3 when a new file is uploaded. Default: `true`
138
- * `remove_previous_s3_files_on_destroy` Boolean. If true, files will be removed from S3 when a record is destroyed. Default: `true`
137
+ * `remove_previous_s3_files_on_change` Boolean. If true, files will be removed from S3 when a new file is uploaded. Default: `true`
138
+ * `remove_previous_s3_files_on_destroy` Boolean. If true, files will be removed from S3 when a record is destroyed. Default: `true`
139
+ * `expiry_length` - If supplied, this is the length in seconds that a signed URL is valid for. Default: `1.hour`
139
140
 
140
141
  * Form setup
141
142
 
@@ -154,7 +155,7 @@ We highly recommend the `figaro` gem [https://github.com/laserlemon/figaro](http
154
155
  * `upload_details_container` - An element id you would like the upload details located in. Defaults to `<resource>_<attribtue>_details` ex: `post_media_asset_details`
155
156
  * `auto_upload` - If set to true, upload will begin as soon as a file is selected. Default: *false*
156
157
  * `auto_submit` - If set to true, form will submit automatically when upload is completed. Useful when mixed with `auto_upload: true`, especially if the file field is the only field on the form. Default: *true* when auto_upload is false; *false* when auto_upload is true.
157
- * `base_key` - If supplied, this will be the base_key used for this upload
158
+ * `base_key` - If supplied, this will be the base_key used for this upload
158
159
 
159
160
  * Fields
160
161
 
@@ -168,14 +169,30 @@ We highly recommend the `figaro` gem [https://github.com/laserlemon/figaro](http
168
169
  * :asset_url
169
170
  * :asset_download_url
170
171
 
171
- The magic methods are asset_url and asset_download_url.
172
+ The magic methods are `asset_url` and `asset_download_url`.
172
173
 
173
- `asset_url` will return a signed S3 URL if the file is stored with an ACL of `private` and will return a non-signed URL if the file is stored with public access.
174
+ `asset_url` will return a signed S3 URL if the file is stored with an ACL of `private` and will return a non-signed URL if the file is stored with public access. This accepts a single optional hash argument with possible parameters `protocol` and `expires`.
174
175
 
175
- You may pass an options hash to the `asset_url` magic method. At this time, the only supported option is :protocol. Example: `asset_url({protocol: 'http'})` This will override the `protocol` option set in the model.
176
+ `asset_download_url` will return a signed S3 URL with content-disposition set to attachment so the file will be downloaded instead of opened in the browser. This accepts a single optional hash argument. The only supported parameter in this hash is `expires`.
177
+
178
+ `protocol`, if specified here, will override the default value set in the model.
179
+ `expires` is a DateTime object when a signed URL will be valid until. On a file stored publically, this has no effect.
180
+
181
+
182
+ Example usages:
183
+
184
+ # Assuming the files are stored privately.
185
+
186
+ asset_url(expires: 3.hours.from_now)
187
+ # Generates a URL that is valid for 3 hours
188
+
189
+ asset_url(protocol: "https", expires: 5.minutes.from_now)
190
+ # Generates a URL that is valid for 5 minutes, and uses the https protocol
191
+
192
+ asset_download_url(expires: 5.minutes.from_now)
193
+ # Generates a URL that is valid for 5 minutes, and will cause the browser to download the object.
194
+ # This is most useful for things like images that most browsers try to display.
176
195
 
177
- `asset_download_url` will return a signed S3 URL with content-disposition set to attachment so the file will be downloaded instead of opened in the browser.
178
-
179
196
  ### Advanced Usage
180
197
 
181
198
  #### Events
@@ -202,6 +219,10 @@ If you return false to the following events it will prevent the default behavior
202
219
  From version 1.0.0 on we have used [Semantic Versioning](http://semver.org/).
203
220
 
204
221
  ## Changelog
222
+ * 1.0.7
223
+ * Add support for `expires` option in signed AWS URLs.
224
+ * Add option for setting default `expiry_length` for signed AWS URLs.
225
+
205
226
  * 1.0.6
206
227
  * Loosen dependency requirement on `simple_form`
207
228
 
@@ -39,6 +39,7 @@ module Anaconda
39
39
  base_key: "#{anaconda_column}_anaconda_default_base_key".to_sym,
40
40
  host: false,
41
41
  protocol: "http",
42
+ expiry_length: 1.hour,
42
43
  remove_previous_s3_files_on_change: true,
43
44
  remove_previous_s3_files_on_destroy: true
44
45
  )
@@ -117,10 +118,10 @@ module Anaconda
117
118
  options = args.extract_options!
118
119
  logger.debug "Extracted Options:"
119
120
  logger.debug(options)
120
-
121
+
121
122
  if send("#{column_name}_stored_privately")
122
123
  aws = Fog::Storage.new({:provider => 'AWS', :aws_access_key_id => Anaconda.aws[:aws_access_key], :aws_secret_access_key => Anaconda.aws[:aws_secret_key], :path_style => Anaconda.aws[:path_style]})
123
- aws.get_object_https_url(Anaconda.aws[:aws_bucket], send("#{column_name}_file_path"), 1.hour.from_now)
124
+ aws.get_object_https_url(Anaconda.aws[:aws_bucket], send("#{column_name}_file_path"), anaconda_expiry_length(column_name, options[:expires]))
124
125
  elsif self.anaconda_options[column_name.to_sym][:host]
125
126
  "#{anaconda_protocol(column_name, options[:protocol])}#{self.anaconda_options[column_name.to_sym][:host]}/#{send("#{column_name}_file_path")}"
126
127
  else
@@ -130,10 +131,13 @@ module Anaconda
130
131
 
131
132
  def anaconda_download_url(column_name)
132
133
  return nil unless send("#{column_name}_file_path").present?
134
+ options = args.extract_options!
135
+ logger.debug "Extracted Options:"
136
+ logger.debug(options)
133
137
 
134
- options = {query: {"response-content-disposition" => "attachment;"}}
138
+ aws_options = {query: {"response-content-disposition" => "attachment;"}}
135
139
  aws = Fog::Storage.new({:provider => 'AWS', :aws_access_key_id => Anaconda.aws[:aws_access_key], :aws_secret_access_key => Anaconda.aws[:aws_secret_key], :path_style => Anaconda.aws[:path_style]})
136
- aws.get_object_https_url(Anaconda.aws[:aws_bucket], send("#{column_name}_file_path"), 1.hour.from_now, options)
140
+ aws.get_object_https_url(Anaconda.aws[:aws_bucket], send("#{column_name}_file_path"), anaconda_expiry_length(column_name, options[:expires]), aws_options)
137
141
 
138
142
  end
139
143
 
@@ -147,6 +151,11 @@ module Anaconda
147
151
  end
148
152
  end
149
153
 
154
+ def anaconda_expiry_length(column_name, override = nil)
155
+ return override if override
156
+ self.anaconda_options[column_name.to_sym][:expiry_length].seconds.from_now
157
+ end
158
+
150
159
  def anaconda_default_base_key_for(column_name)
151
160
  "#{self.class.to_s.pluralize.downcase}/#{column_name.to_s.pluralize}/#{(0...32).map{(65+rand(26)).chr}.join.downcase}"
152
161
  end
@@ -1,5 +1,5 @@
1
1
  module Anaconda
2
2
  module Rails
3
- VERSION = "1.0.6"
3
+ VERSION = "1.0.7"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anaconda
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben McFadden