jekyll-brotli 1.0.0 → 2.0.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/.gitignore +0 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +18 -1
- data/README.md +5 -1
- data/lib/jekyll/brotli.rb +26 -5
- data/lib/jekyll/brotli/compressor.rb +68 -25
- data/lib/jekyll/brotli/config.rb +20 -0
- data/lib/jekyll/brotli/version.rb +3 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e258a9af9ac7724c0d5f8c94b7a887a8c00c034500932c5c70e59b48e9335198
|
4
|
+
data.tar.gz: 7e79bf93c991886027600ffa5aa7160ce26298b01c0c2d5d6cf3efaf04182b17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b25959e083aafbe1495a362d56f6e284a189ca9817b2bc0476b3eec7cdae339ba9b59407a4342e5f431d6cf5fe24e99a8783d79a9782b2dfb3ec25cdcbb71644
|
7
|
+
data.tar.gz: ae0ae4eb22939055d3cfd7db6c1e9b5f04b32c75b709d60fdf0c90a795407a46f924c735c5e192bcf5c8da27718a960e0687b0e955a51c8b43219dc14cfc6910
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,23 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## 1.0
|
3
|
+
## Ongoing [☰](https://github.com/philnash/jekyll-brotli/compare/v1.1.0...master)
|
4
|
+
|
5
|
+
...
|
6
|
+
|
7
|
+
## 2.0.0 (2018-11-24) [☰](https://github.com/philnash/jekyll-brotli/compare/v1.0.0...v2.0.0)
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
* Adds frozen string literal comments
|
12
|
+
* Tries to hook into Jekyll::Assets if available
|
13
|
+
|
14
|
+
### Changed
|
15
|
+
|
16
|
+
* Uses built in `Jekyll.env` instead of `ENV["JEKYLL_ENV"]`
|
17
|
+
* Changes `Jekyll::Brotli::Compressor` to a module and implements a `compress_directory` method
|
18
|
+
* Moves Jekyll::Brotli::COMPRESSABLE_EXTENSIONS into plugin config that can overwritten in the site config
|
19
|
+
|
20
|
+
## 1.0.0 (2018-01-03) [☰](https://github.com/philnash/jekyll-brotli/commits/v1.0.0)
|
4
21
|
|
5
22
|
### Added
|
6
23
|
|
data/README.md
CHANGED
@@ -2,7 +2,11 @@
|
|
2
2
|
|
3
3
|
Generate compressed assets and files for your Jekyll site at build time using [Brotli](https://github.com/google/brotli) compression.
|
4
4
|
|
5
|
-
[](https://travis-ci.org/philnash/jekyll-brotli)
|
5
|
+
[](https://rubygems.org/gems/jekyll-brotli) [](https://travis-ci.org/philnash/jekyll-brotli) [](https://codeclimate.com/github/philnash/jekyll-brotli/maintainability) [](https://inch-ci.org/github/philnash/jekyll-brotli)
|
6
|
+
|
7
|
+
[API docs](http://www.rubydoc.info/gems/jekyll-brotli/) | [GitHub repo](https://github.com/philnash/jekyll-brotli)
|
8
|
+
|
9
|
+
## Why?
|
6
10
|
|
7
11
|
Performance in web applications is important. You know that, which is why you have created a static site using Jekyll. But you want a bit more performance. You're serving your assets and files gzipped, but could it be better?
|
8
12
|
|
data/lib/jekyll/brotli.rb
CHANGED
@@ -1,13 +1,34 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'jekyll/brotli/version'
|
4
|
+
require 'jekyll/brotli/config'
|
5
|
+
require 'jekyll/brotli/compressor'
|
6
|
+
require 'pathname'
|
3
7
|
|
4
8
|
module Jekyll
|
5
9
|
module Brotli
|
6
10
|
end
|
7
11
|
end
|
8
12
|
|
13
|
+
Jekyll::Hooks.register :site, :after_init do |site|
|
14
|
+
config = site.config['brotli'] || {}
|
15
|
+
site.config['brotli'] = Jekyll::Brotli::DEFAULT_CONFIG.merge(config) || {}
|
16
|
+
end
|
17
|
+
|
9
18
|
Jekyll::Hooks.register :site, :post_write do |site|
|
10
|
-
if
|
11
|
-
|
19
|
+
Jekyll::Brotli::Compressor.compress_site(site) if Jekyll.env == 'production'
|
20
|
+
end
|
21
|
+
|
22
|
+
begin
|
23
|
+
require 'jekyll-assets'
|
24
|
+
|
25
|
+
Jekyll::Assets::Hook.register :env, :after_write do |env|
|
26
|
+
if Jekyll.env == 'production'
|
27
|
+
path = Pathname.new("#{env.jekyll.config['destination']}#{env.prefix_url}")
|
28
|
+
Jekyll::Brotli::Compressor.compress_directory(path, env.jekyll)
|
29
|
+
end
|
12
30
|
end
|
13
|
-
|
31
|
+
rescue LoadError
|
32
|
+
# The Jekyll site doesn't use Jekyll::Assets, so no need to compress those
|
33
|
+
# files.
|
34
|
+
end
|
@@ -1,29 +1,72 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'jekyll/brotli/config'
|
4
|
+
require 'brotli'
|
2
5
|
|
3
6
|
module Jekyll
|
7
|
+
##
|
8
|
+
# The main namespace for +Jekyll::Brotli+. Includes the +Compressor+ module
|
9
|
+
# which is used to map over files, either using an instance of +Jekyll::Site+
|
10
|
+
# or a directory path, and compress them using Brotli.
|
4
11
|
module Brotli
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
##
|
13
|
+
# The module that does the compressing using Brotli.
|
14
|
+
module Compressor
|
15
|
+
##
|
16
|
+
# Takes an instance of +Jekyll::Site+ and maps over the site files,
|
17
|
+
# compressing them in the destination directory.
|
18
|
+
# @example
|
19
|
+
# site = Jekyll::Site.new(site_config)
|
20
|
+
# Jekyll::Brotli::Compressor.compress_site(site)
|
21
|
+
#
|
22
|
+
# @param site [Jekyll::Site] A Jekyll::Site object that has generated its
|
23
|
+
# site files ready for compression.
|
24
|
+
#
|
25
|
+
# @return void
|
26
|
+
def self.compress_site(site)
|
27
|
+
site.each_site_file do |file|
|
28
|
+
compress_file(
|
29
|
+
file.destination(site.dest),
|
30
|
+
compressable_extensions(site)
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
20
34
|
|
21
|
-
|
22
|
-
|
35
|
+
##
|
36
|
+
# Takes a directory path and maps over the files within compressing them
|
37
|
+
# in place.
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
# Jekyll::Brotli::Compressor.compress_directory("~/blog/_site", site)
|
41
|
+
#
|
42
|
+
# @param dir [Pathname, String] The path to a directory of files ready for
|
43
|
+
# compression.
|
44
|
+
# @param site [Jekyll::Site] An instance of the `Jekyll::Site` used for
|
45
|
+
# config.
|
46
|
+
#
|
47
|
+
# @return void
|
48
|
+
def self.compress_directory(dir, site)
|
49
|
+
extensions = compressable_extensions(site).join(',')
|
50
|
+
files = Dir.glob(dir + "**/*{#{extensions}}")
|
51
|
+
files.each { |file| compress_file(file, compressable_extensions(site)) }
|
23
52
|
end
|
24
53
|
|
25
|
-
|
26
|
-
|
54
|
+
##
|
55
|
+
# Takes a file name and an array of extensions. If the file name extension
|
56
|
+
# matches one of the extensions in the array then the file is loaded and
|
57
|
+
# compressed using Brotli, outputting the compressed file under the name
|
58
|
+
# of the original file with an extra .br extension.
|
59
|
+
#
|
60
|
+
# @example
|
61
|
+
# Jekyll::Brotli::Compressor.compress_file("~/blog/_site/index.html")
|
62
|
+
#
|
63
|
+
# @param file_name [String] The file name of the file we want to compress
|
64
|
+
# @param extensions [Array<String>] The extensions of files that will be
|
65
|
+
# compressed.
|
66
|
+
#
|
67
|
+
# @return void
|
68
|
+
def self.compress_file(file_name, extensions)
|
69
|
+
return unless extensions.include?(File.extname(file_name))
|
27
70
|
compressed = "#{file_name}.br"
|
28
71
|
contents = ::Brotli.deflate(File.read(file_name), quality: 11)
|
29
72
|
File.open(compressed, "w+") do |file|
|
@@ -32,11 +75,11 @@ module Jekyll
|
|
32
75
|
File.utime(File.atime(file_name), File.mtime(file_name), compressed)
|
33
76
|
end
|
34
77
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
78
|
+
private
|
79
|
+
|
80
|
+
def self.compressable_extensions(site)
|
81
|
+
site.config['brotli'] && site.config['brotli']['extensions'] || Jekyll::Brotli::DEFAULT_CONFIG['extensions']
|
39
82
|
end
|
40
83
|
end
|
41
84
|
end
|
42
|
-
end
|
85
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module Brotli
|
5
|
+
DEFAULT_CONFIG = {
|
6
|
+
'extensions' => [
|
7
|
+
'.html',
|
8
|
+
'.css',
|
9
|
+
'.js',
|
10
|
+
'.txt',
|
11
|
+
'.ttf',
|
12
|
+
'.atom',
|
13
|
+
'.stl',
|
14
|
+
'.xml',
|
15
|
+
'.svg',
|
16
|
+
'.eot'
|
17
|
+
].freeze
|
18
|
+
}.freeze
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-brotli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Phil Nash
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -117,6 +117,7 @@ files:
|
|
117
117
|
- lib/jekyll-brotli.rb
|
118
118
|
- lib/jekyll/brotli.rb
|
119
119
|
- lib/jekyll/brotli/compressor.rb
|
120
|
+
- lib/jekyll/brotli/config.rb
|
120
121
|
- lib/jekyll/brotli/version.rb
|
121
122
|
homepage: https://github.com/philnash/jekyll-brotli
|
122
123
|
licenses:
|
@@ -138,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
139
|
version: '0'
|
139
140
|
requirements: []
|
140
141
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.7.
|
142
|
+
rubygems_version: 2.7.7
|
142
143
|
signing_key:
|
143
144
|
specification_version: 4
|
144
145
|
summary: Generate brotli compressed assets and files for your Jekyll site at build
|