cloudcannon-jekyll 2.2.0 → 2.3.3

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: 34076270fab6ebafaa9530d0898bc08274f902cc86e6fb2e13890d4a69440854
4
- data.tar.gz: 4036d2f037e7c36e31c112fcf4b296bd4afbb44f8d643aba36909108893b3b86
3
+ metadata.gz: c62beece4089cf5687f4c84d38495a602f62800a19bd5e195eb0272f79724965
4
+ data.tar.gz: 34024730134cd587c13ba63e259454c9d1aedb3fd0479f8ef32a2401ddab0753
5
5
  SHA512:
6
- metadata.gz: 5ebaeaf4c7678a09859d0a845b1e4280c88ca1606099cf3e19ab7cc5a4d5a0ee2d2b18b5e827204d528915ed6d5281b089d9aa2baec4e0537d8efe5e0c263223
7
- data.tar.gz: 63e881e3242696fa1faad9ae166a0e121ab58a5895782c2eb2d3c474401da7993c7a40cf138cb22195bfcdf8c092a3ba446f1de4f0fd1eb5b50ca0469b8e72c0
6
+ metadata.gz: '09a307c7f7d9deba9f4fe4407ae982b16c6a260bda34bbe140547cfe978a5268c0016210f995a8a6cf69c0b0815b3e883b369265586af64dfc07b41daa78e0ef'
7
+ data.tar.gz: 798272f7382f5da33c7bb6c03e30733a506346bc162eb042c1ef09fc1b62ae405d8660bb10771a07377cefeda9995852295dbd0cc37066f2c83944ae4b0777f8
data/HISTORY.md CHANGED
@@ -1,3 +1,28 @@
1
+ # 2.3.3
2
+
3
+ * Add _structures
4
+
5
+ # 2.3.2
6
+
7
+ * Add _inputs to templates
8
+
9
+ # 2.3.1
10
+
11
+ * Fix issue where pages config overwrites default
12
+ * Fix issue when a site has no pages
13
+
14
+ # 2.3.0
15
+
16
+ * Fix output for drafts collection config
17
+ * Update schema version
18
+ * fix parsing for category folders
19
+ * Add logging
20
+
21
+ # 2.2.0
22
+
23
+ * Move data logic out of template
24
+ * Auto-populate categories and tags in data
25
+
1
26
  # 2.1.0
2
27
 
3
28
  * Add `_instance_values` to global scope
data/README.md CHANGED
@@ -26,6 +26,13 @@ plugins:
26
26
  4. Build new gem with `gem build cloudcannon-jekyll.gemspec`
27
27
  5. Push new version to rubygems.org with `gem push cloudcannon-jekyll-{{ VERSION HERE }}.gem`
28
28
 
29
+ OR:
30
+
31
+ 1. Increase version in lib/cloudcannon-jekyll/version.rb
32
+ 2. Update HISTORY.md
33
+ 3. Run `./scripts/release`
34
+ 3. Create a release in GitHub
35
+
29
36
 
30
37
  ## Testing
31
38
 
@@ -19,13 +19,9 @@
19
19
  {% endif %}
20
20
  "collections-config": {{ collections_config | cc_jsonify }},
21
21
  "collections": {
22
- "drafts": {{ drafts | cc_jsonify }},
23
- "posts": {{ site.posts | reverse | cc_jsonify }}{% if site.collections.size > 0 %},{% endif %}
24
- {% for collection in site.collections %}"{{ collection[0] | xml_escape }}": {{ collection[1].docs | cc_jsonify }}{% unless forloop.last %},{% endunless %}
22
+ {% for collection in collections %}"{{ collection[0] | xml_escape }}": {{ collection[1] | cc_jsonify }}{% unless forloop.last %},{% endunless %}
25
23
  {% endfor %}
26
24
  },
27
- "pages": {{ site.html_pages | cc_jsonify }},
28
- "static-pages": {{ site.static_files | cc_static_files_jsonify }},
29
25
  "data": {{ data | cc_jsonify }},
30
26
  {% if config.baseurl %}
