props_template 0.21.0 → 0.21.1
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 +4 -4
- data/lib/props_template/extensions/partial_renderer.rb +48 -112
- data/lib/props_template/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe0d4afac65f1f86e1adfdcc956cc21d6df96a54e55e1ab26c8fa450c6a2a7be
|
4
|
+
data.tar.gz: ea96579bc3d06512867d4c11ee619051a205d64e814e5fe643debd5085d2b56e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 363ed26b474344ec9e17b328521d10a2e226761272e80f49e72b32e6943f47e3e970d7939e0923548984e96a1cb361ff3e74beebfa058dabe86db4a683e48746
|
7
|
+
data.tar.gz: d99478adad2b0980ce471f992c32d8a8fb0ee4348c469cb7e25b3752c6e44c0181f4beb31bc14a65efafe4d3250588ad8b0d9713eade62ee48107a3072dafbfa
|
@@ -17,6 +17,14 @@ module Props
|
|
17
17
|
|
18
18
|
class Partialer
|
19
19
|
INVALID_PARTIAL_MESSAGE = "The partial name must be a string, but received (%s)."
|
20
|
+
OPTION_AS_ERROR_MESSAGE = "The value (%s) of the option `as` is not a valid Ruby identifier; " \
|
21
|
+
"make sure it starts with lowercase letter, " \
|
22
|
+
"and is followed by any combination of letters, numbers and underscores."
|
23
|
+
IDENTIFIER_ERROR_MESSAGE = "The partial name (%s) is not a valid Ruby identifier; " \
|
24
|
+
"make sure your partial name starts with underscore."
|
25
|
+
|
26
|
+
INVALID_PARTIAL_MESSAGE = "The partial name must be a string, but received (%s)."
|
27
|
+
|
20
28
|
|
21
29
|
def initialize(base, context, builder)
|
22
30
|
@context = context
|
@@ -24,30 +32,28 @@ module Props
|
|
24
32
|
@base = base
|
25
33
|
end
|
26
34
|
|
27
|
-
def extract_details(options)
|
28
|
-
|
35
|
+
def extract_details(options)
|
36
|
+
registered_details.each_with_object({}) do |key, details|
|
29
37
|
value = options[key]
|
30
38
|
|
31
39
|
details[key] = Array(value) if value
|
32
40
|
end
|
33
41
|
end
|
34
42
|
|
43
|
+
def registered_details
|
44
|
+
if ActionView.version.to_s >= "7"
|
45
|
+
ActionView::LookupContext.registered_details
|
46
|
+
else
|
47
|
+
@context.lookup_context.registered_details
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
35
51
|
def find_and_add_template(all_options)
|
36
52
|
first_opts = all_options[0]
|
37
53
|
|
38
54
|
if first_opts[:partial]
|
39
55
|
partial_opts = block_opts_to_render_opts(@builder, first_opts)
|
40
|
-
|
41
|
-
partial_opts.delete(:handlers)
|
42
|
-
partial = partial_opts[:partial]
|
43
|
-
|
44
|
-
if !(String === partial)
|
45
|
-
raise ArgumentError.new(INVALID_PARTIAL_MESSAGE % (partial.inspect))
|
46
|
-
end
|
47
|
-
|
48
|
-
template_keys = retrieve_template_keys(partial_opts)
|
49
|
-
details = extract_details(partial_opts)
|
50
|
-
template = find_template(partial, template_keys, details)
|
56
|
+
template = find_template(partial_opts)
|
51
57
|
|
52
58
|
all_options.map do |opts|
|
53
59
|
opts[:_template] = template
|
@@ -58,9 +64,13 @@ module Props
|
|
58
64
|
end
|
59
65
|
end
|
60
66
|
|
61
|
-
def find_template(
|
62
|
-
|
63
|
-
|
67
|
+
def find_template(partial_opts)
|
68
|
+
partial = partial_opts[:partial]
|
69
|
+
template_keys = retrieve_template_keys(partial_opts)
|
70
|
+
details = extract_details(partial_opts)
|
71
|
+
|
72
|
+
prefixes = partial.include?(?/) ? [] : @context.lookup_context.prefixes
|
73
|
+
@context.lookup_context.find_template(partial, prefixes, true, template_keys, details)
|
64
74
|
end
|
65
75
|
|
66
76
|
def retrieve_template_keys(options)
|
@@ -75,24 +85,24 @@ module Props
|
|
75
85
|
pass_opts[:locals] ||= {}
|
76
86
|
pass_opts[:locals][:json] = @builder
|
77
87
|
pass_opts[:partial] = partial
|
88
|
+
pass_opts[:formats] = [:json]
|
89
|
+
pass_opts.delete(:handlers)
|
78
90
|
|
79
|
-
|
80
|
-
|
91
|
+
if !(String === partial)
|
92
|
+
raise ArgumentError.new(INVALID_PARTIAL_MESSAGE % (partial.inspect))
|
93
|
+
end
|
81
94
|
|
82
|
-
|
83
|
-
PartialRenderer.refine_options(options, item)
|
95
|
+
pass_opts
|
84
96
|
end
|
85
97
|
|
86
98
|
def handle(options)
|
87
|
-
|
88
|
-
|
89
|
-
template = options[:_template] || renderer.template
|
99
|
+
partial_opts = block_opts_to_render_opts(@builder, options)
|
100
|
+
template = options[:_template] || find_template(partial_opts)
|
90
101
|
|
91
|
-
|
102
|
+
render_partial(template, @context, partial_opts)
|
92
103
|
end
|
93
104
|
|
94
|
-
def
|
95
|
-
view = @context
|
105
|
+
def render_partial(template, view, options)
|
96
106
|
instrument(:partial, identifier: template.identifier) do |payload|
|
97
107
|
locals = options[:locals]
|
98
108
|
content = template.render(view, locals)
|
@@ -101,33 +111,32 @@ module Props
|
|
101
111
|
build_rendered_template(content, template)
|
102
112
|
end
|
103
113
|
end
|
104
|
-
end
|
105
114
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
"and is followed by any combination of letters, numbers and underscores."
|
110
|
-
IDENTIFIER_ERROR_MESSAGE = "The partial name (%s) is not a valid Ruby identifier; " \
|
111
|
-
"make sure your partial name starts with underscore."
|
112
|
-
|
113
|
-
INVALID_PARTIAL_MESSAGE = "The partial name must be a string, but received (%s)."
|
115
|
+
def build_rendered_template(content, template, layout = nil)
|
116
|
+
RenderedTemplate.new content, layout, template
|
117
|
+
end
|
114
118
|
|
119
|
+
def instrument(name, **options) # :doc:
|
120
|
+
ActiveSupport::Notifications.instrument("render_#{name}.action_view", options) do |payload|
|
121
|
+
yield payload
|
122
|
+
end
|
123
|
+
end
|
115
124
|
|
116
|
-
def
|
125
|
+
def raise_invalid_option_as(as)
|
117
126
|
raise ArgumentError.new(OPTION_AS_ERROR_MESSAGE % (as))
|
118
127
|
end
|
119
128
|
|
120
|
-
def
|
129
|
+
def raise_invalid_identifier(path)
|
121
130
|
raise ArgumentError.new(IDENTIFIER_ERROR_MESSAGE % (path))
|
122
131
|
end
|
123
132
|
|
124
|
-
def
|
133
|
+
def retrieve_variable(path)
|
125
134
|
base = path[-1] == "/" ? "" : File.basename(path)
|
126
135
|
raise_invalid_identifier(path) unless base =~ /\A_?(.*?)(?:\.\w+)*\z/
|
127
136
|
$1.to_sym
|
128
137
|
end
|
129
138
|
|
130
|
-
def
|
139
|
+
def refine_options(options, item = nil)
|
131
140
|
return options if !options[:partial]
|
132
141
|
|
133
142
|
partial, rest = [*options[:partial]]
|
@@ -156,78 +165,5 @@ module Props
|
|
156
165
|
|
157
166
|
pass_opts
|
158
167
|
end
|
159
|
-
|
160
|
-
attr_reader :template
|
161
|
-
|
162
|
-
def initialize(context, options)
|
163
|
-
@context = context
|
164
|
-
@options = options.merge(formats: [:json])
|
165
|
-
@options.delete(:handlers)
|
166
|
-
@details = extract_details(@options)
|
167
|
-
|
168
|
-
partial = @options[:partial]
|
169
|
-
|
170
|
-
if !(String === partial)
|
171
|
-
raise_invalid_partial(partial.inspect)
|
172
|
-
end
|
173
|
-
|
174
|
-
@path = partial
|
175
|
-
|
176
|
-
template_keys = retrieve_template_keys(@options)
|
177
|
-
@template = find_template(@path, template_keys)
|
178
|
-
end
|
179
|
-
|
180
|
-
def render(template, options)
|
181
|
-
#remove this later
|
182
|
-
|
183
|
-
render_partial(template, @context, @options)
|
184
|
-
end
|
185
|
-
|
186
|
-
private
|
187
|
-
def extract_details(options) # :doc:
|
188
|
-
@context.lookup_context.registered_details.each_with_object({}) do |key, details|
|
189
|
-
value = options[key]
|
190
|
-
|
191
|
-
details[key] = Array(value) if value
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
def instrument(name, **options) # :doc:
|
196
|
-
ActiveSupport::Notifications.instrument("render_#{name}.action_view", options) do |payload|
|
197
|
-
yield payload
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
def render_partial(template, view, options)
|
202
|
-
template ||= @template
|
203
|
-
# @variable ||= template.variable
|
204
|
-
|
205
|
-
instrument(:partial, identifier: @template.identifier) do |payload|
|
206
|
-
locals = options[:locals]
|
207
|
-
content = template.render(view, locals)
|
208
|
-
|
209
|
-
payload[:cache_hit] = view.view_renderer.cache_hits[template.virtual_path]
|
210
|
-
build_rendered_template(content, template)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
def build_rendered_template(content, template, layout = nil)
|
215
|
-
RenderedTemplate.new content, layout, template
|
216
|
-
end
|
217
|
-
|
218
|
-
def find_template(path, locals)
|
219
|
-
prefixes = path.include?(?/) ? [] : @context.lookup_context.prefixes
|
220
|
-
@context.lookup_context.find_template(path, prefixes, true, locals, @details)
|
221
|
-
end
|
222
|
-
|
223
|
-
def retrieve_template_keys(options)
|
224
|
-
template_keys = options[:locals].keys
|
225
|
-
template_keys << options[:as] if options[:as]
|
226
|
-
template_keys
|
227
|
-
end
|
228
|
-
|
229
|
-
def raise_invalid_partial(path)
|
230
|
-
raise ArgumentError.new(INVALID_PARTIAL_MESSAGE % (path))
|
231
|
-
end
|
232
168
|
end
|
233
169
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: props_template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.21.
|
4
|
+
version: 0.21.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johny Ho
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|