jekyll-generator-single-source 0.0.9 → 0.0.11

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: 4432d20f3c39addbf05d93c175274b04da965693eb385c60cd4362bebb834d3f
4
- data.tar.gz: 97900b313fd897bed71496e3bff3a947b2b9f37a51ce7c5c1c23b9f602f72260
3
+ metadata.gz: 253e5fa9d7d9bb93a522582300e462ed95aacf538537b75f366227b746324d55
4
+ data.tar.gz: cab91867c2467dbc009b072d331f17e36485e72e3d37ba43e516051dc9a7936e
5
5
  SHA512:
6
- metadata.gz: 0ff9f45d193014933d26ea182248239c2de7d432f7163b53bba3aee571a7c74582dec00c4ada25acd77511be5cb2a6875424644cd81b53127e0f12b187d824b9
7
- data.tar.gz: 15d2fbb89259724b40ff5876f876b9937df75f85f04b76ed6804e18fd8d7e2ba7bdaa50b131183acadc3330224d75e66e51aab1d3d9a7d48a8949efd33f16a45
6
+ metadata.gz: c39a9d017eef7e7f15e13cf8b1d0e96e63afcfa10252d4fa1ca4a99adfb6f6e719eda55f90769839a5511e28be3fb9d6dcfc42247f7788ee23a649b7a6e2d0ee
7
+ data.tar.gz: a447aadeb5a01e7d09331ee0668f449c9e6c4b316e0d9a420dd4560cf375147c532764e2d6eb037a953886b9ce3d772dddbc365f16ffaedbb52e4d04a0ac24bb
@@ -5,14 +5,15 @@ module Jekyll
5
5
  class DocNavConfig
6
6
  attr_reader :file_path, :site
7
7
 
8
- def initialize(file_path, site, versions_from_file)
8
+ def initialize(file_path, site)
9
9
  @file_path = file_path
10
10
  @site = site
11
- @versions_from_file = versions_from_file
12
11
  end
13
12
 
14
13
  def skip_generation?
15
- !(config.is_a?(Hash) && config['generate'])
14
+ # skip if release is not available because it
15
+ # was skipped using an ENV variable
16
+ !(config.is_a?(Hash) && config['generate']) || release.nil?
16
17
  end
17
18
 
18
19
  def assume_generated?
@@ -31,11 +32,13 @@ module Jekyll
31
32
  end
32
33
 
33
34
  def release
34
- @release ||= config['release']
35
+ @release ||= edition.releases.detect do |r|
36
+ r.value == config['release']
37
+ end
35
38
  end
36
39
 
37
40
  def versions
38
- @versions ||= Versions.extract(version)
41
+ @versions ||= release.versions
39
42
  end
40
43
 
41
44
  def generate_pages
@@ -54,10 +57,8 @@ module Jekyll
54
57
 
55
58
  private
56
59
 
57
- def version
58
- @version ||= @versions_from_file.detect do |v|
59
- v['edition'] == product && v['release'] == release
60
- end
60
+ def edition
61
+ @edition ||= Product::Edition.new(edition: product, site:)
61
62
  end
62
63
  end
63
64
  end
@@ -28,7 +28,9 @@ module Jekyll
28
28
  end
29
29
 
30
30
  def dest_path
31
- if multiple_products?
31
+ if @item_config['absolute_url']
32
+ File.join(@item_config['url'], '/')
33
+ elsif multiple_products?
32
34
  File.join(product, release, @item_config['url'], '/')
33
35
  else
34
36
  File.join(base_dest_path, release, @item_config['url'], '/')
@@ -51,7 +51,9 @@ module Jekyll
51
51
  end
52
52
 
53
53
  def product_page?
54
- url == "/#{product}/" || url == "/#{product}/#{release}/"
54
+ url == "/#{product}/" ||
55
+ url == "/#{product}/#{release}/" ||
56
+ url == "/#{product}/#{release.value}/"
55
57
  end
56
58
  end
57
59
  end
