expiring_asset_links 1.2.0 → 1.3.1
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.
- data/README.md +43 -15
- data/lib/expiring_asset_links.rb +17 -8
- data/lib/expiring_asset_links/configuration.rb +22 -0
- data/lib/expiring_asset_links/version.rb +2 -2
- data/test/expiring_asset_links_test.rb +111 -6
- data/test/test_helper.rb +4 -9
- metadata +3 -2
data/README.md
CHANGED
@@ -30,22 +30,10 @@ or add it to your Gemfile
|
|
30
30
|
|
31
31
|
your configuration must satisfy the following requirements:
|
32
32
|
|
33
|
-
*
|
34
|
-
*
|
33
|
+
* define `storage :fog`
|
34
|
+
* set `Expires` in `s3_headers`
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
<pre>
|
39
|
-
uploads/#{Rails.env}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}
|
40
|
-
uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}
|
41
|
-
#{Rails.env}/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}
|
42
|
-
#{Rails.env}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}
|
43
|
-
a/series/of/folder/names/or/1/numbers/2/that_do/not/contain/spaces/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}
|
44
|
-
</pre>
|
45
|
-
|
46
|
-
* `s3_headers` must include a value for `Expires`
|
47
|
-
|
48
|
-
for example
|
36
|
+
>
|
49
37
|
|
50
38
|
class AssetUploader < CarrierWave::Uploader::Base
|
51
39
|
storage :fog
|
@@ -60,6 +48,21 @@ for example
|
|
60
48
|
|
61
49
|
end
|
62
50
|
|
51
|
+
### add an initializer with your CarrierWave Uploader `store_dir` matching Regexp
|
52
|
+
|
53
|
+
if you wish to change the default `store_dir` in your CarrierWave Uploader you will need to create a Regexp that captures the object class name and id from the path
|
54
|
+
|
55
|
+
create an initializer, such as `config/initializers/expiring_asset_links.rb` and include your configuration with Regexp
|
56
|
+
|
57
|
+
ExpiringAssetLinks.configure do |conf|
|
58
|
+
conf.fog_directory = /\/\S+\/(?<name>[a-z_]+)\/[a-z_]+\/(?<id>\d+)/
|
59
|
+
end
|
60
|
+
|
61
|
+
the path defined in CarrierWave Uploader `store_dir`, such as `uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}`, must match the Regexp in your configuration once generated by CarrierWave and must capture the class name as `<name>` and the object id as `<id>`
|
62
|
+
|
63
|
+
/\/\S+\/(?<name>[a-z_]+)\/[a-z_]+\/(?<id>\d+)/.match("uploads/class_name/uploader_name/100")
|
64
|
+
#=> #<MatchData "uploads/class_name/uploader_name/100" name:"model_class_name" id:"100">
|
65
|
+
|
63
66
|
### mount an uploader for any class containing an assets
|
64
67
|
|
65
68
|
you may use as many different classes as you would like, but each may only contain one mounted uploader
|
@@ -87,3 +90,28 @@ the attributes specified should contain fully qualified asset URLs generated by
|
|
87
90
|
attr_expiring_asset_links :summary, :body
|
88
91
|
|
89
92
|
end
|
93
|
+
|
94
|
+
## Notes
|
95
|
+
|
96
|
+
the url that is generated by CarrierWave may not immediately follow a letter or underscore in the content of the attribute specified as `attr_expiring_asset_links`, this will prevent the gem from properly parsing the data
|
97
|
+
|
98
|
+
example of proper placement (the double quote character is no a letter or an underscore)
|
99
|
+
|
100
|
+
<h2>
|
101
|
+
Section One
|
102
|
+
</h2>
|
103
|
+
<p>
|
104
|
+
This is the first section in the body of the document.
|
105
|
+
It includes an image.
|
106
|
+
</p>
|
107
|
+
<img src="https://test.s3-us-east-1.amazonaws.com/uploads/test/99/asset/file_attachment/sample.jpg">
|
108
|
+
|
109
|
+
example of improper placement (no space between 'at' and 'https')
|
110
|
+
|
111
|
+
<h2>
|
112
|
+
Section One
|
113
|
+
</h2>
|
114
|
+
<p>
|
115
|
+
This is the first section in the body of the document.
|
116
|
+
It includes an image, you may view it athttps://test.s3-us-east-1.amazonaws.com/uploads/test/99/asset/file_attachment/sample.jpg
|
117
|
+
</p>
|
data/lib/expiring_asset_links.rb
CHANGED
@@ -1,12 +1,22 @@
|
|
1
1
|
require 'active_record'
|
2
|
+
require 'expiring_asset_links/configuration'
|
2
3
|
|
3
4
|
module ExpiringAssetLinks
|
4
5
|
autoload :Version, 'expiring_asset_links/version'
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
extend ExpiringAssetLinks::Configuration
|
7
|
+
|
8
|
+
class << self
|
9
|
+
|
10
|
+
def extended(base)
|
11
|
+
base.class_eval do
|
12
|
+
@expiring_asset_link_attributes = []
|
13
|
+
include InstanceMethods
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def remove_asset_tags(value)
|
18
|
+
asset_url = Regexp::new "https://" + [/#{CarrierWave::Uploader::Base.fog_directory}\.s3\S+[amazon|amazonaws]\.com\//, self.fog_directory, /\/\S+Expires=[\d]{10}/].flatten.map{ |re| re.source }.join.gsub('\\/\\/', '\\/')
|
19
|
+
value.gsub(asset_url, '\k<name>{{\k<id>}}').gsub(/([A-Za-z_]+)\{\{(\d+)\}\}/) { "#{$1.classify}{{#{$2}}}" }
|
10
20
|
end
|
11
21
|
end
|
12
22
|
|
@@ -33,12 +43,11 @@ module ExpiringAssetLinks
|
|
33
43
|
protected
|
34
44
|
|
35
45
|
def remove_asset_tags(attribute)
|
36
|
-
self[attribute.to_sym]
|
46
|
+
ExpiringAssetLinks.remove_asset_tags(self[attribute.to_sym])
|
37
47
|
end
|
38
48
|
|
39
49
|
def add_asset_tags(attribute)
|
40
|
-
linked_attribute =
|
41
|
-
self[attribute.to_sym].gsub(/([A-Za-z]+)\{\{(\d+)\}\}/) { $1.constantize.find($2).send($1.constantize.uploaders.keys.first).url(:default) }
|
50
|
+
linked_attribute = self[attribute.to_sym].gsub(/([A-Za-z]+)\{\{(\d+)\}\}/) { $1.constantize.find($2).send($1.constantize.uploaders.keys.first).url(:default) }
|
42
51
|
end
|
43
52
|
|
44
53
|
def remove_all_asset_tags!
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ExpiringAssetLinks
|
2
|
+
module Configuration
|
3
|
+
VALID_CONFIG_KEYS = [:fog_directory].freeze
|
4
|
+
DEFAULT_FOG_DIRECTORY ||= /\S+\/(?<name>[a-z_]+)\/[a-z_]+\/(?<id>\d+)/
|
5
|
+
attr_accessor *VALID_CONFIG_KEYS
|
6
|
+
|
7
|
+
def self.extended(base)
|
8
|
+
base.reset
|
9
|
+
end
|
10
|
+
|
11
|
+
def reset
|
12
|
+
self.fog_directory = DEFAULT_FOG_DIRECTORY
|
13
|
+
end
|
14
|
+
|
15
|
+
def configure
|
16
|
+
yield self
|
17
|
+
raise TypeError, "expected fog_directory to be a Regexp" unless self.fog_directory.is_a?(Regexp)
|
18
|
+
missing_names = ["name", "id"] - self.fog_directory.names
|
19
|
+
raise RegexpError, "fog_directory must capture #{missing_names.join(' and ')}" unless missing_names.empty?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -2,8 +2,8 @@ module ExpiringAssetLinks
|
|
2
2
|
# Contains information about this gem's version
|
3
3
|
module Version
|
4
4
|
MAJOR = 1
|
5
|
-
MINOR =
|
6
|
-
PATCH =
|
5
|
+
MINOR = 3
|
6
|
+
PATCH = 1
|
7
7
|
|
8
8
|
# Returns a version string by joining <tt>MAJOR</tt>, <tt>MINOR</tt>, and <tt>PATCH</tt> with <tt>'.'</tt>
|
9
9
|
#
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require File.expand_path('../test_helper', __FILE__)
|
2
2
|
|
3
3
|
class ExpiringAssetLinksTest < Test::Unit::TestCase
|
4
|
-
|
5
4
|
def setup
|
6
5
|
CarrierWave.configure do |config|
|
7
6
|
# config.cache_dir = "#{Rails.root}/tmp/assets"
|
8
|
-
#
|
7
|
+
#
|
9
8
|
# config.root = Rails.root.join('tmp')
|
10
9
|
# config.cache_dir = "assets"
|
11
10
|
# config.fog_credentials = {
|
@@ -19,12 +18,118 @@ class ExpiringAssetLinksTest < Test::Unit::TestCase
|
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
22
|
-
def
|
23
|
-
|
21
|
+
def test_class_id_path
|
22
|
+
ExpiringAssetLinks.configure do |conf|
|
23
|
+
conf.fog_directory = /\S+\/(?<name>[a-z_]+)\/[a-z_]+\/(?<id>\d+)/
|
24
|
+
end
|
25
|
+
|
26
|
+
file_attachment = FileAttachment.create(name: "test")
|
27
|
+
file_path = "https://test.s3-us-east-1.amazonaws.com/uploads/test/file_attachment/asset/#{file_attachment.id}/sample.jpg"
|
28
|
+
file_attachment.update_attributes({asset: AssetUploader.new(file_path)})
|
29
|
+
document = Document.create(title: "This is the Document Title", body: "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment.send(FileAttachment.uploaders.keys.first).url}\">")
|
30
|
+
|
31
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"FileAttachment{{#{file_attachment.id}}}\">", Document.find(document.id).attributes["body"]
|
32
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_path}?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX%3D&Expires=2222222222\">", Document.find(document.id).body
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_id_class_path
|
36
|
+
ExpiringAssetLinks.configure do |conf|
|
37
|
+
conf.fog_directory = /\S+\/(?<id>\d+)\/[a-z_]+\/(?<name>[a-z_]+)/
|
38
|
+
end
|
39
|
+
|
40
|
+
file_attachment = FileAttachment.create(name: "test")
|
41
|
+
file_path = "https://test.s3-us-east-1.amazonaws.com/uploads/test/#{file_attachment.id}/asset/file_attachment/sample.jpg"
|
42
|
+
file_attachment.update_attributes({asset: AssetUploader.new(file_path)})
|
43
|
+
document = Document.create(title: "This is the Document Title", body: "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment.send(FileAttachment.uploaders.keys.first).url}\">")
|
44
|
+
|
45
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"FileAttachment{{#{file_attachment.id}}}\">", Document.find(document.id).attributes["body"]
|
46
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_path}?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX%3D&Expires=2222222222\">", Document.find(document.id).body
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_default_configuration
|
50
|
+
file_attachment = FileAttachment.create(name: "test")
|
51
|
+
file_path = "https://test.s3-us-east-1.amazonaws.com/uploads/test/file_attachment/asset/#{file_attachment.id}/sample.jpg"
|
52
|
+
file_attachment.update_attributes({asset: AssetUploader.new(file_path)})
|
53
|
+
document = Document.create(title: "This is the Document Title", body: "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment.send(FileAttachment.uploaders.keys.first).url}\">")
|
54
|
+
|
55
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"FileAttachment{{#{file_attachment.id}}}\">", Document.find(document.id).attributes["body"]
|
56
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_path}?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX%3D&Expires=2222222222\">", Document.find(document.id).body
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_wrong_type_fog_directory_configuration
|
60
|
+
assert_raises(TypeError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = "" } }
|
61
|
+
assert_raises(TypeError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = "test" } }
|
62
|
+
assert_raises(TypeError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = "\S+\/(?<id>\d+)\/[a-z_]+\/(?<name>[a-z_]+)" } }
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_invalid_fog_directory_configuration
|
66
|
+
assert_raises(RegexpError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = // } }
|
67
|
+
assert_raises(RegexpError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = /\S+\/(\d+)\/[a-z_]+\/([a-z_]+)/ } }
|
68
|
+
assert_raises(RegexpError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = /\S+\/(\d+)\/[a-z_]+\/(?<name>[a-z_]+)/ } }
|
69
|
+
assert_raises(RegexpError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = /\S+\/(?<id>\d+)\/[a-z_]+\/([a-z_]+)/ } }
|
70
|
+
assert_raises(RegexpError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = /\S+\/(?<ids>\d+)\/[a-z_]+\/(?<name>[a-z_]+)/ } }
|
71
|
+
assert_raises(RegexpError) { ExpiringAssetLinks.configure { |conf| conf.fog_directory = /\S+\/(?<id>\d+)\/[a-z_]+\/(?<names>[a-z_]+)/ } }
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_extra_names_fog_directory_configuration
|
75
|
+
ExpiringAssetLinks.configure do |conf|
|
76
|
+
conf.fog_directory = /\S+\/(?<id>\d+)\/(?<mount>[a-z_]+)\/(?<name>[a-z_]+)/
|
77
|
+
end
|
78
|
+
|
79
|
+
file_attachment = FileAttachment.create(name: "test")
|
80
|
+
file_path = "https://test.s3-us-east-1.amazonaws.com/uploads/test/#{file_attachment.id}/asset/file_attachment/sample.jpg"
|
81
|
+
file_attachment.update_attributes({asset: AssetUploader.new(file_path)})
|
82
|
+
document = Document.create(title: "This is the Document Title", body: "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment.send(FileAttachment.uploaders.keys.first).url}\">")
|
83
|
+
|
84
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"FileAttachment{{#{file_attachment.id}}}\">", Document.find(document.id).attributes["body"]
|
85
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_path}?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX%3D&Expires=2222222222\">", Document.find(document.id).body
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_non_matching_fog_directory_configuration
|
89
|
+
# there is essentially no way of knowing that a non-matching URL string should have matched the Regexp,
|
90
|
+
# no validation of any type is performed when adding or removing asset links
|
91
|
+
ExpiringAssetLinks.configure do |conf|
|
92
|
+
conf.fog_directory = /\S+\/(?<id>\d+)\/[a-z_]+\/(?<name>[a-z_]+)\/error/
|
93
|
+
end
|
94
|
+
|
95
|
+
file_attachment = FileAttachment.create(name: "test")
|
96
|
+
file_path = "https://test.s3-us-east-1.amazonaws.com/uploads/test/#{file_attachment.id}/asset/file_attachment/sample.jpg"
|
97
|
+
file_attachment.update_attributes({asset: AssetUploader.new(file_path)})
|
98
|
+
document = Document.create(title: "This is the Document Title", body: "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment.send(FileAttachment.uploaders.keys.first).url}\">")
|
99
|
+
|
100
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment.send(FileAttachment.uploaders.keys.first).url}\">", Document.find(document.id).attributes["body"]
|
101
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment.send(FileAttachment.uploaders.keys.first).url}\">", Document.find(document.id).body
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_multiple_assets
|
105
|
+
ExpiringAssetLinks.configure do |conf|
|
106
|
+
conf.fog_directory = /\S+\/(?<id>\d+)\/[a-z_]+\/(?<name>[a-z_]+)/
|
107
|
+
end
|
108
|
+
|
109
|
+
file_attachment_a = FileAttachment.create(name: "test")
|
110
|
+
file_path_a = "https://test.s3-us-east-1.amazonaws.com/uploads/test/#{file_attachment_a.id}/asset/file_attachment/sample.jpg"
|
111
|
+
file_attachment_a.update_attributes({asset: AssetUploader.new(file_path_a)})
|
112
|
+
file_attachment_b = FileAttachment.create(name: "test")
|
113
|
+
file_path_b = "https://test.s3-us-east-1.amazonaws.com/uploads/test/#{file_attachment_b.id}/asset/file_attachment/sample.jpg"
|
114
|
+
file_attachment_b.update_attributes({asset: AssetUploader.new(file_path_b)})
|
115
|
+
document = Document.create(title: "This is the Document Title", body: "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment_a.send(FileAttachment.uploaders.keys.first).url}\"><p>And another image.</p><img src=\"#{file_attachment_b.send(FileAttachment.uploaders.keys.first).url}\">")
|
116
|
+
|
117
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"FileAttachment{{#{file_attachment_a.id}}}\"><p>And another image.</p><img src=\"FileAttachment{{#{file_attachment_b.id}}}\">", Document.find(document.id).attributes["body"]
|
118
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_path_a}?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX%3D&Expires=2222222222\"><p>And another image.</p><img src=\"#{file_path_b}?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX%3D&Expires=2222222222\">", Document.find(document.id).body
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_with_leading_forward_slash_path
|
122
|
+
ExpiringAssetLinks.configure do |conf|
|
123
|
+
conf.fog_directory = /\/\S+\/(?<name>[a-z_]+)\/[a-z_]+\/(?<id>\d+)/
|
124
|
+
end
|
125
|
+
|
126
|
+
file_attachment = FileAttachment.create(name: "test")
|
127
|
+
file_path = "https://test.s3-us-east-1.amazonaws.com/uploads/test/file_attachment/asset/#{file_attachment.id}/sample.jpg"
|
128
|
+
file_attachment.update_attributes({asset: AssetUploader.new(file_path)})
|
24
129
|
document = Document.create(title: "This is the Document Title", body: "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_attachment.send(FileAttachment.uploaders.keys.first).url}\">")
|
25
130
|
|
26
|
-
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"FileAttachment{{
|
27
|
-
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"
|
131
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"FileAttachment{{#{file_attachment.id}}}\">", Document.find(document.id).attributes["body"]
|
132
|
+
assert_equal "<h2>Section One</h2><p>This is the first section in the body of the document. It includes an image.</p><img src=\"#{file_path}?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX%3D&Expires=2222222222\">", Document.find(document.id).body
|
28
133
|
end
|
29
134
|
|
30
135
|
end
|
data/test/test_helper.rb
CHANGED
@@ -12,19 +12,16 @@ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":me
|
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(:version => 1) do
|
14
14
|
create_table :documents do |t|
|
15
|
-
t.integer :id
|
16
15
|
t.string :title
|
17
16
|
t.text :body
|
18
17
|
end
|
19
18
|
create_table :file_attachments do |t|
|
20
|
-
t.
|
21
|
-
t.
|
22
|
-
t.binary :asset
|
19
|
+
t.string :name
|
20
|
+
t.binary :asset
|
23
21
|
end
|
24
22
|
create_table :image_attachments do |t|
|
25
|
-
t.
|
26
|
-
t.
|
27
|
-
t.binary :asset
|
23
|
+
t.string :name
|
24
|
+
t.binary :asset
|
28
25
|
end
|
29
26
|
end
|
30
27
|
|
@@ -60,5 +57,3 @@ class AssetUploader < Struct.new(:my_url)
|
|
60
57
|
"#{self.my_url}?AWSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX%3D&Expires=2222222222"
|
61
58
|
end
|
62
59
|
end
|
63
|
-
|
64
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expiring_asset_links
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: carrierwave
|
@@ -88,6 +88,7 @@ files:
|
|
88
88
|
- Rakefile
|
89
89
|
- expiring_asset_links.gemspec
|
90
90
|
- lib/expiring_asset_links.rb
|
91
|
+
- lib/expiring_asset_links/configuration.rb
|
91
92
|
- lib/expiring_asset_links/version.rb
|
92
93
|
- test/expiring_asset_links_test.rb
|
93
94
|
- test/test_helper.rb
|