jekyll-render-order 1.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 +7 -0
- data/lib/jekyll-render-order.rb +8 -0
- data/lib/jekyll-render-order/sort.rb +35 -0
- data/lib/jekyll-render-order/version.rb +7 -0
- data/test/test_sort.rb +110 -0
- metadata +112 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 36343d52dbb6f301baf05b68573c70f6cd74061ea9580ff74a661b6179bc2c3b
|
4
|
+
data.tar.gz: 2709c31f0db24251d8d9cf523821703bac611936c52f3f99e5549fb419923c22
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6016bfb9d8712bfe8fd4d09c782ab85130bc863a7dbfd19c50abe91fbd0d10bb4fd7a186593da7af32932991133aab44627939c8d3e866dcfd41ecb91594f18b
|
7
|
+
data.tar.gz: c2832e82f2d1f9d7ad5810b6012e8a3577a134748488f2c3ea15a872c8614397fb9b1aa1dd7326e6241d5210c5b835ba306d3b75df1a11a12466eb6916d79012
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module RenderOrder
|
5
|
+
DEFAULT_ORDER = [
|
6
|
+
'assets/**/*.{css,sass,scss}',
|
7
|
+
'assets/**/*.js',
|
8
|
+
'*.{css,sass,scss}',
|
9
|
+
'*.js',
|
10
|
+
].freeze()
|
11
|
+
|
12
|
+
def self.sort(site)
|
13
|
+
render_order = site.config['render_order'] || DEFAULT_ORDER
|
14
|
+
|
15
|
+
site.pages.sort! { |a, b|
|
16
|
+
a_idx = render_order.index { |x| File.fnmatch?(x, a.path, File::FNM_EXTGLOB) }
|
17
|
+
b_idx = render_order.index { |x| File.fnmatch?(x, b.path, File::FNM_EXTGLOB) }
|
18
|
+
|
19
|
+
if not a_idx.nil? then
|
20
|
+
if b_idx.nil? then
|
21
|
+
-1
|
22
|
+
elsif a_idx != b_idx then
|
23
|
+
a_idx - b_idx
|
24
|
+
else
|
25
|
+
a.path.casecmp(b.path)
|
26
|
+
end
|
27
|
+
elsif not b_idx.nil? then
|
28
|
+
+1
|
29
|
+
else
|
30
|
+
a.path.casecmp(b.path)
|
31
|
+
end
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/test/test_sort.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'jekyll/site'
|
5
|
+
require 'jekyll-render-order/sort'
|
6
|
+
|
7
|
+
class SortTest < Minitest::Test
|
8
|
+
def test_default
|
9
|
+
order = nil
|
10
|
+
|
11
|
+
correct = [
|
12
|
+
# First CSS in assets
|
13
|
+
'assets/first/b.scss',
|
14
|
+
'assets/second/a.css',
|
15
|
+
# Then JS files in assets
|
16
|
+
'assets/first/a.js',
|
17
|
+
'assets/second/b.js',
|
18
|
+
# CSS files elsewhere
|
19
|
+
'page/style.scss',
|
20
|
+
# JS files elsewhere
|
21
|
+
'first.js',
|
22
|
+
'page/script.js',
|
23
|
+
'second.js',
|
24
|
+
# Unmatched
|
25
|
+
'index.md',
|
26
|
+
]
|
27
|
+
|
28
|
+
test_sort(order, correct)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_first
|
32
|
+
order = [
|
33
|
+
# Assets in first first
|
34
|
+
'assets/first/*',
|
35
|
+
# Then assets in second
|
36
|
+
'assets/second/*',
|
37
|
+
]
|
38
|
+
|
39
|
+
correct = [
|
40
|
+
'assets/first/a.js',
|
41
|
+
'assets/first/b.css',
|
42
|
+
|
43
|
+
'assets/second/a.css',
|
44
|
+
'assets/second/b.js',
|
45
|
+
|
46
|
+
'first.js',
|
47
|
+
'index.md',
|
48
|
+
'page/script.js',
|
49
|
+
'page/style.css',
|
50
|
+
'second.js',
|
51
|
+
]
|
52
|
+
|
53
|
+
test_sort(order, correct)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_js_first
|
57
|
+
order = [
|
58
|
+
# JS first
|
59
|
+
'*.js',
|
60
|
+
]
|
61
|
+
|
62
|
+
correct = [
|
63
|
+
'assets/first/a.js',
|
64
|
+
'assets/second/b.js',
|
65
|
+
'first.js',
|
66
|
+
'page/script.js',
|
67
|
+
'second.js',
|
68
|
+
|
69
|
+
'assets/first/b.css',
|
70
|
+
'assets/second/a.css',
|
71
|
+
'index.md',
|
72
|
+
'page/style.css',
|
73
|
+
]
|
74
|
+
|
75
|
+
test_sort(order, correct)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def test_sort(order, correct)
|
81
|
+
config = {
|
82
|
+
'render_order' => order
|
83
|
+
}
|
84
|
+
|
85
|
+
page_mocks = correct.sort().map { |x| PageMock.new(x) }
|
86
|
+
site = SiteMock.new(config, page_mocks)
|
87
|
+
|
88
|
+
Jekyll::RenderOrder::sort(site)
|
89
|
+
|
90
|
+
calculated = site.pages.map { |x| x.path }
|
91
|
+
assert_equal(correct, calculated)
|
92
|
+
end
|
93
|
+
|
94
|
+
class SiteMock
|
95
|
+
attr_reader :config, :pages
|
96
|
+
|
97
|
+
def initialize(config, pages)
|
98
|
+
@config = config
|
99
|
+
@pages = pages
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class PageMock
|
104
|
+
attr_reader :path
|
105
|
+
|
106
|
+
def initialize(path)
|
107
|
+
@path = path
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-render-order
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marcos Del Sol Vives
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jekyll
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '13'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '13'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: minitest
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '5'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '5'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: bundler
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '2'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '2'
|
75
|
+
description: This plugin allows customization of the order in which Jekyll pages are
|
76
|
+
rendered. Ideal to ensure assets are generated before main files.
|
77
|
+
email:
|
78
|
+
- marcos@orca.pet
|
79
|
+
executables: []
|
80
|
+
extensions: []
|
81
|
+
extra_rdoc_files: []
|
82
|
+
files:
|
83
|
+
- lib/jekyll-render-order.rb
|
84
|
+
- lib/jekyll-render-order/sort.rb
|
85
|
+
- lib/jekyll-render-order/version.rb
|
86
|
+
- test/test_sort.rb
|
87
|
+
homepage: https://github.com/socram8888/jekyll-render-order
|
88
|
+
licenses:
|
89
|
+
- ISC
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 2.7.6.2
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: Customizes Jekyll page rendering order.
|
111
|
+
test_files:
|
112
|
+
- test/test_sort.rb
|