jekyll-gem-resolver 0.0.3 → 1.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/README.md +3 -1
- data/lib/jekyll/gem_resolver/parser.rb +28 -0
- data/lib/jekyll/gem_resolver/resolver.rb +23 -0
- data/lib/jekyll/gem_resolver/transformer.rb +83 -0
- data/lib/jekyll/gem_resolver/version.rb +1 -1
- data/lib/jekyll_gem_resolver.rb +3 -75
- metadata +22 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64ccf81805c3c9bb6e50fb51149a41918d37c9c741c7a1245cbe0ddcfd7a5625
|
4
|
+
data.tar.gz: 4127d03e6f25a161128e8abfd3cfdb35b180fd24d09f5773f4eb5ed0546abdc0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31f24e0884ae7151d1bdc4583081185286259c6c76d44b7a28de550e51b98978c70d3f18670cef80c95c63012fe5f2543afb363724694b9a72a376e57db9bcc0
|
7
|
+
data.tar.gz: 69076a96ca6a5efd9b70842d4ae3db02ec32afc4cb9de62d0f02d25e8259921e67a57fafd326836a60319ee951e11aba83f4a0896d8f2f01ebfcaf31880f4df0
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# jekyll-gem-resolver
|
2
|
+
[](https://badge.fury.io/rb/jekyll-gem-resolver)
|
3
|
+
[](https://github.com/cr7pt0gr4ph7/jekyll-gem-resolver/actions/workflows/ci.yml)
|
2
4
|
|
3
|
-
Simple Jekyll plugin
|
5
|
+
Simple Jekyll plugin that enables including resources from non-Jekyll gems into the site build.
|
4
6
|
|
5
7
|
### Purpose
|
6
8
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module GemResolver
|
3
|
+
class PackageReference
|
4
|
+
attr_reader :type, :name, :relative_path
|
5
|
+
|
6
|
+
def initialize(package_type, package_name, relative_path)
|
7
|
+
@type = package_type
|
8
|
+
@name = package_name
|
9
|
+
@relative_path = relative_path
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class PackageReferenceParser
|
14
|
+
def try_parse(value)
|
15
|
+
return nil unless value.is_a? String
|
16
|
+
|
17
|
+
if /^gem:(?<gem_name>[^:]+):(?<relative_path>.*)/ =~ value
|
18
|
+
PackageReference.new('gem', gem_name, "/#{relative_path}")
|
19
|
+
elsif /^gem:(?<gem_name>[^\/:]+)(?<relative_path>.*)/ =~ value
|
20
|
+
PackageReference.new('gem', gem_name, relative_path)
|
21
|
+
else
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module GemResolver
|
5
|
+
class PackageReferenceResolver
|
6
|
+
def resolve_reference(pkg)
|
7
|
+
case pkg.type
|
8
|
+
when 'gem'
|
9
|
+
resolve_gem(pkg.name, pkg.relative_path)
|
10
|
+
else
|
11
|
+
Jekyll.logger.error("Unsupported package reference type #{package_type.inspect}")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def resolve_gem(gem_name, relative_path)
|
18
|
+
spec = Gem::Specification.find_by_name(gem_name)
|
19
|
+
spec.gem_dir + relative_path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
require 'jekyll/gem_resolver/parser'
|
3
|
+
require 'jekyll/gem_resolver/resolver'
|
4
|
+
|
5
|
+
module Jekyll
|
6
|
+
module GemResolver
|
7
|
+
class ConfigTransformer
|
8
|
+
def initialize(parser = nil, resolver = nil)
|
9
|
+
@parser = parser || Jekyll::GemResolver::PackageReferenceParser.new()
|
10
|
+
@resolver = resolver || Jekyll::GemResolver::PackageReferenceResolver.new()
|
11
|
+
end
|
12
|
+
|
13
|
+
def transform_site_config(site)
|
14
|
+
transform_yaml(site.config)
|
15
|
+
end
|
16
|
+
|
17
|
+
def transform_yaml(config)
|
18
|
+
options = config['gem_resolver'] || {}
|
19
|
+
(options['transform'] || []).each { |path_to_transform| transform_config_node(config, path_to_transform.split('.')) }
|
20
|
+
config
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def transform_config_node(node, path, use_fallbacks = true)
|
26
|
+
# Have we arrived at the last segment of the path?
|
27
|
+
if path.nil? || path.empty?
|
28
|
+
# Special behavior: If this node is an array, behave as if path contains an additional '.*'
|
29
|
+
return transform_config_node(node, ['*'], false) if node.is_a?(Array) && use_fallbacks
|
30
|
+
|
31
|
+
# Not an array: Directly process this node
|
32
|
+
return transform_config_value(node)
|
33
|
+
end
|
34
|
+
|
35
|
+
# The path has at least one remaining segment
|
36
|
+
key = strip_brackets(path[0])
|
37
|
+
remaining_path = path[1..-1]
|
38
|
+
|
39
|
+
if node.is_a? Array
|
40
|
+
if key == '*'
|
41
|
+
# Transform each value in this array recursively
|
42
|
+
node.map! { |value| transform_config_node(value, remaining_path) }
|
43
|
+
else
|
44
|
+
# Recurse into the specified array item
|
45
|
+
index = Integer(key)
|
46
|
+
node[index] = transform_config_node(node[index], remaining_path)
|
47
|
+
end
|
48
|
+
elsif node.is_a? Hash
|
49
|
+
if key == '*'
|
50
|
+
# Transform each value in this hash recursively
|
51
|
+
node.transform_values! { |value| transform_config_node(value, remaining_path) }
|
52
|
+
else
|
53
|
+
# Recurse into the specified hash value
|
54
|
+
node[key] = transform_config_node(node[key], remaining_path)
|
55
|
+
end
|
56
|
+
else
|
57
|
+
# The path has remaining segments, but this is a leaf node.
|
58
|
+
# This means that the specified path does not match, and we therefore
|
59
|
+
# do not modify or transform this node.
|
60
|
+
end
|
61
|
+
|
62
|
+
return node
|
63
|
+
end
|
64
|
+
|
65
|
+
def strip_brackets(text)
|
66
|
+
return text unless text
|
67
|
+
return text.gsub(/^\[(.+)\]$/, '\1')
|
68
|
+
end
|
69
|
+
|
70
|
+
def transform_config_value(value)
|
71
|
+
return value unless value.is_a? String # Not a package reference, ignore
|
72
|
+
|
73
|
+
package_ref = @parser.try_parse(value)
|
74
|
+
return value if package_ref.nil? # Not a package reference, ignore
|
75
|
+
|
76
|
+
result = @resolver.resolve(package_ref)
|
77
|
+
Jekyll.logger.error("Failed to resolve package reference #{value}") if result.nil?
|
78
|
+
Jekyll.logger.info("Resolved #{value} to #{result}") unless result.nil?
|
79
|
+
result
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/jekyll_gem_resolver.rb
CHANGED
@@ -1,77 +1,5 @@
|
|
1
|
-
|
2
|
-
def self.transform_config(site)
|
3
|
-
options = site.config['gem_resolver'] || {}
|
4
|
-
(options['transform'] || []).each { |path_to_transform| transform_config_node(site.config, path_to_transform.split('.')) }
|
5
|
-
end
|
1
|
+
require 'jekyll/gem_resolver/transformer'
|
6
2
|
|
7
|
-
|
8
|
-
|
9
|
-
def self.transform_config_node(node, path, use_fallbacks = true)
|
10
|
-
# Have we arrived at the last segment of the path?
|
11
|
-
if path.nil? || path.empty?
|
12
|
-
# Special behavior: If this node is an array, behave as if path contains an additional '.*'
|
13
|
-
return transform_config_node(node, ['*'], false) if node.is_a?(Array) && use_fallbacks
|
14
|
-
|
15
|
-
# Not an array: Directly process this node
|
16
|
-
return transform_config_value(node)
|
17
|
-
end
|
18
|
-
|
19
|
-
# The path has at least one remaining segment
|
20
|
-
key = strip_brackets(path[0])
|
21
|
-
remaining_path = path[1..-1]
|
22
|
-
|
23
|
-
if node.is_a? Array
|
24
|
-
if key == '*'
|
25
|
-
# Transform each value in this array recursively
|
26
|
-
node.map! { |value| transform_config_node(value, remaining_path) }
|
27
|
-
else
|
28
|
-
# Recurse into the specified array item
|
29
|
-
index = Integer(key)
|
30
|
-
node[index] = transform_config_node(node[index], remaining_path)
|
31
|
-
end
|
32
|
-
elsif node.is_a? Hash
|
33
|
-
if key == '*'
|
34
|
-
# Transform each value in this hash recursively
|
35
|
-
node.transform_values! { |value| transform_config_node(value, remaining_path) }
|
36
|
-
else
|
37
|
-
# Recurse into the specified hash value
|
38
|
-
node[key] = transform_config_node(node[key], remaining_path)
|
39
|
-
end
|
40
|
-
else
|
41
|
-
# The path has remaining segments, but this is a leaf node.
|
42
|
-
# This means that the specified path does not match, and we therefore
|
43
|
-
# do not modify or transform this node.
|
44
|
-
end
|
45
|
-
|
46
|
-
return node
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.strip_brackets(text)
|
50
|
-
return text unless text
|
51
|
-
return text.gsub(/^\[(.+)\]$/, '\1')
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.transform_config_value(value)
|
55
|
-
return value unless value.is_a? String
|
56
|
-
|
57
|
-
result = if /^gem:(?<gem_name>[^:]+):(?<relative_path>.*)/ =~ value
|
58
|
-
resolve_gem(gem_name, "/#{relative_path}")
|
59
|
-
elsif /^gem:(?<gem_name>[^\/]+)(?<relative_path>.*)/ =~ value
|
60
|
-
resolve_gem(gem_name, relative_path)
|
61
|
-
else
|
62
|
-
nil
|
63
|
-
end
|
64
|
-
|
65
|
-
Jekyll.logger.info("Resolved #{value} to #{result}") unless result.nil?
|
66
|
-
result
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.resolve_gem(gem_name, relative_path)
|
70
|
-
spec = Gem::Specification.find_by_name(gem_name)
|
71
|
-
spec.gem_dir + relative_path
|
72
|
-
end
|
73
|
-
|
74
|
-
Jekyll::Hooks.register :site, :after_init do |site|
|
75
|
-
transform_config(site)
|
76
|
-
end
|
3
|
+
Jekyll::Hooks.register :site, :after_init do |site|
|
4
|
+
Jekyll::GemResolver::ConfigTransformer.new().transform_site_config(site)
|
77
5
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-gem-resolver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Waslowksi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '13.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Gem resolver plugin for Jekyll
|
56
70
|
email:
|
57
71
|
- cr7pt0gr4ph7@gmail.com
|
@@ -61,6 +75,9 @@ extra_rdoc_files: []
|
|
61
75
|
files:
|
62
76
|
- LICENSE
|
63
77
|
- README.md
|
78
|
+
- lib/jekyll/gem_resolver/parser.rb
|
79
|
+
- lib/jekyll/gem_resolver/resolver.rb
|
80
|
+
- lib/jekyll/gem_resolver/transformer.rb
|
64
81
|
- lib/jekyll/gem_resolver/version.rb
|
65
82
|
- lib/jekyll_gem_resolver.rb
|
66
83
|
homepage: https://github.com/cr7pt0gr4ph7/jekyll-gem-resolver
|
@@ -87,6 +104,7 @@ requirements: []
|
|
87
104
|
rubygems_version: 3.2.33
|
88
105
|
signing_key:
|
89
106
|
specification_version: 4
|
90
|
-
summary:
|
91
|
-
|
107
|
+
summary: Simple Jekyll plugin that enables including resources from non-Jekyll gems
|
108
|
+
(primarily, but not limited to, SASS/SCSS files and static assets) into the site
|
109
|
+
build.
|
92
110
|
test_files: []
|