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.
@@ -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,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "jekyll-render-order/sort"
4
+ require_relative "jekyll-render-order/version"
5
+
6
+ Jekyll::Hooks.register :site, :pre_render do |site, payload|
7
+ Jekyll::RenderOrder::sort(site)
8
+ end
@@ -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
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module RenderOrder
5
+ VERSION = '1.0.0'
6
+ end
7
+ end
@@ -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