cloudcannon-jekyll 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34076270fab6ebafaa9530d0898bc08274f902cc86e6fb2e13890d4a69440854
4
- data.tar.gz: 4036d2f037e7c36e31c112fcf4b296bd4afbb44f8d643aba36909108893b3b86
3
+ metadata.gz: 3a8badc065e548c467c7c794747e3f7147eeb8b200f19fe73aef583a026ab657
4
+ data.tar.gz: e6fa47b31b8801e4f6b106574cf15584a56299be5dff80128a2c12b325d6d77e
5
5
  SHA512:
6
- metadata.gz: 5ebaeaf4c7678a09859d0a845b1e4280c88ca1606099cf3e19ab7cc5a4d5a0ee2d2b18b5e827204d528915ed6d5281b089d9aa2baec4e0537d8efe5e0c263223
7
- data.tar.gz: 63e881e3242696fa1faad9ae166a0e121ab58a5895782c2eb2d3c474401da7993c7a40cf138cb22195bfcdf8c092a3ba446f1de4f0fd1eb5b50ca0469b8e72c0
6
+ metadata.gz: 60a58b7deaeaff3265a13ad0b14b1fe68229b53f1b413a08d7859167c3acc3da2ecef016372b08f630705edd14040167be6e9b15323344948e6856f4666c3bf6
7
+ data.tar.gz: 5c3d1b8402f2178eea44a03743d9d3985a19984795ff320dc9e34e106c3d19e0d34782e34f8d6905d039b36917a87bfe57dfe88f4288b4bf2575fe3fddc13acf
data/HISTORY.md CHANGED
@@ -1,3 +1,15 @@
1
+ # 2.3.0
2
+
3
+ * Fix output for drafts collection config
4
+ * Update schema version
5
+ * fix parsing for category folders
6
+ * Add logging
7
+
8
+ # 2.2.0
9
+
10
+ * Move data logic out of template
11
+ * Auto-populate categories and tags in data
12
+
1
13
  # 2.1.0
2
14
 
3
15
  * 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 }},
@@ -58,11 +54,10 @@
58
54
  },
59
55
  {% endif %}
60
56
  "paths": {
57
+ "static": "",
61
58
  "uploads": {{ config.uploads_dir | cc_jsonify }},
62
59
  "data": {{ config.data_dir | cc_jsonify }},
63
- "pages": "",
64
60
  "collections": {{ config.collections_dir | cc_jsonify }},
65
- "includes": {{ config.includes_dir | cc_jsonify }},
66
61
  "layouts": {{ config.layouts_dir | cc_jsonify }}
67
62
  },
68
63
  {% if config._array_structures %}
@@ -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 }},
@@ -57,11 +54,10 @@
57
54
  },
58
55
  {% endif %}
59
56
  "paths": {
57
+ "static": "",
60
58
  "uploads": {{ config.uploads_dir | cc_jsonify }},
61
59
  "data": {{ config.data_dir | cc_jsonify }},
62
- "pages": "",
63
60
  "collections": {{ config.collections_dir | cc_jsonify }},
64
- "includes": {{ config.includes_dir | cc_jsonify }},
65
61
  "layouts": {{ config.layouts_dir | cc_jsonify }}
66
62
  },
67
63
  {% if config._array_structures %}
@@ -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 }},
@@ -59,11 +57,10 @@
59
57
  },
60
58
  {%- endif %}
61
59
  "paths": {
60
+ "static": "",
62
61
  "uploads": {{ config.uploads_dir | cc_jsonify }},
63
62
  "data": {{ config.data_dir | cc_jsonify }},
64
- "pages": "",
65
63
  "collections": {{ config.collections_dir | cc_jsonify }},
66
- "includes": {{ config.includes_dir | cc_jsonify }},
67
64
  "layouts": {{ config.layouts_dir | cc_jsonify }}
68
65
  },
69
66
  {% if config._array_structures -%}
@@ -13,51 +13,82 @@ 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
+ def generate_collections_config(pages)
42
48
  collections = @site.config["collections"]&.dup || {}
43
- cc_collections = @site.config.dig("cloudcannon", "collections")&.dup || {}
49
+ collections_config = @site.config.dig("cloudcannon", "collections")&.dup || {}
44
50
 
45
51
  collections.each_key do |key|
46
52
  # Workaround for empty collection configurations
47
53
  defaults = collections[key] || { "output" => false }
48
- cc_collections[key] = (cc_collections[key] || {}).merge(defaults)
54
+ collections_config[key] = (collections_config[key] || {}).merge(defaults)
49
55
  end
50
56
 
51
- cc_collections
57
+ unless pages.empty?
58
+ collections_config["pages"] ||= {
59
+ "output" => true,
60
+ "filter" => "strict",
61
+ "path" => "",
62
+ }
63
+ end
64
+
65
+ collections_config
52
66
  end
53
67
 