@@ -9,7 +9,7 @@ module Jekyll
9
9
  config = GeneratorConfig.new(site)
10
10
 
11
11
  Dir.glob(File.join(config.docs_nav_folder, 'docs_nav_*.yml')).each do |f|
12
- DocNavConfig.new(f, site, config.versions).generate_pages
12
+ DocNavConfig.new(f, site).generate_pages
13
13
  end
14
14
  end
15
15
  end
@@ -11,10 +11,10 @@ module Jekyll
11
11
  @site = site
12
12
  end
13
13
 
14
- def versions
15
- @versions ||= SafeYAML.load(File.read(
14
+ def editions
15
+ @editions ||= SafeYAML.load(File.read(
16
16
  File.expand_path(versions_file, @site.source)
17
- ))
17
+ )).group_by { |e| e['edition'] }
18
18
  end
19
19
 
20
20
  def layout
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module GeneratorSingleSource
5
+ module Liquid
6
+ module Drops
7
+ class Release < ::Liquid::Drop
8
+ extend Forwardable
9
+
10
+ attr_reader :release
11
+
12
+ def initialize(release)
13
+ @release = release
14
+ end
15
+
16
+ def_delegators :@release, :value, :label, :latest?, :to_s, :to_str, :versions
17
+
18
+ def hash
19
+ @hash ||= "#{@release.edition}-#{@release.value}".hash
20
+ end
21
+
22
+ def ==(other)
23
+ return @release.value == other if other.is_a?(String)
24
+
25
+ @release.to_h == other.release.to_h
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -18,34 +18,24 @@ module Jekyll
18
18
  def render(context) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
19
19
  page = context.environments.first['page']
20
20
 
21
- current_version = to_version(page['kong_version'] || page['version'])
21
+ current_version = to_version(page['release'].value)
22
22
 
23
23
  # If there's an exact match, check only that
24
24
  if @params.key?(:eq)
25
25
  version = to_version(@params[:eq])
26
- if Gem::Version.correct?(current_version)
27
- return '' unless current_version == version
28
- else
29
- return '' unless version > to_version(page['latest_released_version'])
30
- end
26
+ return '' unless current_version == version
31
27
  end
32
28
 
33
29
  # If there's a greater than or equal to check, fail if it's lower
34
30
  if @params.key?(:gte)
35
31
  version = to_version(@params[:gte])
36
- if Gem::Version.correct?(current_version)
37
- return '' unless current_version >= version
38
- end
32
+ return '' unless current_version >= version
39
33
  end
40
34
 
41
35
  # If there's a less than or equal to heck, fail if it's higher
42
36
  if @params.key?(:lte)
43
37
  version = to_version(@params[:lte])
44
- if Gem::Version.correct?(current_version)
45
- return '' unless current_version <= version
46
- else
47
- return '' unless version > to_version(page['latest_released_version'])
48
- end
38
+ return '' unless current_version <= version
49
39
  end
50
40
 
51
41
  # Don't evaluate the liquid block unconditionally,
@@ -72,11 +62,7 @@ module Jekyll
72
62
  end
73
63
 
74
64
  def to_version(input)
75
- if Gem::Version.correct?(input)
76
- Gem::Version.new(input.gsub(/\.x$/, '.0'))
77
- else
78
- input
79
- end
65
+ Gem::Version.new(input.to_s.gsub(/\.x$/, '.0'))
80
66
  end
81
67
  end
