sprockets_cdn 0.1.0
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 +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +50 -0
- data/lib/sprockets_cdn/adapters/base.rb +33 -0
- data/lib/sprockets_cdn/adapters/qiniu.rb +50 -0
- data/lib/sprockets_cdn/adapters/upyun.rb +59 -0
- data/lib/sprockets_cdn/assets_upload.rb +22 -0
- data/lib/sprockets_cdn/configuration.rb +12 -0
- data/lib/sprockets_cdn/manifest_ext.rb +12 -0
- data/lib/sprockets_cdn/version.rb +3 -0
- data/lib/sprockets_cdn.rb +15 -0
- metadata +348 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d3cd18569d6cbdc48a6423aaf8e0cb7e1f1daa5a
|
4
|
+
data.tar.gz: 811aa641e2b97f5bb0950478b56fe8fa49f45378
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c9c3aca72c0eafeb3c28fd72a975e4eea1d96222253f31c40b6a4ded009c8fa85d25b2da5a96e35e8392c875a04b43496ff0da86edbffbf0d0cea5193371278d
|
7
|
+
data.tar.gz: ca536c7e80ea3fa390d3f76a18656a190fa2042a9ba393d44261c52800b0c9e228e66f1092f3535f0e9ccbfb65f48653e48c73811690816de452a58eaad02559
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 arnkorty
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# SprocketsCdn
|
2
|
+
|
3
|
+
** A Sprockets CDN extendsion gem, upload assets to upyun/qiniu. **
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'sprockets_cdn'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install sprockets_cdn
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
```ruby
|
23
|
+
# config/initializes/sprockets_cdn.rb
|
24
|
+
SprocketsCDN.config do |config|
|
25
|
+
config.bucket = "bucket name"
|
26
|
+
config.asset_host = "asset host"
|
27
|
+
## for qiniu
|
28
|
+
config.adapter = 'qiniu'
|
29
|
+
config.access_key = "xxxx"
|
30
|
+
config.secret_key = "xxxx"
|
31
|
+
## for upyun
|
32
|
+
config.adapter = 'upyun'
|
33
|
+
config.access_key = "as username"
|
34
|
+
config.secret_key = "as password"
|
35
|
+
end
|
36
|
+
```
|
37
|
+
then
|
38
|
+
```bash
|
39
|
+
## run compile assets,it will upload to cdn after compile
|
40
|
+
RAILS_ENV=production bundle exec rake assets:precompile
|
41
|
+
```
|
42
|
+
|
43
|
+
## Contributing
|
44
|
+
|
45
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/arnkorty/sprockets_cdn. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
|
46
|
+
|
47
|
+
|
48
|
+
## License
|
49
|
+
|
50
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'base64'
|
3
|
+
module SprocketsCDN
|
4
|
+
module Adapters
|
5
|
+
class Base
|
6
|
+
attr_accessor :access_key, :secret_key
|
7
|
+
def initialize opt
|
8
|
+
@access_key = opt[:access_key]
|
9
|
+
@secret_key = opt[:secret_key]
|
10
|
+
@asset_host = opt[:asset_host]
|
11
|
+
@bucket = opt[:bucket]
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_key full_path, base_dir
|
15
|
+
if defined? Rails
|
16
|
+
asset_root = Rails.root.join('public').to_s
|
17
|
+
asset_root = base_dir unless base_dir.include?(asset_root)
|
18
|
+
full_path.sub(asset_root, '')
|
19
|
+
else
|
20
|
+
full_path.sub(base_dir, '')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def urlsafe_base64_encode content
|
25
|
+
Base64.encode64(content).strip.gsub('+', '-').gsub('/','_').gsub(/\r?\n/, '')
|
26
|
+
end
|
27
|
+
|
28
|
+
def generate_remote_url path
|
29
|
+
URI.join(@asset_host, path)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'hmac-sha1'
|
3
|
+
require 'restclient'
|
4
|
+
require 'base64'
|
5
|
+
require 'json'
|
6
|
+
require 'sprockets_cdn/adapters/base'
|
7
|
+
module SprocketsCDN
|
8
|
+
module Adapters
|
9
|
+
class Qiniu < Base
|
10
|
+
|
11
|
+
def uploading file, opt
|
12
|
+
put_policy = generate_put_policy file, opt
|
13
|
+
uptoken = uptoken(put_policy)
|
14
|
+
post_data = {
|
15
|
+
file: File.new(file, 'rb'),
|
16
|
+
multipart: true,
|
17
|
+
key: put_policy[:saveKey],
|
18
|
+
token: uptoken
|
19
|
+
}
|
20
|
+
|
21
|
+
res = RestClient.post "http://up.qiniu.com/", post_data
|
22
|
+
target = JSON.parse(res)['key']
|
23
|
+
# URI.join(@asset_host, target).to_s
|
24
|
+
generate_remote_url target
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_put_policy file, opt
|
28
|
+
opt[:saveKey] = get_key file, opt[:dir] #file.sub(opt[:dir].to_s, '')
|
29
|
+
opt[:scope] = @bucket
|
30
|
+
opt[:deadline] = Time.now.to_i + 3600
|
31
|
+
opt
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_key file, dir
|
35
|
+
path = super file, dir
|
36
|
+
path = path[1..-1] if path =~ /^\//
|
37
|
+
path
|
38
|
+
end
|
39
|
+
|
40
|
+
def uptoken put_policy
|
41
|
+
encoded_put_policy = urlsafe_base64_encode put_policy.to_json
|
42
|
+
|
43
|
+
sign = HMAC::SHA1.new(@secret_key).update(encoded_put_policy).digest
|
44
|
+
encoded_sign = urlsafe_base64_encode sign
|
45
|
+
|
46
|
+
uptoken = "#{@access_key}:#{encoded_sign}:#{encoded_put_policy}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'restclient'
|
3
|
+
require 'digest/md5'
|
4
|
+
require 'sprockets_cdn/adapters/base'
|
5
|
+
module SprocketsCDN
|
6
|
+
module Adapters
|
7
|
+
class Upyun < Base
|
8
|
+
attr_accessor :username, :password
|
9
|
+
def initialize opt
|
10
|
+
super
|
11
|
+
@username = opt[:username] || @access_key
|
12
|
+
@password = md5(opt[:password] || @secret_key)
|
13
|
+
end
|
14
|
+
|
15
|
+
def uploading file, opt
|
16
|
+
headers = {mkdir: true}
|
17
|
+
|
18
|
+
key = get_key file, opt[:dir]
|
19
|
+
body = File.new(file, 'rb')
|
20
|
+
post_data = {
|
21
|
+
body: body
|
22
|
+
}
|
23
|
+
date = Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')
|
24
|
+
|
25
|
+
sign = sign(:put, date, fullpath(key), body.size)
|
26
|
+
headers[:Date] = date
|
27
|
+
headers[:Authorization] = sign
|
28
|
+
res = RestClient.put post_url(key), body, headers
|
29
|
+
if res.code == 200
|
30
|
+
URI.join(@asset_host, key).to_s
|
31
|
+
end
|
32
|
+
# target = JSON.parse(res)['key']
|
33
|
+
# URI.join(@asset_host, target).to_s
|
34
|
+
generate_remote_url key
|
35
|
+
end
|
36
|
+
|
37
|
+
def post_url key
|
38
|
+
"http://v0.api.upyun.com/#{@bucket}/" + key #).to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
def base_url
|
42
|
+
"http://v0.api.upyun.com"
|
43
|
+
end
|
44
|
+
|
45
|
+
def fullpath key
|
46
|
+
File.join("/#{@bucket}", key).to_s
|
47
|
+
end
|
48
|
+
|
49
|
+
def md5 content
|
50
|
+
Digest::MD5.hexdigest content
|
51
|
+
end
|
52
|
+
|
53
|
+
def sign(method, date, path, length)
|
54
|
+
sign = "#{method.to_s.upcase}&#{path}&#{date}&#{length}&#{@password}"
|
55
|
+
"UpYun #{@username}:#{md5(sign)}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'sprockets_cdn/configuration'
|
2
|
+
require "active_support/core_ext/string/inflections"
|
3
|
+
module SprocketsCDN
|
4
|
+
class AssetsUpload
|
5
|
+
class << self
|
6
|
+
def setup assets, dir, logger
|
7
|
+
return unless SprocketsCDN::Configuration.checked?
|
8
|
+
require "sprockets_cdn/adapters/#{SprocketsCDN::Configuration.config.adapter}"
|
9
|
+
kclass = SprocketsCDN::Adapters.const_get SprocketsCDN::Configuration.config.adapter.classify
|
10
|
+
client = kclass.new SprocketsCDN::Configuration.config
|
11
|
+
remote_data = {}
|
12
|
+
assets.each do |key, asset|
|
13
|
+
target = File.join(dir, asset)
|
14
|
+
remote_target = client.uploading target, dir: dir
|
15
|
+
logger.info "Uploaded to #{remote_target}"
|
16
|
+
remote_data[key] = remote_target
|
17
|
+
end
|
18
|
+
remote_data
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'active_support/configurable'
|
2
|
+
module SprocketsCDN
|
3
|
+
class Configuration < ::ActiveSupport::Configurable::Configuration
|
4
|
+
# attr_accessor :adapter, :bucket, :access_key, :secret_key, :asset_host
|
5
|
+
def self.checked?
|
6
|
+
config.adapter && config.bucket && config.access_key && config.secret_key && config.asset_host
|
7
|
+
end
|
8
|
+
def self.config
|
9
|
+
@@config ||= ActiveSupport::Configurable::Configuration.new
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'sprockets/manifest'
|
2
|
+
require 'sprockets_cdn/assets_upload'
|
3
|
+
Sprockets::Manifest.class_eval do
|
4
|
+
attr_accessor :remote_data
|
5
|
+
def compile_with_cdn(*args)
|
6
|
+
old_result = compile_without_cdn *args
|
7
|
+
@remote_data = SprocketsCDN::AssetsUpload.setup assets, dir, logger
|
8
|
+
old_result
|
9
|
+
end
|
10
|
+
alias_method :compile_without_cdn, :compile
|
11
|
+
alias_method :compile, :compile_with_cdn
|
12
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "sprockets_cdn/version"
|
2
|
+
require "sprockets_cdn/manifest_ext"
|
3
|
+
require "sprockets_cdn/configuration"
|
4
|
+
module SprocketsCDN
|
5
|
+
def self.config &block
|
6
|
+
yield SprocketsCDN::Configuration.config
|
7
|
+
if defined? Rails
|
8
|
+
ActionController::Base.asset_host =
|
9
|
+
Rails.application.config.action_controller.asset_host ||=
|
10
|
+
SprocketsCDN::Configuration.config.asset_host
|
11
|
+
end
|
12
|
+
raise "config isn't setting" unless SprocketsCDN::Configuration.checked?
|
13
|
+
end
|
14
|
+
# Your code goes here...
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,348 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sprockets_cdn
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- arnkorty
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sprockets
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ruby-hmac
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: activesupport
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.10'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.10'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '10.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '10.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: babel-transpiler
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.6'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.6'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: closure-compiler
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.1'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.1'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: coffee-script-source
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '1.6'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '1.6'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: coffee-script
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '2.2'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '2.2'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: eco
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '1.0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '1.0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: ejs
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '1.0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '1.0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: execjs
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '2.0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '2.0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: minitest
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "~>"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '5.0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - "~>"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '5.0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: nokogiri
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '1.3'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - "~>"
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '1.3'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: rack-test
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0.6'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "~>"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0.6'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: sass
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - "~>"
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '3.1'
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - "~>"
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '3.1'
|
265
|
+
- !ruby/object:Gem::Dependency
|
266
|
+
name: uglifier
|
267
|
+
requirement: !ruby/object:Gem::Requirement
|
268
|
+
requirements:
|
269
|
+
- - "~>"
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
version: '2.3'
|
272
|
+
type: :development
|
273
|
+
prerelease: false
|
274
|
+
version_requirements: !ruby/object:Gem::Requirement
|
275
|
+
requirements:
|
276
|
+
- - "~>"
|
277
|
+
- !ruby/object:Gem::Version
|
278
|
+
version: '2.3'
|
279
|
+
- !ruby/object:Gem::Dependency
|
280
|
+
name: yui-compressor
|
281
|
+
requirement: !ruby/object:Gem::Requirement
|
282
|
+
requirements:
|
283
|
+
- - "~>"
|
284
|
+
- !ruby/object:Gem::Version
|
285
|
+
version: '0.12'
|
286
|
+
type: :development
|
287
|
+
prerelease: false
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
289
|
+
requirements:
|
290
|
+
- - "~>"
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: '0.12'
|
293
|
+
- !ruby/object:Gem::Dependency
|
294
|
+
name: pry
|
295
|
+
requirement: !ruby/object:Gem::Requirement
|
296
|
+
requirements:
|
297
|
+
- - ">="
|
298
|
+
- !ruby/object:Gem::Version
|
299
|
+
version: '0'
|
300
|
+
type: :development
|
301
|
+
prerelease: false
|
302
|
+
version_requirements: !ruby/object:Gem::Requirement
|
303
|
+
requirements:
|
304
|
+
- - ">="
|
305
|
+
- !ruby/object:Gem::Version
|
306
|
+
version: '0'
|
307
|
+
description: a cdn assets for sprockets, upload assets to upyun/qiniu
|
308
|
+
email:
|
309
|
+
- arnkorty.fu@gmail.com
|
310
|
+
executables: []
|
311
|
+
extensions: []
|
312
|
+
extra_rdoc_files: []
|
313
|
+
files:
|
314
|
+
- LICENSE.txt
|
315
|
+
- README.md
|
316
|
+
- lib/sprockets_cdn.rb
|
317
|
+
- lib/sprockets_cdn/adapters/base.rb
|
318
|
+
- lib/sprockets_cdn/adapters/qiniu.rb
|
319
|
+
- lib/sprockets_cdn/adapters/upyun.rb
|
320
|
+
- lib/sprockets_cdn/assets_upload.rb
|
321
|
+
- lib/sprockets_cdn/configuration.rb
|
322
|
+
- lib/sprockets_cdn/manifest_ext.rb
|
323
|
+
- lib/sprockets_cdn/version.rb
|
324
|
+
homepage: https://github.com/arnkorty/sprockets_cdn
|
325
|
+
licenses:
|
326
|
+
- MIT
|
327
|
+
metadata: {}
|
328
|
+
post_install_message:
|
329
|
+
rdoc_options: []
|
330
|
+
require_paths:
|
331
|
+
- lib
|
332
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
333
|
+
requirements:
|
334
|
+
- - ">="
|
335
|
+
- !ruby/object:Gem::Version
|
336
|
+
version: '0'
|
337
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
338
|
+
requirements:
|
339
|
+
- - ">="
|
340
|
+
- !ruby/object:Gem::Version
|
341
|
+
version: '0'
|
342
|
+
requirements: []
|
343
|
+
rubyforge_project:
|
344
|
+
rubygems_version: 2.4.8
|
345
|
+
signing_key:
|
346
|
+
specification_version: 4
|
347
|
+
summary: a cdn assets for sprockets
|
348
|
+
test_files: []
|