padrino-helpers 0.14.0.2 → 0.14.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|