82
68
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module GeneratorSingleSource
5
+ module Product
6
+ class Edition
7
+
8
+ def self.all(site:)
9
+ GeneratorConfig.new(site).editions
10
+ end
11
+
12
+ def initialize(edition:, site:)
13
+ @edition = edition
14
+ @site = site
15
+ end
16
+
17
+ def releases
18
+ @releases ||= releases_data
19
+ .map { |r| Product::Release.new(r) }
20
+ .reject do |r|
21
+ r.label && ENV["SKIP_#{name.upcase.gsub('-','_')}_#{r.label.upcase}"]
22
+ end
23
+ end
24
+
25
+ def latest_release
26
+ @latest_release ||= releases.detect(&:latest?)
27
+ end
28
+
29
+ def name
30
+ @name ||= @edition
31
+ end
32
+
33
+ private
34
+
35
+ def releases_data
36
+ @releases_data ||= self.class.all(site: @site).fetch(@edition, [])
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module GeneratorSingleSource
5
+ module Product
6
+ class Release
7
+ attr_reader :release_hash
8
+
9
+ def initialize(release_hash)
10
+ @release_hash = release_hash
11
+
12
+ validate!
13
+ end
14
+
15
+ def edition
16
+ @edition ||= @release_hash.fetch('edition')
17
+ end
18
+
19
+ def value
20
+ @value ||= @release_hash['release']
21
+ end
22
+
23
+ def latest?
24
+ @release_hash['latest']
25
+ end
26
+
27
+ def label
28
+ @label ||= @release_hash['label']
29
+ end
30
+
31
+ def versions
32
+ @versions ||= begin
33
+ if @release_hash.has_key?('version')
34
+ { 'default' => @release_hash['version'] }
35
+ else
36
+ versions_without_suffix
37
+ end
38
+ end
39
+ end
40
+
41
+ def default_version
42
+ @default_version ||= versions['default']
43
+ end
44
+
45
+ def to_str
46
+ if @release_hash.key?('label')
47
+ label
48
+ else
49
+ value
50
+ end
51
+ end
52
+ alias :to_s :to_str
53
+
54
+ def to_semver
55
+ value.gsub('-x', '.x').gsub(/\.x/, '.0')
56
+ end
57
+
58
+ def to_liquid
59
+ Liquid::Drops::Release.new(self)
60
+ end
61
+
62
+ def to_h
63
+ @release_hash
64
+ end
65
+
66
+ private
67
+
68
+ def validate!
69
+ if @release_hash.has_key?('version') &&
70
+ @release_hash.keys.any? { |k| k.end_with?('-version') }
71
+ raise SyntaxError.new(
72
+ "Invalid config. `version` and `*-version` present in #{@release_hash}."
73
+ )
74
+ end
75
+ end
76
+
77
+ def versions_without_suffix
78
+ @versions_without_suffix ||= @release_hash.each_with_object({}) do |(k, v), h|
79
+ if k.end_with?('-version')
80
+ h[k.sub('-version', '')] = v
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -29,16 +29,19 @@ module Jekyll
29
29
  @data['is_dir_index'] = nav_item.source.dir?
30
30
 
31
31
  # Set the current release and concrete version
32
- @data['release'] = nav_item.release
33
- @data['version'] = nav_item.versions['default']
34
- @data['versions'] = nav_item.versions
32
+ release = nav_item.release
33
+ @data['release'] = Liquid::Drops::Release.new(release)
34
+ @data['edition'] = release.edition
35
+ @data['version'] = release.default_version
36
+ @data['versions'] = release.versions
37
+
35
38
  @data['nav_items'] = nav_item.config
36
39
 
37
40
  # Set the layout if it's not already provided
38
41
  @data['layout'] ||= GeneratorConfig.new(@site).layout
39
42
 
40
43
  # Apply any overrides
41
- current = to_version(@data['release'])
44
+ current = to_version(release.value)
42
45
  @data['overrides']&.each do |key, entries|
43
46
  entries.each do |value, conditions|
44
47
  gte = conditions['gte'] ? to_version(conditions['gte']) : nil
@@ -63,12 +66,8 @@ module Jekyll
63
66
  @relative_path = nav_item.source.file_path
64
67
  end
65
68
 
66
- def to_version(input)
67
- if Gem::Version.correct?(input)
68
- Gem::Version.new(input.gsub(/\.x$/, '.0'))
69
- else
70
- input
71
- end
69
+ def to_version(input)
70
+ Gem::Version.new(input.to_s.gsub(/\.x$/, '.0'))
72
71
  end
73
72
  end
74
73
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module GeneratorSingleSource
5
- VERSION = '0.0.9'
5
+ VERSION = '0.0.11'
6
6
  end
7
7
  end
@@ -18,4 +18,6 @@ require_relative 'generator-single-source/generator_config'
18
18
  require_relative 'generator-single-source/generator'
19
19
  require_relative 'generator-single-source/single_source_page'
20
20
  require_relative 'generator-single-source/version'
21
- require_relative 'generator-single-source/versions'
21
+ require_relative 'generator-single-source/product/release'
22
+ require_relative 'generator-single-source/product/edition'
23
+ require_relative 'generator-single-source/liquid/drops/release'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-generator-single-source
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabian Rodriguez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-22 00:00:00.000000000 Z
11
+ date: 2024-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -93,6 +93,7 @@ files:
93
93
  - lib/jekyll/generator-single-source/generator.rb
94
94
  - lib/jekyll/generator-single-source/generator_config.rb
95
95
  - lib/jekyll/generator-single-source/hooks/version_is.rb
96
+ - lib/jekyll/generator-single-source/liquid/drops/release.rb
96
97
  - lib/jekyll/generator-single-source/liquid/tags/version_is.rb
97
98
  - lib/jekyll/generator-single-source/nav_config/base.rb
98
99
  - lib/jekyll/generator-single-source/nav_config/hash_config.rb
@@ -100,12 +101,13 @@ files:
100
101
  - lib/jekyll/generator-single-source/nav_config/patch.rb
101
102
  - lib/jekyll/generator-single-source/nav_config/path_rewriter.rb
102
103
  - lib/jekyll/generator-single-source/nav_config/trimmer.rb
104
+ - lib/jekyll/generator-single-source/product/edition.rb
105
+ - lib/jekyll/generator-single-source/product/release.rb
103
106
  - lib/jekyll/generator-single-source/single_source_page.rb
104
107
  - lib/jekyll/generator-single-source/source/base.rb
105
108
  - lib/jekyll/generator-single-source/source/dir_source.rb
106
109
  - lib/jekyll/generator-single-source/source/file_source.rb
107
110
  - lib/jekyll/generator-single-source/version.rb
108
- - lib/jekyll/generator-single-source/versions.rb
109
111
  homepage: https://github.com/kong/jekyll-generator-single-source
110
112
  licenses:
111
113
  - Apache-2.0
@@ -118,14 +120,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
120
  requirements:
119
121
  - - ">="
120
122
  - !ruby/object:Gem::Version
121
- version: 3.1.2
123
+ version: 3.2.2
122
124
  required_rubygems_version: !ruby/object:Gem::Requirement
123
125
  requirements:
124
126
  - - ">="
125
127
  - !ruby/object:Gem::Version
126
128
  version: '0'
127
129
  requirements: []
128
- rubygems_version: 3.3.24
130
+ rubygems_version: 3.4.20
129
131
  signing_key:
130
132
  specification_version: 4
131
133
  summary: A Jekyll plugin to dynamically generate pages from a single source file
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jekyll
4
- module GeneratorSingleSource
5
- class Versions
6
- def self.extract(version_hash)
7
- new(version_hash).versions
8
- end
9
-
10
- def initialize(version)
11
- @version = version
12
-
13
- validate!
14
- end
15
-
16
- def versions
17
- if @version.has_key?('version')
18
- { 'default' => @version['version'] }
19
- else
20
- versions_without_suffix
21
- end
22
- end
23
-
24
- private
25
-
26
- def validate!
27
- if @version.has_key?('version') &&
28
- @version.keys.any? { |k| k.end_with?('-version') }
29
- raise SyntaxError.new(
30
- "Invalid config. `version` and `*-version` present in #{@version}."
31
- )
32
- end
33
- end
34
-
35
- def versions_without_suffix
36
- @versions_without_suffix ||= @version.each_with_object({}) do |(k, v), h|
37
- if k.end_with?('-version')
38
- h[k.sub('-version', '')] = v
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end