padrino-helpers 0.14.0.2 → 0.14.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/padrino-helpers/output_helpers/haml_handler.rb +28 -12
- data/lib/padrino-helpers/render_helpers.rb +1 -0
- data/lib/padrino/rendering.rb +54 -1
- data/lib/padrino/rendering/erb_template.rb +2 -1
- data/lib/padrino/rendering/erubis_template.rb +1 -0
- data/lib/padrino/rendering/hamlit_template.rb +35 -0
- data/test/test_rendering_extensions.rb +2 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0aedec3da2a6164e6ea901cd5c17d5d96a45ac18
|
4
|
+
data.tar.gz: 23448eb96d10c43b54da803996c142b92aa0dffa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 037c40c71d6f0ef00f9f58ee6c9ffac3dd68b656013ddd7c3ec4dfe01d99f9cfce19653530f924a32d77535223e1cce07e4b4f8a185b920c07e981d2205e832e
|
7
|
+
data.tar.gz: 8ad075ff1b96642c437ba95655299154c621bb5a441c96ef84f6098b2b0614464fd3e637b01fa66ccd73e0e0904446e9fa80723ba702678d394b4461e9748512
|
@@ -1,25 +1,41 @@
|
|
1
1
|
module Padrino
|
2
2
|
module Helpers
|
3
3
|
module OutputHelpers
|
4
|
-
|
5
|
-
|
6
|
-
#
|
7
|
-
class HamlHandler < AbstractHandler
|
4
|
+
# Haml and Hamlit require different detection code
|
5
|
+
if Tilt.template_for('.haml').to_s == "Padrino::Rendering::HamlTemplate"
|
8
6
|
##
|
9
|
-
#
|
7
|
+
# Handler for Haml templates.
|
10
8
|
#
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
class HamlHandler < AbstractHandler
|
10
|
+
##
|
11
|
+
# Returns true if the block is for Haml
|
12
|
+
#
|
13
|
+
def engine_matches?(block)
|
14
|
+
template.block_is_haml?(block)
|
15
|
+
end
|
14
16
|
|
17
|
+
##
|
18
|
+
# Captures the html from a block of template code for this handler.
|
19
|
+
#
|
20
|
+
def capture_from_template(*args, &block)
|
21
|
+
engine_matches?(block) ? template.capture_haml(*args, &block) : yield(*args)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
OutputHelpers.register(:haml, HamlHandler)
|
25
|
+
else
|
15
26
|
##
|
16
|
-
#
|
27
|
+
# Handler for Haml templates.
|
17
28
|
#
|
18
|
-
|
19
|
-
|
29
|
+
class HamlitHandler < AbstractHandler
|
30
|
+
##
|
31
|
+
# Returns true if the block is for Hamlit.
|
32
|
+
#
|
33
|
+
def engine_matches?(block)
|
34
|
+
block.binding.eval('defined? __in_hamlit_template')
|
35
|
+
end
|
20
36
|
end
|
37
|
+
OutputHelpers.register(:haml, HamlitHandler)
|
21
38
|
end
|
22
|
-
OutputHelpers.register(:haml, HamlHandler)
|
23
39
|
end
|
24
40
|
end
|
25
41
|
end
|
@@ -65,6 +65,7 @@ module Padrino
|
|
65
65
|
fail "gem 'tilt' is required" unless defined?(::Tilt)
|
66
66
|
|
67
67
|
def render(engine, file=nil, options={}, locals=nil, &block)
|
68
|
+
options.delete(:layout)
|
68
69
|
engine, file = file, engine if file.nil?
|
69
70
|
template_engine = engine ? ::Tilt[engine] : ::Tilt.default_mapping[file]
|
70
71
|
fail "Engine #{engine.inspect} is not registered with Tilt" unless template_engine
|
data/lib/padrino/rendering.rb
CHANGED
@@ -179,6 +179,50 @@ module Padrino
|
|
179
179
|
|
180
180
|
private
|
181
181
|
|
182
|
+
def render_like_sinatra(engine, data, options={}, locals={}, &block)
|
183
|
+
# merge app-level options
|
184
|
+
engine_options = settings.respond_to?(engine) ? settings.send(engine) : {}
|
185
|
+
options = engine_options.merge(options)
|
186
|
+
|
187
|
+
# extract generic options
|
188
|
+
locals = options.delete(:locals) || locals || {}
|
189
|
+
views = options.delete(:views) || settings.views || "./views"
|
190
|
+
layout = options[:layout]
|
191
|
+
layout = false if layout.nil? && options.include?(:layout)
|
192
|
+
eat_errors = layout.nil?
|
193
|
+
layout = engine_options[:layout] if layout.nil? or (layout == true && engine_options[:layout] != false)
|
194
|
+
layout = @default_layout if layout.nil? or layout == true
|
195
|
+
layout_options = options.delete(:layout_options) || {}
|
196
|
+
content_type = options.delete(:default_content_type)
|
197
|
+
content_type = options.delete(:content_type) || content_type
|
198
|
+
layout_engine = options.delete(:layout_engine) || engine
|
199
|
+
scope = options.delete(:scope) || self
|
200
|
+
options.delete(:layout)
|
201
|
+
|
202
|
+
# set some defaults
|
203
|
+
options[:default_encoding] ||= settings.default_encoding
|
204
|
+
|
205
|
+
# compile and render template
|
206
|
+
begin
|
207
|
+
layout_was = @default_layout
|
208
|
+
@default_layout = false
|
209
|
+
template = compile_template(engine, data, options, views)
|
210
|
+
output = template.render(scope, locals, &block)
|
211
|
+
ensure
|
212
|
+
@default_layout = layout_was
|
213
|
+
end
|
214
|
+
|
215
|
+
# render layout
|
216
|
+
if layout
|
217
|
+
layout_engine_options = settings.respond_to?(layout_engine) ? settings.send(layout_engine).dup : {}
|
218
|
+
options = layout_engine_options.update(:views => views, :layout => false, :eat_errors => eat_errors, :scope => scope).update(layout_options)
|
219
|
+
catch(:layout_missing) { return render_like_sinatra(layout_engine, layout, options, locals) { output } }
|
220
|
+
end
|
221
|
+
|
222
|
+
output.extend(Sinatra::Base::ContentTyped).content_type = content_type if content_type
|
223
|
+
output
|
224
|
+
end
|
225
|
+
|
182
226
|
##
|
183
227
|
# Enhancing Sinatra render functionality for:
|
184
228
|
#
|
@@ -210,7 +254,7 @@ module Padrino
|
|
210
254
|
@_out_buf, buf_was = SafeBuffer.new, @_out_buf
|
211
255
|
|
212
256
|
# Pass arguments to Sinatra render method.
|
213
|
-
|
257
|
+
render_like_sinatra(engine, data, with_layout(options), locals, &block)
|
214
258
|
ensure
|
215
259
|
@current_engine = engine_was
|
216
260
|
@_out_buf = buf_was
|
@@ -365,6 +409,15 @@ unless defined? Padrino::Rendering::HamlTemplate
|
|
365
409
|
end
|
366
410
|
end
|
367
411
|
|
412
|
+
unless defined? Padrino::Rendering::HamlitTemplate
|
413
|
+
begin
|
414
|
+
require 'hamlit'
|
415
|
+
rescue LoadError
|
416
|
+
else
|
417
|
+
require 'padrino/rendering/hamlit_template'
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
368
421
|
unless defined? Padrino::Rendering::ErubisTemplate
|
369
422
|
begin
|
370
423
|
require 'erubis'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Padrino
|
2
|
+
module Rendering
|
3
|
+
class HamlitOutputBuffer < Temple::Generators::StringBuffer
|
4
|
+
define_options :buffer_class => 'SafeBuffer'
|
5
|
+
|
6
|
+
def call(exp)
|
7
|
+
[preamble, compile(exp), postamble].flatten.compact.join('; '.freeze)
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_buffer
|
11
|
+
"#{buffer} = #{options[:buffer_class]}.new"
|
12
|
+
end
|
13
|
+
|
14
|
+
def concat(str)
|
15
|
+
"#{buffer}.safe_concat((#{str}))"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class HamlitTemplate < Hamlit::Template
|
20
|
+
include SafeTemplate
|
21
|
+
|
22
|
+
def precompiled_preamble(locals)
|
23
|
+
"__in_hamlit_template = true\n" << super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
Tilt.prefer(Padrino::Rendering::HamlitTemplate, :haml)
|
30
|
+
|
31
|
+
Padrino::Rendering.engine_configurations[:haml] = {
|
32
|
+
:generator => Padrino::Rendering::HamlitOutputBuffer,
|
33
|
+
:buffer => "@_out_buf",
|
34
|
+
:use_html_safe => true,
|
35
|
+
}
|
@@ -3,6 +3,8 @@ require File.expand_path(File.dirname(__FILE__) + '/helper')
|
|
3
3
|
describe "Rendering Extensions" do
|
4
4
|
describe 'for haml' do
|
5
5
|
it 'should render haml_tag correctly' do
|
6
|
+
skip unless Padrino::Helpers::OutputHelpers.handlers[:haml].to_s == "Padrino::Helpers::OutputHelpers::HamlHandler"
|
7
|
+
|
6
8
|
mock_app do
|
7
9
|
get('/') { render :haml, '-haml_tag :div'}
|
8
10
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: padrino-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Padrino Team
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2017-05-
|
14
|
+
date: 2017-05-16 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: padrino-support
|
@@ -19,14 +19,14 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.14.
|
22
|
+
version: 0.14.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.14.
|
29
|
+
version: 0.14.1
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: tilt
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,6 +126,7 @@ files:
|
|
126
126
|
- lib/padrino/rendering/erubi_template.rb
|
127
127
|
- lib/padrino/rendering/erubis_template.rb
|
128
128
|
- lib/padrino/rendering/haml_template.rb
|
129
|
+
- lib/padrino/rendering/hamlit_template.rb
|
129
130
|
- lib/padrino/rendering/slim_template.rb
|
130
131
|
- lib/padrino/safe_buffer.rb
|
131
132
|
- padrino-helpers.gemspec
|