bankrupt 2.0.1 → 2.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 +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +1 -0
- data/CHANGELOG.md +9 -0
- data/README.md +20 -2
- data/lib/bankrupt.rb +23 -6
- data/lib/bankrupt/tasks.rb +31 -9
- data/lib/bankrupt/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b25ac977ea77fe68e18e583a9d6bab35e234c99684a07b49afd9d74e58292d7
|
4
|
+
data.tar.gz: ec15d4467fc340e988992495526dd6f006964d4a8359928bd894598b41913c9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2ab7eaaf4e1d6fb2fc51d885ad3858ee6a432eb784f908fd9bc90c832ffe2fc48a1af0b628354edf4953aea0c34765797e73f56e67d5325b96f903ec51a34d9
|
7
|
+
data.tar.gz: 9c18b7c507883b9f3ce121339f6b951f51ddfaf32f7b24ef014fbe03ac5a242fdfb3a6e560ce0f8748ee43824bbfa69f753556e330d3fadc7d9654eed8c1bcfd
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,15 @@
|
|
3
3
|
This file keeps track of changes between releases for the bankrupt project
|
4
4
|
which adheres to [semantic versioning](https://semver.org).
|
5
5
|
|
6
|
+
## v2.1.0 2020-01-06
|
7
|
+
|
8
|
+
Add support for unversioned ("hashless") assets.
|
9
|
+
|
10
|
+
* Add new configuration file and `hashless` option (file glob array) to upload
|
11
|
+
files to the CDN without their md5 hash appended.
|
12
|
+
* Add new `raw` helper to just return the full URL of an asset.
|
13
|
+
* Add upload support for PDF files.
|
14
|
+
|
6
15
|
## v2.0.1 2019-07-30
|
7
16
|
|
8
17
|
Add support for uploading font files (`eot`, `ttf`, `woff`, and `woff2`) to
|
data/README.md
CHANGED
@@ -62,7 +62,14 @@ For images you can optionally pass a hash of options to apply additional
|
|
62
62
|
attributes to the image:
|
63
63
|
|
64
64
|
```slim
|
65
|
-
== image(img.jpg, alt: 'img')
|
65
|
+
== image('img.jpg', alt: 'img')
|
66
|
+
```
|
67
|
+
|
68
|
+
To get the full path of an asset:
|
69
|
+
|
70
|
+
```slim
|
71
|
+
a href=raw('file.pdf')
|
72
|
+
| Click me!
|
66
73
|
```
|
67
74
|
|
68
75
|
### Rake
|
@@ -107,6 +114,17 @@ task default: if ENV['CLOUDBUILD'].to_s.casecmp?('true')
|
|
107
114
|
end
|
108
115
|
```
|
109
116
|
|
117
|
+
Note that it's possible to upload some files to the CDN _without_ their hash
|
118
|
+
appended. Create a `.bankrupt.yml` file in the root of your project and provide
|
119
|
+
an array of file globs to store "hashless":
|
120
|
+
|
121
|
+
```yaml
|
122
|
+
---
|
123
|
+
hashless:
|
124
|
+
- "*.pdf"
|
125
|
+
- "image.png"
|
126
|
+
```
|
127
|
+
|
110
128
|
### Rspec
|
111
129
|
|
112
130
|
If you're testing your app with rspec or similar you need to stub the `CDN` and
|
@@ -138,7 +156,7 @@ end
|
|
138
156
|
## License
|
139
157
|
|
140
158
|
```
|
141
|
-
Copyright 2018 Mario Finelli
|
159
|
+
Copyright 2018-2020 Mario Finelli
|
142
160
|
|
143
161
|
Licensed under the Apache License, Version 2.0 (the "License");
|
144
162
|
you may not use this file except in compliance with the License.
|
data/lib/bankrupt.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright 2018-
|
3
|
+
# Copyright 2018-2020 Mario Finelli
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -79,6 +79,17 @@ module Bankrupt
|
|
79
79
|
asset_html(path, STYLESHEET_CDN, STYLESHEET_LOCAL)
|
80
80
|
end
|
81
81
|
|
82
|
+
# Get the full path to the asset for use in e.g. a tags.
|
83
|
+
#
|
84
|
+
# @param path [String] relative (from public) path to the asset
|
85
|
+
# @return [String] full path to the asset
|
86
|
+
def raw(path)
|
87
|
+
details = ASSETS.fetch(path)
|
88
|
+
create_fullpath(path, details[:md5], details[:hashless])
|
89
|
+
rescue KeyError
|
90
|
+
"/#{path}"
|
91
|
+
end
|
92
|
+
|
82
93
|
private
|
83
94
|
|
84
95
|
# Return a precomputed asset path if it exists
|
@@ -95,19 +106,25 @@ module Bankrupt
|
|
95
106
|
#
|
96
107
|
# @param file [String] basename of the asset
|
97
108
|
# @param digest [String] md5 hash of the asset
|
98
|
-
# @
|
99
|
-
|
109
|
+
# @param hashless [Boolean] if the file doesn't have the hash appended
|
110
|
+
# @return [String] filename with digest e.g, style-123.css (style.css if
|
111
|
+
# hashless)
|
112
|
+
def append_md5(file, digest, hashless = false)
|
113
|
+
return file if hashless
|
114
|
+
|
100
115
|
[[file.split(ex = File.extname(file)).first, digest].join('-'), ex].join
|
101
116
|
end
|
102
117
|
|
103
118
|
# Generates the full path to the asset including CDN domain, if set.
|
104
119
|
#
|
105
120
|
# @param path [String] local path to the asset
|
121
|
+
# @param md5 [String] md5 hash of the asset
|
122
|
+
# @param hashless [Boolean] if the files doesn't have the hash appended
|
106
123
|
# @return [String] new, full path to the asset
|
107
|
-
def create_fullpath(path, md5)
|
124
|
+
def create_fullpath(path, md5, hashless = false)
|
108
125
|
return "/#{path}" if CDN.empty?
|
109
126
|
|
110
|
-
[CDN, append_md5(path, md5)].join('/')
|
127
|
+
[CDN, append_md5(path, md5, hashless)].join('/')
|
111
128
|
end
|
112
129
|
|
113
130
|
# Generate the asset HTML. If the asset exists in the lookup hash then
|
@@ -125,7 +142,7 @@ module Bankrupt
|
|
125
142
|
begin
|
126
143
|
details = ASSETS.fetch(path)
|
127
144
|
|
128
|
-
fullpath = create_fullpath(path, details[:md5])
|
145
|
+
fullpath = create_fullpath(path, details[:md5], details[:hashless])
|
129
146
|
|
130
147
|
@_assets["/#{path}"] = Slim::Template.new { cdn }.render(
|
131
148
|
ASSET.new(fullpath, details[:sri])
|
data/lib/bankrupt/tasks.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright 2018-
|
3
|
+
# Copyright 2018-2020 Mario Finelli
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -21,6 +21,7 @@ require 'fileutils'
|
|
21
21
|
require 'json'
|
22
22
|
require 'mini_mime'
|
23
23
|
require 'rake'
|
24
|
+
require 'yaml'
|
24
25
|
|
25
26
|
namespace :bankrupt do
|
26
27
|
desc 'Upload files specified in the manifest to s3/cloudfront'
|
@@ -31,12 +32,16 @@ namespace :bankrupt do
|
|
31
32
|
symbolize_names: true).each do |_key, asset|
|
32
33
|
r = s3.put_object(
|
33
34
|
bucket: CDN_BUCKET,
|
34
|
-
key:
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
key: if asset[:hashless]
|
36
|
+
File.join(CDN_PREFIX, asset[:filename])
|
37
|
+
else
|
38
|
+
File.join(CDN_PREFIX,
|
39
|
+
[[
|
40
|
+
asset[:filename].split(
|
41
|
+
ex = File.extname(asset[:filename])
|
42
|
+
).first, asset[:md5]
|
43
|
+
].join('-'), ex].join)
|
44
|
+
end,
|
40
45
|
body: File.read(f = File.join(APP_ROOT, 'public', asset[:filename])),
|
41
46
|
acl: 'private',
|
42
47
|
# content_md5: Base64.strict_encode64(asset[:md5]),
|
@@ -90,9 +95,16 @@ namespace :bankrupt do
|
|
90
95
|
desc 'Generate an asset manifest file with sums and hashes'
|
91
96
|
task :manifest do
|
92
97
|
manifest = {}
|
93
|
-
file_glob = '*.{css,jpg,js,png,svg,eot,ttf,woff,woff2}'
|
98
|
+
file_glob = '*.{css,jpg,js,pdf,png,svg,eot,ttf,woff,woff2}'
|
94
99
|
|
95
|
-
|
100
|
+
config = begin
|
101
|
+
YAML.safe_load(File.read(File.join(APP_ROOT, '.bankrupt.yml')),
|
102
|
+
[], [], true, symbolize_names: true)
|
103
|
+
rescue Errno::ENOENT
|
104
|
+
{}
|
105
|
+
end
|
106
|
+
|
107
|
+
Dir.glob(File.join(APP_ROOT, 'public', file_glob)).sort.each do |file|
|
96
108
|
md5 = Digest::MD5.file(file).to_s
|
97
109
|
basename = File.basename(file)
|
98
110
|
|
@@ -112,6 +124,16 @@ namespace :bankrupt do
|
|
112
124
|
babble: Digest::MD5.file(file).bubblebabble,
|
113
125
|
sri: 'sha384-' + Digest::SHA384.file(file).base64digest.to_s
|
114
126
|
}
|
127
|
+
|
128
|
+
Array(config[:hashless]).each do |match|
|
129
|
+
# skip unless the file is in a "hashless" glob
|
130
|
+
next unless Dir.glob(File.join(APP_ROOT, 'public', match)).map do |f|
|
131
|
+
File.basename(f)
|
132
|
+
end.include?(basename)
|
133
|
+
|
134
|
+
manifest[basename][:hashless] = true
|
135
|
+
break
|
136
|
+
end
|
115
137
|
end
|
116
138
|
|
117
139
|
LOG.info "Generated asset manifest with #{manifest.keys.size} entries"
|
data/lib/bankrupt/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright 2018-
|
3
|
+
# Copyright 2018-2020 Mario Finelli
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -15,5 +15,5 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
module Bankrupt
|
18
|
-
VERSION = '2.0
|
18
|
+
VERSION = '2.1.0'
|
19
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bankrupt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mario Finelli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slim
|