31
27
  "base-url": {{ config.baseurl | cc_jsonify }},
@@ -42,6 +38,9 @@
42
38
  {% if config._options %}
43
39
  "_options": {{ config._options | cc_jsonify }},
44
40
  {% endif %}
41
+ {% if config._inputs %}
42
+ "_inputs": {{ config._inputs | cc_jsonify }},
43
+ {% endif %}
45
44
  {% if config._collection_groups %}
46
45
  "_collection_groups": {{ config._collection_groups | cc_jsonify }},
47
46
  {% endif %}
@@ -58,13 +57,15 @@
58
57
  },
59
58
  {% endif %}
60
59
  "paths": {
60
+ "static": "",
61
61
  "uploads": {{ config.uploads_dir | cc_jsonify }},
62
62
  "data": {{ config.data_dir | cc_jsonify }},
63
- "pages": "",
64
63
  "collections": {{ config.collections_dir | cc_jsonify }},
65
- "includes": {{ config.includes_dir | cc_jsonify }},
66
64
  "layouts": {{ config.layouts_dir | cc_jsonify }}
67
65
  },
66
+ {% if config._structures %}
67
+ "_structures": {{ config._structures | cc_jsonify: 50 }},
68
+ {% endif %}
68
69
  {% if config._array_structures %}
69
70
  "_array_structures": {{ config._array_structures | cc_jsonify: 50 }},
70
71
  {% endif %}
@@ -19,12 +19,9 @@
19
19
  {% endif %}
20
20
  "collections-config": {{ collections_config | cc_jsonify }},
21
21
  "collections": {
22
- "drafts": {{ drafts | cc_jsonify }}{% if site.collections.size > 0 %},{% endif %}
23
- {% for collection in site.collections %}"{{ collection.label | xml_escape }}": {{ collection.docs | cc_jsonify }}{% unless forloop.last %},{% endunless %}
22
+ {% for collection in collections %}"{{ collection[0] | xml_escape }}": {{ collection[1] | cc_jsonify }}{% unless forloop.last %},{% endunless %}
24
23
  {% endfor %}
25
24
  },
26
- "pages": {{ site.html_pages | cc_jsonify }},
27
- "static-pages": {{ site.static_files | cc_static_files_jsonify }},
28
25
  "data": {{ data | cc_jsonify }},
29
26
  {% if config.baseurl %}
30
27
  "base-url": {{ config.baseurl | cc_jsonify }},
@@ -41,6 +38,9 @@
41
38
  {% if config._options %}
42
39
  "_options": {{ config._options | cc_jsonify }},
43
40
  {% endif %}
41
+ {% if config._inputs %}
42
+ "_inputs": {{ config._inputs | cc_jsonify }},
43
+ {% endif %}
44
44
  {% if config._collection_groups %}
45
45
  "_collection_groups": {{ config._collection_groups | cc_jsonify }},
46
46
  {% endif %}
@@ -57,13 +57,15 @@
57
57
  },
58
58
  {% endif %}
59
59
  "paths": {
60
+ "static": "",
60
61
  "uploads": {{ config.uploads_dir | cc_jsonify }},
61
62
  "data": {{ config.data_dir | cc_jsonify }},
62
- "pages": "",
63
63
  "collections": {{ config.collections_dir | cc_jsonify }},
64
- "includes": {{ config.includes_dir | cc_jsonify }},
65
64
  "layouts": {{ config.layouts_dir | cc_jsonify }}
66
65
  },
66
+ {% if config._structures %}
67
+ "_structures": {{ config._structures | cc_jsonify: 50 }},
68
+ {% endif %}
67
69
  {% if config._array_structures %}
68
70
  "_array_structures": {{ config._array_structures | cc_jsonify: 50 }},
