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

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: 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: []