roger 1.6.1 → 1.6.2
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/CHANGELOG.md +4 -0
- data/doc/templating.md +2 -2
- data/lib/roger/generators.rb +1 -0
- data/lib/roger/renderer.rb +30 -18
- data/lib/roger/version.rb +1 -1
- data/test/project/partials/test/max_depth.html.erb +5 -0
- data/test/unit/renderer/renderer_partial_test.rb +21 -0
- metadata +34 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc5df3b7198a5c8ae6dca70a00e6a35416fa4056
|
4
|
+
data.tar.gz: 850c235b8f2426af1772cb02182e749d91557a95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4aabffaf1c231cdda88a03a4df296324abf857a9be70ad18273f7a2709ef9e33480e0aa0096bf18b0a377b695eceb629b8d4e1f18c18c57a592981121d95b89
|
7
|
+
data.tar.gz: 3151091868343c3aaeffa12903b5b331e78b2f7bf941e021c98b6110fa1ff5dd280a0253f0beacc9c15ab468e212907209ffa0cbe48b3fa7f5283f3e5b49c550
|
data/CHANGELOG.md
CHANGED
data/doc/templating.md
CHANGED
@@ -157,10 +157,10 @@ A helper is nothing more than a plain old Ruby module containing a bunch of func
|
|
157
157
|
Registering helpers can best be done in the Rogerfile. Register this module as following:
|
158
158
|
|
159
159
|
```ruby
|
160
|
-
Roger::
|
160
|
+
Roger::Renderer.helper MyHelperModule
|
161
161
|
```
|
162
162
|
|
163
|
-
After registration the helpers are available for use in all templates, partials, layouts, etc. See the [template helpers tests](../test/unit/
|
163
|
+
After registration the helpers are available for use in all templates, partials, layouts, etc. See the [template helpers tests](../test/unit/renderer/renderer_helper_test.rb) for example usage.
|
164
164
|
|
165
165
|
## Access to Project
|
166
166
|
|
data/lib/roger/generators.rb
CHANGED
data/lib/roger/renderer.rb
CHANGED
@@ -8,6 +8,8 @@ module Roger
|
|
8
8
|
# The renderer will set up an environment so you can consistently render templates
|
9
9
|
# within that environment
|
10
10
|
class Renderer
|
11
|
+
MAX_ALLOWED_TEMPLATE_NESTING = 10
|
12
|
+
|
11
13
|
class << self
|
12
14
|
# Register a helper module that should be included in
|
13
15
|
# every template context.
|
@@ -129,7 +131,9 @@ module Roger
|
|
129
131
|
render_result
|
130
132
|
end
|
131
133
|
ensure
|
132
|
-
|
134
|
+
# Only pop the template from the nesting if we actually
|
135
|
+
# put it on the nesting stack.
|
136
|
+
template_nesting.pop if template
|
133
137
|
end
|
134
138
|
|
135
139
|
# Render any file on disk. No magic. Just rendering.
|
@@ -142,22 +146,13 @@ module Roger
|
|
142
146
|
#
|
143
147
|
# @options options [Hash] :locals
|
144
148
|
def render_file(path, options = {})
|
145
|
-
pn =
|
146
|
-
|
147
|
-
if pn.relative?
|
148
|
-
# We're explicitly checking for source_path instead of real_source_path
|
149
|
-
# as you could also just have an inline template.
|
150
|
-
if current_template && current_template.source_path
|
151
|
-
pn = (Pathname.new(current_template.source_path).dirname + pn).realpath
|
152
|
-
else
|
153
|
-
err = "Only within another template you can use relative paths"
|
154
|
-
fail ArgumentError, err
|
155
|
-
end
|
156
|
-
else
|
157
|
-
pn = pn.realpath
|
158
|
-
end
|
149
|
+
pn = absolute_path_from_current_template(path)
|
159
150
|
|
160
151
|
template = template(pn.to_s, nil)
|
152
|
+
|
153
|
+
# Track rendered file also on the rendered stack
|
154
|
+
template_nesting.push(template)
|
155
|
+
|
161
156
|
template.render(options[:locals] || {})
|
162
157
|
end
|
163
158
|
|
@@ -173,6 +168,23 @@ module Roger
|
|
173
168
|
|
174
169
|
protected
|
175
170
|
|
171
|
+
def absolute_path_from_current_template(path)
|
172
|
+
pn = Pathname.new(path)
|
173
|
+
|
174
|
+
if pn.relative?
|
175
|
+
# We're explicitly checking for source_path instead of real_source_path
|
176
|
+
# as you could also just have an inline template.
|
177
|
+
if current_template && current_template.source_path
|
178
|
+
(Pathname.new(current_template.source_path).dirname + pn).realpath
|
179
|
+
else
|
180
|
+
err = "Only within another template you can use relative paths"
|
181
|
+
fail ArgumentError, err
|
182
|
+
end
|
183
|
+
else
|
184
|
+
pn.realpath
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
176
188
|
def template_and_layout_for_render(path, options = {})
|
177
189
|
# A previous template has been set so it's a partial
|
178
190
|
# If no previous template is set, we're
|
@@ -196,12 +208,12 @@ module Roger
|
|
196
208
|
# If this template is not a real file it cannot ever conflict.
|
197
209
|
return unless template.real_source_path
|
198
210
|
|
199
|
-
|
211
|
+
caller_templates = template_nesting.select do |t|
|
200
212
|
t.real_source_path == template.real_source_path
|
201
213
|
end
|
202
214
|
|
203
|
-
# We're good, no recursion
|
204
|
-
return
|
215
|
+
# We're good, no deeper recursion then MAX_ALLOWED_TEMPLATE_NESTING
|
216
|
+
return if caller_templates.length <= MAX_ALLOWED_TEMPLATE_NESTING
|
205
217
|
|
206
218
|
err = "Recursive render detected for '#{template.source_path}'"
|
207
219
|
err += " in '#{current_template.source_path}'"
|
data/lib/roger/version.rb
CHANGED
@@ -81,6 +81,27 @@ module Roger
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
def test_partial_ten_max_depth_recursion
|
85
|
+
r = render_erb_template "<%= partial 'test/max_depth', locals: {depth: 0, max_depth: 10} %>"
|
86
|
+
|
87
|
+
assert_match(/Hammertime/, r)
|
88
|
+
|
89
|
+
assert_raise(ArgumentError) do
|
90
|
+
render_erb_template "<%= partial 'test/max_depth', locals: {depth: 0, max_depth: 11} %>"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_no_partial_state
|
95
|
+
r = render_erb_template '
|
96
|
+
<%= begin
|
97
|
+
partial "../html/bla/partials/dunno"
|
98
|
+
rescue ArgumentError
|
99
|
+
end %>
|
100
|
+
<%= partial "test/simple" %>'
|
101
|
+
|
102
|
+
assert_match(/ERB/, r)
|
103
|
+
end
|
104
|
+
|
84
105
|
def render_erb_template(template)
|
85
106
|
@renderer.render(@base + "html/partials/test.html.erb", source: template)
|
86
107
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Flurin Egger
|
@@ -10,62 +10,62 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-05
|
13
|
+
date: 2016-09-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: thor
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- - ~>
|
19
|
+
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 0.19.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- - ~>
|
26
|
+
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 0.19.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rack
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- -
|
33
|
+
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: 1.0.0
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- -
|
40
|
+
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 1.0.0
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: tilt
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - ~>
|
47
|
+
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: 2.0.1
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- - ~>
|
54
|
+
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: 2.0.1
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: mime-types
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - ~>
|
61
|
+
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '2.2'
|
64
64
|
type: :runtime
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- - ~>
|
68
|
+
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '2.2'
|
71
71
|
- !ruby/object:Gem::Dependency
|
@@ -86,98 +86,98 @@ dependencies:
|
|
86
86
|
name: redcarpet
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- -
|
89
|
+
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: 3.1.1
|
92
92
|
type: :runtime
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
|
-
- -
|
96
|
+
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: 3.1.1
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: test_construct
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- - ~>
|
103
|
+
- - "~>"
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '2.0'
|
106
106
|
type: :runtime
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- - ~>
|
110
|
+
- - "~>"
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '2.0'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: test-unit
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- - ~>
|
117
|
+
- - "~>"
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: 3.0.0
|
120
120
|
type: :development
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
|
-
- - ~>
|
124
|
+
- - "~>"
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: 3.0.0
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: mocha
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
|
-
- - ~>
|
131
|
+
- - "~>"
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: 1.1.0
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
|
-
- - ~>
|
138
|
+
- - "~>"
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: 1.1.0
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
142
|
name: simplecov
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
|
-
- - ~>
|
145
|
+
- - "~>"
|
146
146
|
- !ruby/object:Gem::Version
|
147
147
|
version: 0.10.0
|
148
148
|
type: :development
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
|
-
- - ~>
|
152
|
+
- - "~>"
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
version: 0.10.0
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
156
|
name: puma
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
|
-
- - ~>
|
159
|
+
- - "~>"
|
160
160
|
- !ruby/object:Gem::Version
|
161
161
|
version: 2.10.0
|
162
162
|
type: :development
|
163
163
|
prerelease: false
|
164
164
|
version_requirements: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
|
-
- - ~>
|
166
|
+
- - "~>"
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: 2.10.0
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: rubocop
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
172
172
|
requirements:
|
173
|
-
- - ~>
|
173
|
+
- - "~>"
|
174
174
|
- !ruby/object:Gem::Version
|
175
175
|
version: 0.31.0
|
176
176
|
type: :development
|
177
177
|
prerelease: false
|
178
178
|
version_requirements: !ruby/object:Gem::Requirement
|
179
179
|
requirements:
|
180
|
-
- - ~>
|
180
|
+
- - "~>"
|
181
181
|
- !ruby/object:Gem::Version
|
182
182
|
version: 0.31.0
|
183
183
|
description: See homepage for more information.
|
@@ -190,10 +190,10 @@ extensions: []
|
|
190
190
|
extra_rdoc_files:
|
191
191
|
- README.md
|
192
192
|
files:
|
193
|
-
- .gitignore
|
194
|
-
- .hound.yml
|
195
|
-
- .rubocop.yml
|
196
|
-
- .travis.yml
|
193
|
+
- ".gitignore"
|
194
|
+
- ".hound.yml"
|
195
|
+
- ".rubocop.yml"
|
196
|
+
- ".travis.yml"
|
197
197
|
- CHANGELOG.md
|
198
198
|
- Gemfile
|
199
199
|
- MIT_LICENSE
|
@@ -302,6 +302,7 @@ files:
|
|
302
302
|
- test/project/partials/test/front_matter.html.erb
|
303
303
|
- test/project/partials/test/json.json.erb
|
304
304
|
- test/project/partials/test/markdown.md
|
305
|
+
- test/project/partials/test/max_depth.html.erb
|
305
306
|
- test/project/partials/test/recursive.html.erb
|
306
307
|
- test/project/partials/test/simple.html.erb
|
307
308
|
- test/project/partials/test/yield.html.erb
|
@@ -344,22 +345,22 @@ licenses:
|
|
344
345
|
metadata: {}
|
345
346
|
post_install_message:
|
346
347
|
rdoc_options:
|
347
|
-
- --charset=UTF-8
|
348
|
+
- "--charset=UTF-8"
|
348
349
|
require_paths:
|
349
350
|
- lib
|
350
351
|
required_ruby_version: !ruby/object:Gem::Requirement
|
351
352
|
requirements:
|
352
|
-
- -
|
353
|
+
- - ">="
|
353
354
|
- !ruby/object:Gem::Version
|
354
355
|
version: '0'
|
355
356
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
356
357
|
requirements:
|
357
|
-
- -
|
358
|
+
- - ">="
|
358
359
|
- !ruby/object:Gem::Version
|
359
360
|
version: '0'
|
360
361
|
requirements: []
|
361
362
|
rubyforge_project:
|
362
|
-
rubygems_version: 2.
|
363
|
+
rubygems_version: 2.5.1
|
363
364
|
signing_key:
|
364
365
|
specification_version: 4
|
365
366
|
summary: Roger is a set of tools to create self-containing HTML mockups.
|
@@ -407,6 +408,7 @@ test_files:
|
|
407
408
|
- test/project/partials/test/front_matter.html.erb
|
408
409
|
- test/project/partials/test/json.json.erb
|
409
410
|
- test/project/partials/test/markdown.md
|
411
|
+
- test/project/partials/test/max_depth.html.erb
|
410
412
|
- test/project/partials/test/recursive.html.erb
|
411
413
|
- test/project/partials/test/simple.html.erb
|
412
414
|
- test/project/partials/test/yield.html.erb
|