54
- def collections_dir
55
- return "" if Jekyll::VERSION.start_with? "2."
68
+ # rubocop:disable Metrics/CyclomaticComplexity
69
+ def generate_collections(collections_config, pages, drafts)
70
+ split_posts = group_by_category_folder(all_posts, "posts")
71
+ split_drafts = group_by_category_folder(drafts, "drafts")
72
+
73
+ collections = {}
74
+ collections_config.each_key do |key|
75
+ collections[key] = if key == "posts" || key.end_with?("/posts")
76
+ split_posts[key]
77
+ elsif key == "drafts" || key.end_with?("/drafts")
78
+ split_drafts[key]
79
+ else
80
+ @site.collections[key]&.docs
81
+ end
82
+
83
+ collections[key] ||= []
84
+ end
56
85
 
57
- @site.config["collections_dir"] || ""
86
+ collections["pages"] = pages if collections["pages"].empty? && !pages.empty?
87
+ collections
58
88
  end
89
+ # rubocop:enable Metrics/CyclomaticComplexity
59
90
 
60
- def process_data
91
+ def generate_data
61
92
  cc_data = @site.config.dig("cloudcannon", "data")
62
93
  data = if cc_data == true
63
94
  @site.data&.dup
@@ -68,20 +99,57 @@ module CloudCannonJekyll
68
99
  data ||= {}
69
100
  data["categories"] ||= @site.categories.keys
70
101
  data["tags"] ||= @site.tags.keys
102
+
103
+ data.each_key do |key|
104
+ log "💾 Processed #{key.bold} data set"
105
+ end
106
+
71
107
  data
72
108
  end
73
109
 
110
+ def generate_pages
111
+ html_pages = @site.pages.select do |page|
112
+ page.html? || page.url.end_with?("/")
113
+ end
114
+
115
+ static_pages = @site.static_files.select do |static_page|
116
+ JsonifyFilter::STATIC_EXTENSIONS.include?(static_page.extname)
117
+ end
118
+
119
+ html_pages + static_pages
120
+ end
121
+
122
+ def collections_dir
123
+ return "" if Jekyll::VERSION.start_with? "2."
124
+
125
+ @site.config["collections_dir"] || ""
126
+ end
127
+
74
128
  def data_dir
75
129
  @site.config["data_dir"] || "_data"
76
130
  end
77
131
 
78
- # rubocop:disable Metrics/AbcSize
79
- def add_category_folder_config(collections_config, posts_config = {})
132
+ def all_posts
80
133
  posts = @site.posts || @site.collections["posts"]
81
- docs = posts.class.method_defined?(:docs) ? posts.docs : posts
134
+ posts.class.method_defined?(:docs) ? posts.docs : posts
135
+ end
136
+
137
+ def group_by_category_folder(collection, key)
138
+ split_path = "/_#{key}/"
139
+ collection.group_by do |doc|
140
+ parts = doc.relative_path.split(split_path)
141
+ if parts.length > 1
142
+ "#{parts.first}/#{key}".sub(%r!^\/+!, "")
143
+ else
144
+ key
145
+ end
146
+ end
147
+ end
148
+
149
+ def add_category_folder_config(collections_config, posts_config = {})
82
150
  seen = {}
83
151
 
84
- docs.map do |post|
152
+ all_posts.map do |post|
85
153
  parts = post.relative_path.split("/_posts/")
86
154
  path = parts.first
87
155
 
@@ -108,7 +176,23 @@ module CloudCannonJekyll
108
176
  path
109
177
  end
110
178
  end
111
- # rubocop:enable Metrics/AbcSize
179
+
180
+ def remove_empty_collection_config(collections_config, collections)
181
+ cc_collections = @site.config.dig("cloudcannon", "collections") || {}
182
+
183
+ collections_config.each_key do |key|
184
+ if collections[key].empty? && !cc_collections.key?(key)
185
+ log "📂 #{"Ignored".yellow} #{key.bold} collection"
186
+ collections_config.delete(key)
187
+ else
188
+ log "📁 Processed #{key.bold} collection with #{collections[key]&.length || 0} files"
189
+ end
190
+ end
191
+ end
192
+
193
+ def migrate_legacy_config
194
+ add_legacy_explore_groups
195
+ end
112
196
 
113
197
  # Support for the deprecated _explore configuration
114
198
  def add_legacy_explore_groups
@@ -128,8 +212,8 @@ module CloudCannonJekyll
128
212
  collections_config["posts"] = { "output" => true } if Jekyll::VERSION.start_with? "2."
129
213
  drafts = @reader.read_drafts(collections_dir)
130
214
 
131
- if drafts.any? || (collections_config.key?("posts") && !collections_config.key?("drafts"))
132
- collections_config["drafts"] = {}
215
+ if drafts.any? && !collections_config.key?("drafts")
216
+ collections_config["drafts"] = { "output" => !!@site.show_drafts }
133
217
  end
134
218
 
135
219
  folders = add_category_folder_config(collections_config, collections_config["posts"])
@@ -153,6 +237,11 @@ module CloudCannonJekyll
153
237
  File.open(dest, "w") { |file| file.write(file_content(filename, data)) }
154
238
  @site.keep_files ||= []
155
239
  @site.keep_files << path(filename)
240
+ log "🏁 Generated #{path(filename).bold} #{"successfully".green}"
241
+ end
242
+
243
+ def log(str)
244
+ Jekyll.logger.info("CloudCannon:", str)
156
245
  end
157
246
 
158
247
  def version_path_suffix
@@ -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.0"
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.0
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-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll