jekyll-bookshop 2.0.0.pre.alpha.4 → 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: c46fab0870b0fe3bf2f18ef2de82d603f18698c2b2e91d2dcab4a0f955d8c015
4
- data.tar.gz: 2c3d5177e8b9f1f560cfa11cbb38bca7c882b9ef0059f8f2849fc73c926558c6
3
+ metadata.gz: 341b5af1ac2cf7e91e7467b900b47fb1d49d70f32317cd3c57f1e8074d49bd6a
4
+ data.tar.gz: 489bd3ae7286ac09505bd0c847c3bceadb62a909dfde42af9371788d1c905460
5
5
  SHA512:
6
- metadata.gz: 29560e6e5a13f36cab682805f6d97a885c5d3ec9d7f5bc1d0bff9cb374ec45e7c297077274526b82bad425024cec247bfc3c3651b10f8097011f20c426324880
7
- data.tar.gz: 9f09c58f4b19555df6d90fb810c3170bf7a020cb9b97dbdf046731d4a555c63c724f027081316a1c2f51b5abf53d8956d136bd5a9f0ac6c683fee99d44725266
6
+ metadata.gz: 5fb68d6c4b13a341c44a39912665f4e3ff2f1b5a7abaa7263b4243d990fd6d930706fa07c22bbe88901ebab2f7f6742f4452fc2a18ff7cc941fcc2ef212763c5
7
+ data.tar.gz: 6b60ab077c8886736b4ae74c1d8be7cf0c9a7981beb127a396c3ce672797f1c3f68cfdbd0086fcccdf7c9494f144008f1fecd9a8022f1b31282e94ea91f6c0d3
@@ -1,15 +1,66 @@
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
6
7
 
7
8
  # Look for includes in the built bookshop directory
8
9
  def tag_includes_dirs(context)
9
- bookshop_locations = context['site']['bookshop_locations']&.collect do |location|
10
- Pathname.new(location + "/components").cleanpath.to_s
10
+ context['site']['bookshop_component_locations'].freeze
11
+ end
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
11
59
  end
12
- bookshop_locations.freeze
60
+ param_hash.each_pair do |param, values|
61
+ new_params[param] = expand_param_templates(values, context, param)
62
+ end
63
+ new_params
13
64
  end
14
65
 
15
66
  # Support the bind syntax, spreading an object into params
@@ -25,6 +76,7 @@ module JekyllBookshop
25
76
  end
26
77
 
27
78
  params.delete('bind')
79
+ params = expand_param_templates(params, context, "")
28
80
 
29
81
  params
30
82
  end
@@ -34,6 +86,9 @@ module JekyllBookshop
34
86
  site = context.registers[:site]
35
87
 
36
88
  file = render_variable(context) || @file
89
+ is_template = file.end_with? "__template"
90
+
91
+ file = file.gsub(".__template", "")
37
92
  cname = file.strip.split("/").last
38
93
  file = "#{file}/#{cname}.jekyll.html"
39
94
  validate_file_name(file)
@@ -55,6 +110,7 @@ module JekyllBookshop
55
110
  raise e
56
111
  end
57
112
  end
113
+
58
114
  end
59
115
  end
60
116
 
@@ -63,7 +119,7 @@ module JekyllBookshop
63
119
  site = context.registers[:site]
64
120
 
65
121
  bookshop_scss_files = []
66
- site.config['bookshop_locations']&.each do |location|
122
+ site.config['bookshop_base_locations']&.each do |location|
67
123
  components_loc = Pathname.new(location + "/").cleanpath.to_s
68
124
  scss_files = Dir.glob(components_loc + "/**/*.scss")&.collect do |scss_file|
69
125
  scss_file.sub!(components_loc+"/", '').sub!(".scss", '')
@@ -91,19 +147,28 @@ module JekyllBookshop
91
147
 
92
148
  # Add the paths to find bookshop's styles
93
149
  def self.open_bookshop(site)
94
- bookshop_locations = site.config['bookshop_locations']&.collect do |location|
95
- Pathname.new(location + "/").cleanpath.to_s
150
+ bookshop_base_locations = site.config['bookshop_locations']&.collect do |location|
151
+ Pathname.new("#{site.source}/#{location}/").cleanpath.to_s
96
152
  end
97
- bookshop_locations = bookshop_locations.select do |location|
153
+ bookshop_base_locations = bookshop_base_locations.select do |location|
98
154
  Dir.exist?(location)
99
155
  end
156
+ bookshop_component_locations = bookshop_base_locations&.collect do |location|
157
+ Pathname.new("#{location}/components/").cleanpath.to_s
158
+ end
100
159
 
101
160
  site.config['watch_dirs'] ||= [] # Paired with CloudCannon/jekyll-watch
102
- site.config['watch_dirs'].push(*bookshop_locations);
161
+ site.config['watch_dirs'].push(*bookshop_base_locations);
103
162
 
104
163
  site.config['sass'] ||= {}
105
164
  site.config['sass']['load_paths'] ||= []
106
- site.config['sass']['load_paths'].push(*bookshop_locations)
165
+ site.config['sass']['load_paths'].push(*bookshop_base_locations)
166
+
167
+ site.config['bookshop_base_locations'] ||= []
168
+ site.config['bookshop_base_locations'].push(*bookshop_base_locations)
169
+
170
+ site.config['bookshop_component_locations'] ||= []
171
+ site.config['bookshop_component_locations'].push(*bookshop_component_locations)
107
172
  end
108
173
  end
109
174
 
@@ -1,3 +1,3 @@
1
1
  module JekyllBookshop
2
- VERSION = "2.0.0.pre.alpha.4"
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.4
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-05-28 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: []