jekyll-bookshop 2.0.0.pre.alpha.8 → 2.0.0.pre.alpha.9

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: b0ef8591510abbc4fe50bd326fd6d2387da047b547e7f54582b07d1ebf3f2ace
4
- data.tar.gz: 7e02ca2b237eff55023a1a12ad3b78abf71a72499c781e69761bacf3e8ab2d8b
3
+ metadata.gz: 341b5af1ac2cf7e91e7467b900b47fb1d49d70f32317cd3c57f1e8074d49bd6a
4
+ data.tar.gz: 489bd3ae7286ac09505bd0c847c3bceadb62a909dfde42af9371788d1c905460
5
5
  SHA512:
6
- metadata.gz: 1bd9f64db37ca097bb9431f1e8a4dcedac9834b6e60a689db434c52787cbf4e04d20f8a46dc2a207d8fc62368b7f6238216a793135cd59b70a14aab51e214575
7
- data.tar.gz: 16f22b6f1a460f4be51803233196a0f6f096cbcc4da8b4f311cb2e6965e7abc39335b33044e4e099e60ccbf3379daa84169806bd61b575d09a12d541a0bdefa5
6
+ metadata.gz: 5fb68d6c4b13a341c44a39912665f4e3ff2f1b5a7abaa7263b4243d990fd6d930706fa07c22bbe88901ebab2f7f6742f4452fc2a18ff7cc941fcc2ef212763c5
7
+ data.tar.gz: 6b60ab077c8886736b4ae74c1d8be7cf0c9a7981beb127a396c3ce672797f1c3f68cfdbd0086fcccdf7c9494f144008f1fecd9a8022f1b31282e94ea91f6c0d3
@@ -1,5 +1,6 @@
1
1
  require "jekyll"
2
- require 'pathname'
2
+ require "pathname"
3
+ require "dry/inflector"
3
4
 
4
5
  module JekyllBookshop
5
6
  class Tag < Jekyll::Tags::IncludeTag
@@ -9,6 +10,59 @@ module JekyllBookshop
9
10
  context['site']['bookshop_component_locations'].freeze
10
11
  end
11
12
 
13
+ def expand_param_templates(params, context, parent_param)
14
+ param_hash = {}
15
+ new_params = {}
16
+
17
+ template = params["__template"]
18
+ return Liquid::Template.parse(template).render(context) if template
19
+
20
+ array_template = params["__array_template"]
21
+ if array_template
22
+ # We're adding a new root scope here and then removing it.
23
+ # Who knows why, but assign and capture always add to the root scope.
24
+ # Which is why this is hacked in, instead of using context.stack 🤷‍♂️
25
+ context.scopes.push({})
26
+ Liquid::Template.parse(array_template).render(context)
27
+ template_scope = context.scopes.pop()
28
+ template_array = template_scope[parent_param] || "";
29
+ unless template_array.is_a? Array
30
+ Jekyll.logger.warn "Bookshop:",
31
+ "#{array_template} did not evaluate to an array
32
+ as required for key #{parent_param}.__array_template"
33
+ template_array = []
34
+ end
35
+
36
+ params.delete("__array_template")
37
+ output_array = []
38
+ template_array.each do |item|
39
+ inflector = Dry::Inflector.new
40
+ singular_parent = inflector.singularize(parent_param)
41
+ next_scope = {}
42
+ next_scope[singular_parent] = item
43
+
44
+ context.push(next_scope)
45
+ output_array.push(expand_param_templates(params, context, ""))
46
+ context.pop()
47
+ end
48
+ return output_array
49
+ end
50
+
51
+ params.each_pair do |param, value|
52
+ if param.end_with? "_template"
53
+ param_root, param_remainder = param.split('.', 2)
54
+ param_hash[param_root] ||= {}
55
+ param_hash[param_root][param_remainder] = value
56
+ else
57
+ new_params[param] = value
58
+ end
59
+ end
60
+ param_hash.each_pair do |param, values|
61
+ new_params[param] = expand_param_templates(values, context, param)
62
+ end
63
+ new_params
64
+ end
65
+
12
66
  # Support the bind syntax, spreading an object into params
13
67
  def parse_params(context)
14
68
  params = super
@@ -22,6 +76,7 @@ module JekyllBookshop
22
76
  end
23
77
 
24
78
  params.delete('bind')
79
+ params = expand_param_templates(params, context, "")
25
80
 
26
81
  params
27
82
  end
@@ -31,6 +86,9 @@ module JekyllBookshop
31
86
  site = context.registers[:site]
32
87
 
33
88
  file = render_variable(context) || @file
89
+ is_template = file.end_with? "__template"
90
+
91
+ file = file.gsub(".__template", "")
34
92
  cname = file.strip.split("/").last
35
93
  file = "#{file}/#{cname}.jekyll.html"
36
94
  validate_file_name(file)
@@ -52,6 +110,7 @@ module JekyllBookshop
52
110
  raise e
53
111
  end
54
112
  end
113
+
55
114
  end
56
115
  end
57
116
 
@@ -1,3 +1,3 @@
1
1
  module JekyllBookshop
2
- VERSION = "2.0.0.pre.alpha.8"
2
+ VERSION = "2.0.0.pre.alpha.9"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-bookshop
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.alpha.8
4
+ version: 2.0.0.pre.alpha.9
5
5
  platform: ruby
6
6
  authors:
7
- - Liam Bigelow
7
+ - CloudCannon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-12 00:00:00.000000000 Z
11
+ date: 2021-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -30,9 +30,29 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: dry-inflector
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0.1'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0.1'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '1.0'
33
53
  description:
34
54
  email:
35
- - liam@cloudcannon.com
55
+ - support@cloudcannon.com
36
56
  executables: []
37
57
  extensions: []
38
58
  extra_rdoc_files: []