bookshop-array-structures 2.0.0.pre.alpha.7 → 2.0.0.pre.alpha.12

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: dd2df4cf6c4e92bfd97e35c225f46e023741544e663ad394ec6a460d0960d43b
4
- data.tar.gz: 150ce500ea36bfc8f901b8c07ae73e805cf02c0ee4e4a842924abdbf38609860
3
+ metadata.gz: f1c3232034512e94f37ffdd823056583093147468723ef0efd169f48d51c0b89
4
+ data.tar.gz: f58e5f60f7a5c9c49332a2b679ebbbe34ff159437367c7a3b1868ab7ad42efab
5
5
  SHA512:
6
- metadata.gz: f830c97c0ba625a1cd7900a771bf0db02dff11a9e52bdd1b88bbcba9ac38e7c1e8a6e72fa166a26249c32f46bf1b3b1ddefa812e7024d189a2d4f89a2f178760
7
- data.tar.gz: '08d21dd06e49f51718253ccbbd2484e67987e62297c7d2a08dcd901857ffde83484f8b59c2b20a39307fc191ad9deb322ccbe60e3818e77f078e8738808036ee'
6
+ metadata.gz: 49fcdd1d50ba4740410399a0f9e578f6c663d0c0ea9e424d573d32b9ac33ae09d76d14e0b78ae8a0f014e47c12e1e2885f9a0e2ba88e59f4b22c384cf175b90b
7
+ data.tar.gz: 9e35da2d5f2af938db611d847f850b72cbefe31b3187887a1c53d0cfaacfa311f30ee028353013fb9bb3baa5b583dee292dd291b0beea952c6b6aec9586581fb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bookshop-array-structures (2.0.0.pre.alpha.3)
4
+ bookshop-array-structures (2.0.0.pre.alpha.11)
5
5
  dry-inflector (>= 0.1, < 1.0)
6
6
  jekyll (>= 3.7, < 5.0)
7
7
  toml-rb (>= 2.0, < 3.0)
@@ -16,7 +16,7 @@ GEM
16
16
  builder (3.2.4)
17
17
  citrus (3.0.2)
18
18
  colorator (1.1.0)
19
- concurrent-ruby (1.1.8)
19
+ concurrent-ruby (1.1.9)
20
20
  dry-inflector (0.2.0)
21
21
  em-websocket (0.5.2)
22
22
  eventmachine (>= 0.12.9)
@@ -3,8 +3,8 @@ require_relative 'lib/bookshop-array-structures/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "bookshop-array-structures"
5
5
  spec.version = Bookshop::Arraystructures::VERSION
6
- spec.authors = ["Tate"]
7
- spec.email = ["tate@cloudcannon.com"]
6
+ spec.authors = ["CloudCannon"]
7
+ spec.email = ["support@cloudcannon.com"]
8
8
  spec.homepage = "https://github.com/cloudcannon/bookshop"
9
9
  spec.summary = "A Jekyll plugin to generate array structures from bookshop"
10
10
 
@@ -171,7 +171,117 @@ module Bookshop
171
171
  result["array_structures"].push("bookshop_components")
172
172
  end
173
173
  result.delete("_hidden") unless result["_hidden"].nil?
174
- return result
174
+ results = [result]
175
+ if result["_template"]
176
+ results.push(transform_template_component(result))
177
+ end
178
+ result.delete("_template")
179
+ return results
180
+ end
181
+
182
+ def self.transform_template_component(result)
183
+ base_template_hash = {"pre.__template_code" => ""}
184
+ base_comment_hash = {"pre.__template_code" => "Helper liquid to run before the feilds below. Assigns and captures will be available"}
185
+ schema_result = Marshal.load(Marshal.dump(result))
186
+ unwrap_structure_template(schema_result, "site")
187
+ schema_result["value"] = base_template_hash.merge! templatize_values(schema_result["value"])
188
+ schema_result["_comments"] = base_comment_hash.merge! templatize_comments(schema_result["_comments"])
189
+ schema_result["value"]["_bookshop_name"] = "#{schema_result["value"]["_bookshop_name"]}.__template"
190
+ schema_result["label"] = "Templated #{schema_result["label"]}"
191
+ schema_result["_array_structures"] = {}
192
+ schema_result["_select_data"] = {}
193
+ schema_result.delete("_template")
194
+ schema_result
195
+ end
196
+
197
+ # Breadth-first search through the structure, looking for keys
198
+ # that will match array structure or comments and flattening them
199
+ # into the root structure
200
+ def self.unwrap_structure_template(structure, parent_scope)
201
+ inflector = Dry::Inflector.new
202
+ singular_parent_scope = inflector.singularize(parent_scope)
203
+ flattened_keys = {}
204
+ structure["value"].each_pair do |base_key, base_value|
205
+ flattened_keys[base_key] = base_value if base_key.start_with? "_"
206
+ end
207
+ flatten_hash(structure["value"]).each do |flat_key|
208
+ cascade_key = flat_key.split(".").last
209
+ matched_comment = structure.dig("_comments", cascade_key)
210
+ matched_substructure = structure.dig("_array_structures", cascade_key, "values", 0)
211
+
212
+ if matched_substructure
213
+ # Mark this key as an array so the include plugin knows to return
214
+ # a value and not a string
215
+ flattened_keys["#{flat_key}.__array_template"] = "{% assign #{cascade_key} = #{singular_parent_scope}.#{cascade_key} %}"
216
+ if matched_comment
217
+ structure["_comments"].delete(cascade_key)
218
+ structure["_comments"]["#{flat_key}.__array_template"] = matched_comment
219
+ end
220
+
221
+ unwrap_structure_template(matched_substructure, cascade_key)
222
+ matched_substructure["value"].each_pair do |subkey, subvalue|
223
+ # Pull substructure's flat keys into this structure
224
+ flattened_keys["#{flat_key}.#{subkey}"] = subvalue
225
+ end
226
+ matched_substructure["_comments"].each_pair do |subkey, subcomment|
227
+ # Pull substructure's comments into this structure
228
+ structure["_comments"]["#{flat_key}.#{subkey}"] = subcomment
229
+ end
230
+ else
231
+ key_parent_scope = ""
232
+ unless singular_parent_scope == "site"
233
+ key_parent_scope = "#{singular_parent_scope}."
234
+ end
235
+ flattened_keys[flat_key] = "{{ #{key_parent_scope}#{flat_key.split('.').last} }}"
236
+ if matched_comment
237
+ structure["_comments"].delete(cascade_key)
238
+ structure["_comments"][flat_key] = matched_comment
239
+ end
240
+ end
241
+ end
242
+ structure["value"] = flattened_keys
243
+ end
244
+
245
+ # Recursively convert a hash into flat dot-notation keys
246
+ def self.flatten_hash(hash)
247
+ keys = [];
248
+ hash.each_pair do |k, v|
249
+ next if k.start_with? "_"
250
+ if v.is_a? Hash
251
+ flatten_hash(v).each do |ik|
252
+ keys.push("#{k}.#{ik}")
253
+ end
254
+ else
255
+ keys.push(k)
256
+ end
257
+ end
258
+ keys
259
+ end
260
+
261
+ def self.templatize_values(hash)
262
+ templated_hash = hash.dup
263
+ hash.each_pair do |k, v|
264
+ next if k.start_with? "_"
265
+ if k.end_with? "__array_template"
266
+ # Remove and re-add the array so position is preserved
267
+ templated_hash.delete(k)
268
+ templated_hash[k] = v
269
+ else
270
+ templated_hash.delete(k)
271
+ templated_hash["#{k}.__template"] = v
272
+ end
273
+ end
274
+ templated_hash
275
+ end
276
+
277
+ def self.templatize_comments(hash)
278
+ templated_hash = hash.dup
279
+ hash.each_pair do |k, comment|
280
+ next if k.end_with? "__array_template"
281
+ templated_hash.delete(k)
282
+ templated_hash["#{k}.__template"] = comment
283
+ end
284
+ templated_hash
175
285
  end
176
286
 
177
287
  def self.transform_legacy_component(path, component, site)
@@ -192,7 +302,7 @@ module Bookshop
192
302
  result["array_structures"].push("components")
193
303
  end
194
304
  result.delete("_hidden") unless result["_hidden"].nil?
195
- return result
305
+ return [result]
196
306
  end
197
307
 
198
308
  def self.rewrite_bookshop_toml(content)
@@ -235,17 +345,19 @@ module Bookshop
235
345
  puts exception
236
346
  next
237
347
  end
238
- transformed_component = transform_component(f, component, site)
239
- array_structures = transformed_component.delete("array_structures")
240
- array_structures.each{|key|
241
- begin
242
- site.config["_array_structures"][key] ||= {}
243
- site.config["_array_structures"][key]["values"] ||= []
244
- site.config["_array_structures"][key]["values"].push(transformed_component)
245
- rescue => exception
246
- puts "❌ Error Adding Story to Array Structures: " + f
247
- puts "🤔 Maybe your current _config.yml has conflicting array structures?"
248
- end
348
+ transformed_components = transform_component(f, component, site)
349
+ transformed_components.each{|transformed_component|
350
+ array_structures = transformed_component.delete("array_structures")
351
+ array_structures.each{|key|
352
+ begin
353
+ site.config["_array_structures"][key] ||= {}
354
+ site.config["_array_structures"][key]["values"] ||= []
355
+ site.config["_array_structures"][key]["values"].push(transformed_component)
356
+ rescue => exception
357
+ puts " Error Adding Story to Array Structures: " + f
358
+ puts "🤔 Maybe your current _config.yml has conflicting array structures?"
359
+ end
360
+ }
249
361
  }
250
362
  end
251
363
  end
@@ -1,5 +1,5 @@
1
1
  module Bookshop
2
2
  module Arraystructures
3
- VERSION = "2.0.0.pre.alpha.7"
3
+ VERSION = "2.0.0.pre.alpha.12"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bookshop-array-structures
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.alpha.7
4
+ version: 2.0.0.pre.alpha.12
5
5
  platform: ruby
6
6
  authors:
7
- - Tate
7
+ - CloudCannon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-02 00:00:00.000000000 Z
11
+ date: 2021-06-14 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
  version: '1.0'
73
73
  description:
74
74
  email:
75
- - tate@cloudcannon.com
75
+ - support@cloudcannon.com
76
76
  executables: []
77
77
  extensions: []
78
78
  extra_rdoc_files: []