jekyll-generator-single-source 0.0.2 → 0.0.4

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: e651ab73d6f998179bce7f5e714cb65a3de3395c3cbbd0a2e6537c811f805198
4
- data.tar.gz: d31ec800b3b67e11c4f6dd7c54b1ffb2b7aa0a962322e0fbbfaf136142a3eb83
3
+ metadata.gz: aaa7fc639637793b289f7e6aa4d3789bfabaa63c98fcd60ddfb646c4fe3bd7a3
4
+ data.tar.gz: d0a69a8d0b809d597af1d7136ab4ea61e2c1201b0be16217fb4669c035ef313f
5
5
  SHA512:
6
- metadata.gz: 3c824783e55aa654214b2b12762fb6cddd07849c5fd8329336acadab5e95584f4faa26cee513f771efc7cda137203319f3d2ebb4c7f369b5c769ebbedeeb0a3f
7
- data.tar.gz: 021f60ea8e4595e6ef4135f921eaa8758f3928005d37e09ec5d7cb38f2e25662ea09034e29c91c8b18985e2b7722f934938e9b6a0f2dd1fab5902958cbcbde12
6
+ metadata.gz: 5799ee54ea764e6486d6404a815b211dca85fbf37cf07a89c2215e3d622adab62dcb0330619dd21951d8bb47255702808a77709d81c3ed6632bbc74cf05ac27c
7
+ data.tar.gz: d9b2463ea71fdd0e59f3bdfcd59a58d15de35a98fda8e3767f48f634a8d3879f336a433339806dd872db23a1f58de58baa49ef4b294b9ceb3e041de9ebc0b9bf
data/README.md CHANGED
@@ -11,13 +11,16 @@ end
11
11
  ```
12
12
 
13
13
  ## Usage
14
-
14
+
15
+ ### Projects that have multiple products
15
16
  Add these lines to your site's `_config.yml`:
16
17
 
17
18
  ```yaml
18
19
  jekyll-generator-single-source:
19
20
  versions_file: '<path_to_versions_file>.yml'
20
21
  docs_nav_folder: '<path_to_folder_containing_doc_nav_files'
22
+ layout: 'docs-v2' # default value
23
+ multiple_products: true # default value
21
24
  ```
22
25
 
23
26
  The paths are relative to the site's `source`.
@@ -28,4 +31,28 @@ Example configuration:
28
31
  jekyll-generator-single-source:
29
32
  versions_file: '_data/versions.yml'
30
33
  docs_nav_folder: '_data'
31
- ```
34
+ ```
35
+
36
+ ### Projects with a single product
37
+
38
+ Add these lines to your site's `_config.yml`:
39
+
40
+ ``` yaml
41
+ jekyll-generator-single-source:
42
+ versions_file: '<path_to_versions_file>.yml'
43
+ docs_nav_folder: '<path_to_folder_containing_doc_nav_files'
44
+ layout: 'page'
45
+ multiple_products: false
46
+ base_dest_path: '<path_to_dest_folder_within_dist>'
47
+ ```
48
+
49
+ Example configuration:
50
+
51
+ ``` yaml
52
+ jekyll-generator-single-source:
53
+ versions_file: '_data/versions.yml'
54
+ docs_nav_folder: '_data'
55
+ layout: 'page'
56
+ multiple_products: false
57
+ base_dest_path: 'docs'
58
+ ```
@@ -62,6 +62,14 @@ module Jekyll
62
62
 
63
63
  private
64
64
 
65
+ def multiple_products?
66
+ GeneratorConfig.new(site).multiple_products?
67
+ end
68
+
69
+ def base_dest_path
70
+ GeneratorConfig.new(site).base_dest_path
71
+ end
72
+
65
73
  def source_path
66
74
  raise NotImplementedError.new('implement this in subclass')
67
75
  end
@@ -19,12 +19,20 @@ module Jekyll
19
19
  if src.start_with?('/')
20
20
  src
21
21
  else
22
- [product, src].join('/')
22
+ if multiple_products?
23
+ [product, src].join('/')
24
+ else
25
+ src
26
+ end
23
27
  end
24
28
  end
25
29
 
26
30
  def dest_path
27
- File.join(product, release, @item_config['url'], '/')
31
+ if multiple_products?
32
+ File.join(product, release, @item_config['url'], '/')
33
+ else
34
+ File.join(base_dest_path, release, @item_config['url'], '/')
35
+ end
28
36
  end
29
37
 
30
38
  def src
@@ -19,18 +19,34 @@ module Jekyll
19
19
  private
20
20
 
21
21
  def source_path
22
- if product_page?
23
- product
22
+ if multiple_products?
23
+ if product_page?
24
+ product
25
+ else
26
+ File.join(product, url.delete_prefix('/'))
27
+ end
24
28
  else
25
- File.join(product, url.delete_prefix('/'))
29
+ if product_page?
30
+ 'index'
31
+ else
32
+ File.join(url.delete_prefix('/'))
33
+ end
26
34
  end
27
35
  end
28
36
 
29
37
  def dest_path
30
- if product_page?
31
- File.join(product, release, '/')
38
+ if multiple_products?
39
+ if product_page?
40
+ File.join(product, release, '/')
41
+ else
42
+ File.join(product, release, url, '/')
43
+ end
32
44
  else
33
- File.join(product, release, url, '/')
45
+ if product_page?
46
+ File.join(base_dest_path, release, '/')
47
+ else
48
+ File.join(base_dest_path, release, url, '/')
49
+ end
34
50
  end
35
51
  end
36
52
 
@@ -5,26 +5,12 @@ module Jekyll
5
5
  class Generator < Jekyll::Generator
6
6
  priority :highest
7
7
 
8
- attr_reader :config, :versions
9
-
10
- def initialize(config = {})
11
- @config = config.fetch('jekyll-generator-single-source', {})
12
- end
13
-
14
8
  def generate(site)
15
- Dir.glob(File.join(docs_nav_folder(site), 'docs_nav_*.yml')).each do |f|
16
- DocNavConfig.new(f, site, versions(site)).generate_pages
17
- end
18
- end
19
-
20
- def docs_nav_folder(site)
21
- File.expand_path(@config.fetch('docs_nav_folder'), site.source)
22
- end
9
+ config = GeneratorConfig.new(site)
23
10
 
24
- def versions(site)
25
- @versions ||= SafeYAML.load(
26
- File.read(File.expand_path @config.fetch('versions_file'), site.source)
27
- )
11
+ Dir.glob(File.join(config.docs_nav_folder, 'docs_nav_*.yml')).each do |f|
12
+ DocNavConfig.new(f, site, config.versions).generate_pages
13
+ end
28
14
  end
29
15
  end
30
16
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module GeneratorSingleSource
5
+ class GeneratorConfig
6
+ CONFIG_KEY = 'jekyll-generator-single-source'
7
+
8
+ attr_reader :site
9
+
10
+ def initialize(site)
11
+ @site = site
12
+ end
13
+
14
+ def versions
15
+ @versions ||= SafeYAML.load(File.read(
16
+ File.expand_path(versions_file, @site.source)
17
+ ))
18
+ end
19
+
20
+ def layout
21
+ config['layout'] || 'docs-v2'
22
+ end
23
+
24
+ def versions_file
25
+ config['versions_file']
26
+ end
27
+
28
+ def docs_nav_folder
29
+ File.expand_path(config.fetch('docs_nav_folder'), @site.source)
30
+ end
31
+
32
+ def multiple_products?
33
+ !!config.fetch('multiple_products', true)
34
+ end
35
+
36
+ def base_dest_path
37
+ config['base_dest_path']
38
+ end
39
+
40
+ private
41
+
42
+ def config
43
+ @config ||= @site.config.fetch(CONFIG_KEY, {})
44
+ end
45
+ end
46
+ end
47
+ end
@@ -26,7 +26,6 @@ module Jekyll
26
26
  @data['edit_link'] = nav_item.source.file_path
27
27
 
28
28
  # Make it clear that this content comes from a generated file
29
- @data['path'] = "GENERATED:nav=#{nav_item.nav}:src=#{nav_item.source.file_path}:#{@dir}"
30
29
  @data['is_dir_index'] = nav_item.source.dir?
31
30
 
32
31
  # Set the current release and concrete version
@@ -35,29 +34,33 @@ module Jekyll
35
34
  @data['versions'] = nav_item.versions
36
35
 
37
36
  # Set the layout if it's not already provided
38
- @data['layout'] ||= 'docs-v2'
37
+ @data['layout'] ||= GeneratorConfig.new(@site).layout
39
38
 
39
+ # Apply any overrides
40
+ current = to_version(@data['release'])
41
+ @data['overrides']&.each do |key, entries|
42
+ entries.each do |value, conditions|
43
+ gte = conditions['gte'] ? to_version(conditions['gte']) : nil
44
+ lte = conditions['lte'] ? to_version(conditions['lte']) : nil
45
+ eq = conditions['eq'] ? to_version(conditions['eq']) : nil
40
46
 
41
- # Apply any overrides
42
- current = to_version(@data['release'])
43
- @data['overrides']&.each do |key, entries|
44
- entries.each do |value, conditions|
45
- gte = conditions['gte'] ? to_version(conditions['gte']) : nil
46
- lte = conditions['lte'] ? to_version(conditions['lte']) : nil
47
- eq = conditions['eq'] ? to_version(conditions['eq']) : nil
47
+ if gte && lte
48
+ @data[key] = value if current >= gte && current <= lte
49
+ elsif gte
50
+ @data[key] = value if current >= gte
51
+ elsif lte
52
+ @data[key] = value if current <= lte
53
+ elsif eq
54
+ @data[key] = value if current == eq
55
+ end
56
+ end
57
+ end
48
58
 
49
- if gte && lte
50
- @data[key] = value if current >= gte && current <= lte
51
- elsif gte
52
- @data[key] = value if current >= gte
53
- elsif lte
54
- @data[key] = value if current <= lte
55
- elsif eq
56
- @data[key] = value if current == eq
57
- end
58
- end
59
- end
60
- end
59
+ # Needed so that regeneration works for single sourced pages
60
+ # It must be set to the source file
61
+ # Also, @path MUST NOT be set, it falls back to @relative_path
62
+ @relative_path = nav_item.source.file_path
63
+ end
61
64
 
62
65
  def to_version(input)
63
66
  Gem::Version.new(input.gsub(/\.x$/, '.0'))
@@ -4,7 +4,7 @@ module Jekyll
4
4
  module GeneratorSingleSource
5
5
  module Source
6
6
  class Base
7
- PATH = 'src'
7
+ PATH = '_src'
8
8
 
9
9
  def self.make_for(path:, site:)
10
10
  # Normalize path
@@ -13,7 +13,7 @@ module Jekyll
13
13
  path.delete_prefix('/').delete_suffix('/')
14
14
  )
15
15
 
16
- src_dir = File.expand_path('..', site.source)
16
+ src_dir = File.expand_path(site.source)
17
17
 
18
18
  # Read the source file, either `<src>.md or <src>/index.md`
19
19
  if File.exist?(File.join(src_dir, "#{file_path}.md"))
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module GeneratorSingleSource
5
- VERSION = '0.0.2'
5
+ VERSION = '0.0.4'
6
6
  end
7
7
  end
@@ -8,6 +8,7 @@ require_relative 'generator-single-source/source/base'
8
8
  require_relative 'generator-single-source/source/dir_source'
9
9
  require_relative 'generator-single-source/source/file_source'
10
10
  require_relative 'generator-single-source/doc_nav_config'
11
+ require_relative 'generator-single-source/generator_config'
11
12
  require_relative 'generator-single-source/generator'
12
13
  require_relative 'generator-single-source/single_source_page'
13
14
  require_relative 'generator-single-source/version'
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.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabian Rodriguez
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-19 00:00:00.000000000 Z
11
+ date: 2022-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -72,7 +72,7 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '3.11'
75
- description:
75
+ description:
76
76
  email:
77
77
  - fabian.rodriguez@konghq.com
78
78
  executables: []
@@ -91,6 +91,7 @@ files:
91
91
  - lib/jekyll/generator-single-source/doc_nav_item/without_src.rb
92
92
  - lib/jekyll/generator-single-source/doc_nav_item/without_src_and_url.rb
93
93
  - lib/jekyll/generator-single-source/generator.rb
94
+ - lib/jekyll/generator-single-source/generator_config.rb
94
95
  - lib/jekyll/generator-single-source/hooks/version_is.rb
95
96
  - lib/jekyll/generator-single-source/liquid/tags/version_is.rb
96
97
  - lib/jekyll/generator-single-source/single_source_page.rb
@@ -103,7 +104,7 @@ homepage: https://github.com/kong/jekyll-generator-single-source
103
104
  licenses:
104
105
  - Apache-2.0
105
106
  metadata: {}
106
- post_install_message:
107
+ post_install_message:
107
108
  rdoc_options: []
108
109
  require_paths:
109
110
  - lib
@@ -118,8 +119,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
119
  - !ruby/object:Gem::Version
119
120
  version: '0'
120
121
  requirements: []
121
- rubygems_version: 3.3.24
122
- signing_key:
122
+ rubygems_version: 3.0.3.1
123
+ signing_key:
123
124
  specification_version: 4
124
125
  summary: A Jekyll plugin to dynamically generate pages from a single source file
125
126
  test_files: []