69
71
  {% endif %}
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "time": {{ site.time | date_to_xmlschema | cc_jsonify }},
3
+ "version": {{ version | cc_jsonify }},
3
4
  "cloudcannon": {
4
5
  "name": "cloudcannon-jekyll",
5
6
  "version": {{ gem_version | cc_jsonify }}
@@ -19,14 +20,11 @@
19
20
  {%- endif %}
20
21
  "collections-config": {{ collections_config | cc_jsonify }},
21
22
  "collections": {
22
- "drafts": {{ drafts | cc_jsonify }}{% if site.collections.size > 0 %},{% endif %}
23
- {%- for collection in site.collections -%}
24
- "{{ collection.label | xml_escape }}": {{ collection.docs | cc_jsonify }}
23
+ {%- for collection in collections -%}
24
+ "{{ collection[0] | xml_escape }}": {{ collection[1] | cc_jsonify }}
25
25
  {%- unless forloop.last %},{% endunless %}
26
26
  {%- endfor -%}
27
27
  },
28
- "pages": {{ site.html_pages | cc_jsonify }},
29
- "static-pages": {{ site.static_files | cc_static_files_jsonify }},
30
28
  "data": {{ data | cc_jsonify }},
31
29
  {% if config.baseurl -%}
32
30
  "base-url": {{ config.baseurl | cc_jsonify }},
@@ -43,6 +41,9 @@
43
41
  {% if config._options -%}
44
42
  "_options": {{ config._options | cc_jsonify }},
45
43
  {%- endif %}
44
+ {% if config._inputs -%}
45
+ "_inputs": {{ config._inputs | cc_jsonify }},
46
+ {%- endif %}
46
47
  {% if config._collection_groups -%}
47
48
  "_collection_groups": {{ config._collection_groups | cc_jsonify }},
48
49
  {%- endif %}
@@ -59,13 +60,15 @@
59
60
  },
60
61
  {%- endif %}
61
62
  "paths": {
63
+ "static": "",
62
64
  "uploads": {{ config.uploads_dir | cc_jsonify }},
63
65
  "data": {{ config.data_dir | cc_jsonify }},
64
- "pages": "",
65
66
  "collections": {{ config.collections_dir | cc_jsonify }},
66
- "includes": {{ config.includes_dir | cc_jsonify }},
67
67
  "layouts": {{ config.layouts_dir | cc_jsonify }}
68
68
  },
69
+ {% if config._structures -%}
70
+ "_structures": {{ config._structures | cc_jsonify: 50 }},
71
+ {%- endif %}
69
72
  {% if config._array_structures -%}
70
73
  "_array_structures": {{ config._array_structures | cc_jsonify: 50 }},
71
74
  {%- endif %}
@@ -13,51 +13,87 @@ module CloudCannonJekyll
13
13
  1
14
14
  end
15
15
 
16
+ # rubocop:disable Metrics/MethodLength
16
17
  def generate(site)
18
+ log "⭐️ Starting #{"cloudcannon-jekyll".blue}"
19
+
17
20
  @site = site
18
21
  @reader = Reader.new(@site)
19
22
 
20
- collections_config = process_collections_config
21
- data = process_data
22
-
23
- payload = @site.site_payload.merge({
24
- "gem_version" => CloudCannonJekyll::VERSION,
25
- })
26
-
23
+ migrate_legacy_config
24
+ pages = generate_pages
25
+ collections_config = generate_collections_config(pages)
27
26
  drafts = add_blogging_config(collections_config)
28
27
  add_collection_paths(collections_config)
28
+
29
+ collections = generate_collections(collections_config, pages, drafts)
30
+ remove_empty_collection_config(collections_config, collections)
31
+
29
32
  add_data_config(collections_config)
30
- add_legacy_explore_groups
33
+ data = generate_data
31
34
 
32
- generate_file("info", payload.merge({
35
+ generate_file("info", @site.site_payload.merge({
33
36
  "pwd" => Dir.pwd,
37
+ "version" => "0.0.2",
38
+ "gem_version" => CloudCannonJekyll::VERSION,
34
39
  "config" => @site.config,
35
40
  "collections_config" => collections_config,
36
- "drafts" => drafts,
41
+ "collections" => collections,
37
42
  "data" => data,
38
43
  }))
39
44
  end
45
+ # rubocop:enable Metrics/MethodLength
40
46
 
41
- def process_collections_config
47
+ # rubocop:disable Metrics/CyclomaticComplexity
48
+ def generate_collections_config(pages)
42
49
  collections = @site.config["collections"]&.dup || {}
43
- cc_collections = @site.config.dig("cloudcannon", "collections")&.dup || {}
50
+ collections_config = @site.config.dig("cloudcannon", "collections")&.dup || {}
44
51
 
45
52
  collections.each_key do |key|
46
53
  # Workaround for empty collection configurations
47
54
  defaults = collections[key] || { "output" => false }
48
- cc_collections[key] = (cc_collections[key] || {}).merge(defaults)
55
+ collections_config[key] = (collections_config[key] || {}).merge(defaults)
49
56
  end
50
57
 
51
- cc_collections
58
+ unless pages.empty? || collections.key?("pages")
59
+ pages_defaults = {
60
+ "output" => true,
61
+ "filter" => "strict",
62
+ "path" => "",
63
+ }
64
+
65
+ collections_config["pages"] = pages_defaults.merge(collections_config["pages"] || {})
66
+ end
67
+
68
+ collections_config
52
69
  end
53
70
 
54
- def collections_dir
55
- return "" if Jekyll::VERSION.start_with? "2."
71
+ # rubocop:disable Metrics/PerceivedComplexity
72
+ def generate_collections(collections_config, pages, drafts)
73
+ split_posts = group_by_category_folder(all_posts, "posts")
74
+ split_drafts = group_by_category_folder(drafts, "drafts")
75
+
76
+ collections = {}
77
+ collections_config.each_key do |key|
78
+ collections[key] = if key == "posts" || key.end_with?("/posts")
79
+ split_posts[key]
80
+ elsif key == "drafts" || key.end_with?("/drafts")
81
+ split_drafts[key]
82
+ else
83
+ @site.collections[key]&.docs
84
+ end
85
+
86
+ collections[key] ||= []
87
+ end
56
88
 
57
- @site.config["collections_dir"] || ""
89
+ has_collection_pages = collections.key?("pages") && !collections["pages"].empty?
90
+ collections["pages"] = pages unless pages.empty? || has_collection_pages
91
+ collections
58
92
  end
93
+ # rubocop:enable Metrics/PerceivedComplexity
94
+ # rubocop:enable Metrics/CyclomaticComplexity
59
95
 
60
- def process_data
96
+ def generate_data
61
97
  cc_data = @site.config.dig("cloudcannon", "data")
62
98
  data = if cc_data == true
63
99
  @site.data&.dup
@@ -68,20 +104,57 @@ module CloudCannonJekyll
68
104
  data ||= {}
69
105
  data["categories"] ||= @site.categories.keys
70
106
  data["tags"] ||= @site.tags.keys
107
+
108
+ data.each_key do |key|
109
+ log "💾 Processed #{key.bold} data set"
110
+ end
111
+
71
112
  data
72
113
  end
73
114
 
115
+ def generate_pages
116
+ html_pages = @site.pages.select do |page|
117
+ page.html? || page.url.end_with?("/")
118
+ end
119
+
120
+ static_pages = @site.static_files.select do |static_page|
121
+ JsonifyFilter::STATIC_EXTENSIONS.include?(static_page.extname)
122
+ end
123
+
124
+ html_pages + static_pages
125
+ end
126
+
127
+ def collections_dir
128
+ return "" if Jekyll::VERSION.start_with? "2."
129
+
130
+ @site.config["collections_dir"] || ""
131
+ end
132
+
74
133
  def data_dir
75
134
  @site.config["data_dir"] || "_data"
76
135
  end
77
136
 
78
- # rubocop:disable Metrics/AbcSize
79
- def add_category_folder_config(collections_config, posts_config = {})
137
+ def all_posts
80
138
  posts = @site.posts || @site.collections["posts"]
81
- docs = posts.class.method_defined?(:docs) ? posts.docs : posts
139
+ posts.class.method_defined?(:docs) ? posts.docs : posts
140
+ end
141
+
142
+ def group_by_category_folder(collection, key)
143
+ split_path = "/_#{key}/"
144
+ collection.group_by do |doc|
145
+ parts = doc.relative_path.split(split_path)
146
+ if parts.length > 1
147
+ "#{parts.first}/#{key}".sub(%r!^\/+!, "")
148
+ else
149
+ key
150
+ end
151
+ end
152
+ end
153
+
154
+ def add_category_folder_config(collections_config, posts_config = {})
82
155
  seen = {}
83
156
 
84
- docs.map do |post|
157
+ all_posts.map do |post|
85
158
  parts = post.relative_path.split("/_posts/")
86
159
  path = parts.first
87
160
 
@@ -108,7 +181,23 @@ module CloudCannonJekyll
108
181
  path
109
182
  end
110
183
  end
111
- # rubocop:enable Metrics/AbcSize
184
+
185
+ def remove_empty_collection_config(collections_config, collections)
186
+ cc_collections = @site.config.dig("cloudcannon", "collections") || {}
187
+
188
+ collections_config.each_key do |key|
189
+ if collections[key].empty? && !cc_collections.key?(key)
190
+ log "📂 #{"Ignored".yellow} #{key.bold} collection"
191
+ collections_config.delete(key)
192
+ else
193
+ log "📁 Processed #{key.bold} collection with #{collections[key]&.length || 0} files"
194
+ end
195
+ end
196
+ end
197
+
198
+ def migrate_legacy_config
199
+ add_legacy_explore_groups
200
+ end
112
201
 
113
202
  # Support for the deprecated _explore configuration
114
203
  def add_legacy_explore_groups
@@ -128,8 +217,8 @@ module CloudCannonJekyll
128
217
  collections_config["posts"] = { "output" => true } if Jekyll::VERSION.start_with? "2."
129
218
  drafts = @reader.read_drafts(collections_dir)
130
219
 
131
- if drafts.any? || (collections_config.key?("posts") && !collections_config.key?("drafts"))
132
- collections_config["drafts"] = {}
220
+ if drafts.any? && !collections_config.key?("drafts")
221
+ collections_config["drafts"] = { "output" => !!@site.show_drafts }
133
222
  end
134
223
 
135
224
  folders = add_category_folder_config(collections_config, collections_config["posts"])
@@ -153,6 +242,11 @@ module CloudCannonJekyll
153
242
  File.open(dest, "w") { |file| file.write(file_content(filename, data)) }
154
243
  @site.keep_files ||= []
155
244
  @site.keep_files << path(filename)
245
+ log "🏁 Generated #{path(filename).bold} #{"successfully".green}"
246
+ end
247
+
248
+ def log(str)
249
+ Jekyll.logger.info("CloudCannon:", str)
156
250
  end
157
251
 
158
252
  def version_path_suffix
@@ -50,7 +50,7 @@ module CloudCannonJekyll
50
50
  next if prevent.include?(key) || key.nil?
51
51
 
52
52
  prevent.push key
53
- next_max_depth = key == "_array_structures" ? 20 : max_depth
53
+ next_max_depth = %w(_array_structures _structures).include?(key) ? 20 : max_depth
54
54
  "#{key.to_json}: #{JsonifyFilter.to_json(value, depth, next_max_depth)}"
55
55
  end
56
56
 
@@ -134,7 +134,7 @@ module CloudCannonJekyll
134
134
 
135
135
  def self.hash_to_json(input, depth, max_depth)
136
136
  out = input.map do |key, value|
137
- next_max_depth = key == "_array_structures" ? 20 : max_depth
137
+ next_max_depth = %w(_array_structures _structures).include?(key) ? 20 : max_depth
138
138
  string_key = key.to_s.to_json
139
139
  "#{string_key}: #{JsonifyFilter.to_json(value, depth, next_max_depth)}"
140
140
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CloudCannonJekyll
4
- VERSION = "2.2.0"
4
+ VERSION = "2.3.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudcannon-jekyll
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - CloudCannon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-23 00:00:00.000000000 Z
11
+ date: 2021-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll