jekyll-gem-resolver 1.0.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0f73a1204ca5c056325db49d1ebec551d55edc8d276331d25bf5f03aef46615
4
- data.tar.gz: cd4a9d219b18ca6908a9477703d957a825147ca28d20dba199db6375e16f1619
3
+ metadata.gz: 64ccf81805c3c9bb6e50fb51149a41918d37c9c741c7a1245cbe0ddcfd7a5625
4
+ data.tar.gz: 4127d03e6f25a161128e8abfd3cfdb35b180fd24d09f5773f4eb5ed0546abdc0
5
5
  SHA512:
6
- metadata.gz: 3866f9009290fb53aac6c39fde78af79897deb57f5ee30deaf3027a47b6b77fa7856fe38868634807ea66a1f4c43efeeae8ce76de5a344bf5b491dc59bf49114
7
- data.tar.gz: 4ec3c3758a367f5060fc86f38b10c2e2b85b11ae6f18b22ac322b278caaf8431377931b9f144e41c0271807615759be36b2703800ed00c769a6694fa5128aff3
6
+ metadata.gz: 31f24e0884ae7151d1bdc4583081185286259c6c76d44b7a28de550e51b98978c70d3f18670cef80c95c63012fe5f2543afb363724694b9a72a376e57db9bcc0
7
+ data.tar.gz: 69076a96ca6a5efd9b70842d4ae3db02ec32afc4cb9de62d0f02d25e8259921e67a57fafd326836a60319ee951e11aba83f4a0896d8f2f01ebfcaf31880f4df0
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # jekyll-gem-resolver
2
2
  [![Gem Version](https://badge.fury.io/rb/jekyll-gem-resolver.png)](https://badge.fury.io/rb/jekyll-gem-resolver)
3
+ [![Continuous Integration](https://github.com/cr7pt0gr4ph7/jekyll-gem-resolver/actions/workflows/ci.yml/badge.svg)](https://github.com/cr7pt0gr4ph7/jekyll-gem-resolver/actions/workflows/ci.yml)
3
4
 
4
5
  Simple Jekyll plugin that enables including resources from non-Jekyll gems into the site build.
5
6
 
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module GemResolver
3
- VERSION = '1.0.0'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
@@ -1,77 +1,5 @@
1
- module JekyllGemResolver
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
- private
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: 1.0.0
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-22 00:00:00.000000000 Z
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