malt 0.3.0 → 0.4.0
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.
- data/.ruby +156 -0
- data/Assembly +28 -0
- data/COPYING.rdoc +33 -0
- data/Gemfile +10 -0
- data/HISTORY.rdoc +102 -0
- data/README.rdoc +16 -10
- data/Reapfile +4 -0
- data/lib/malt.rb +36 -8
- data/lib/malt.yml +156 -0
- data/lib/malt/conversions.rb +42 -0
- data/lib/malt/core_ext.rb +81 -3
- data/lib/malt/engines/abstract.rb +259 -50
- data/lib/malt/engines/bluecloth.rb +19 -9
- data/lib/malt/engines/builder.rb +93 -32
- data/lib/malt/engines/coffee.rb +46 -0
- data/lib/malt/engines/creole.rb +60 -0
- data/lib/malt/engines/erb.rb +69 -44
- data/lib/malt/engines/erector.rb +61 -30
- data/lib/malt/engines/erubis.rb +41 -31
- data/lib/malt/engines/haml.rb +13 -37
- data/lib/malt/engines/kramdown.rb +40 -15
- data/lib/malt/engines/less.rb +15 -14
- data/lib/malt/engines/liquid.rb +24 -14
- data/lib/malt/engines/markaby.rb +44 -22
- data/lib/malt/engines/maruku.rb +89 -0
- data/lib/malt/engines/mustache.rb +20 -14
- data/lib/malt/engines/nokogiri.rb +89 -0
- data/lib/malt/engines/radius.rb +72 -34
- data/lib/malt/engines/ragtag.rb +26 -18
- data/lib/malt/engines/rdiscount.rb +18 -11
- data/lib/malt/engines/rdoc.rb +21 -15
- data/lib/malt/engines/redcarpet.rb +137 -0
- data/lib/malt/engines/redcloth.rb +15 -7
- data/lib/malt/engines/ruby.rb +13 -12
- data/lib/malt/engines/sass.rb +30 -17
- data/lib/malt/engines/string.rb +36 -0
- data/lib/malt/engines/tenjin.rb +70 -27
- data/lib/malt/engines/wikicloth.rb +48 -0
- data/lib/malt/formats/abstract.rb +90 -29
- data/lib/malt/formats/abstract_template.rb +10 -8
- data/lib/malt/formats/builder.rb +39 -13
- data/lib/malt/formats/coffee.rb +54 -0
- data/lib/malt/formats/css.rb +3 -3
- data/lib/malt/formats/erb.rb +31 -66
- data/lib/malt/formats/haml.rb +8 -8
- data/lib/malt/formats/html.rb +1 -7
- data/lib/malt/formats/javascript.rb +27 -0
- data/lib/malt/formats/latex.rb +1 -1
- data/lib/malt/formats/less.rb +13 -11
- data/lib/malt/formats/liquid.rb +7 -7
- data/lib/malt/formats/markdown.rb +43 -44
- data/lib/malt/formats/mediawiki.rb +70 -0
- data/lib/malt/formats/mustache.rb +5 -5
- data/lib/malt/formats/pdf.rb +1 -7
- data/lib/malt/formats/radius.rb +5 -4
- data/lib/malt/formats/ragtag.rb +14 -13
- data/lib/malt/formats/rbhtml.rb +28 -20
- data/lib/malt/formats/rdoc.rb +5 -4
- data/lib/malt/formats/rhtml.rb +19 -43
- data/lib/malt/formats/ruby.rb +11 -45
- data/lib/malt/formats/sass.rb +16 -24
- data/lib/malt/formats/scss.rb +13 -30
- data/lib/malt/formats/string.rb +61 -0
- data/lib/malt/formats/tenjin.rb +4 -4
- data/lib/malt/formats/text.rb +1 -1
- data/lib/malt/formats/textile.rb +7 -19
- data/lib/malt/kernel.rb +1 -2
- data/lib/malt/machine.rb +83 -13
- data/lib/malt/tilted.rb +216 -0
- data/lib/malt/version.rb +21 -0
- data/test/helper.rb +15 -0
- data/test/unit/engines/case_engine_bluecloth.rb +40 -0
- data/test/unit/engines/case_engine_builder.rb +30 -0
- data/test/unit/engines/case_engine_coffee.rb +30 -0
- data/test/unit/engines/case_engine_creole.rb +35 -0
- data/test/unit/engines/case_engine_erb.rb +28 -0
- data/test/unit/engines/case_engine_erector.rb +36 -0
- data/test/unit/engines/case_engine_erubis.rb +28 -0
- data/test/unit/engines/case_engine_haml.rb +30 -0
- data/test/unit/engines/case_engine_kramdown.rb +30 -0
- data/test/unit/engines/case_engine_less.rb +40 -0
- data/test/unit/engines/case_engine_liquid.rb +28 -0
- data/test/unit/engines/case_engine_markaby.rb +20 -0
- data/test/unit/engines/case_engine_maruku.rb +30 -0
- data/test/unit/engines/case_engine_mustache.rb +28 -0
- data/test/unit/engines/case_engine_nokogiri.rb +30 -0
- data/test/unit/engines/case_engine_radius.rb +30 -0
- data/test/unit/engines/case_engine_ragtag.rb +40 -0
- data/test/unit/engines/case_engine_rdiscount.rb +30 -0
- data/test/unit/engines/case_engine_rdoc.rb +31 -0
- data/test/unit/engines/case_engine_redcarpet.rb +30 -0
- data/test/unit/engines/case_engine_redcloth.rb +31 -0
- data/test/unit/engines/case_engine_ruby.rb +28 -0
- data/test/unit/engines/case_engine_sass.rb +36 -0
- data/test/unit/engines/case_engine_string.rb +28 -0
- data/test/unit/engines/case_engine_tenjin.rb +28 -0
- data/test/unit/engines/case_engine_wikicloth.rb +25 -0
- data/test/unit/machine.rb +27 -0
- data/test/unit/malt.rb +12 -0
- metadata +364 -266
- data/History.rdoc +0 -64
- data/License.txt +0 -205
- data/Syckfile +0 -80
- data/features/consistent_rendering.feature +0 -36
- data/features/samples/sample.erb +0 -1
- data/features/samples/sample.erubis +0 -1
- data/features/samples/sample.liquid +0 -1
- data/features/samples/sample.mustache +0 -1
- data/features/samples/sample.radius +0 -1
- data/features/step_definitions/engine_steps.rb +0 -49
- data/features/support/loadpath.rb +0 -1
- data/features/support/sample_class.rb +0 -8
- data/lib/malt/formats/erector.rb +0 -53
- data/lib/malt/formats/markaby.rb +0 -53
- data/lib/malt/meta/data.rb +0 -26
- data/lib/malt/meta/package +0 -21
- data/lib/malt/meta/profile +0 -21
- data/meta/data.rb +0 -26
- data/meta/package +0 -21
- data/meta/profile +0 -21
- data/qed/01_overview.rdoc +0 -8
- data/qed/02_formats.rdoc +0 -39
- data/qed/03_formats/01_overview.rdoc +0 -7
- data/qed/03_formats/02_rdoc.rdoc +0 -83
- data/qed/03_formats/03_textile.rdoc +0 -48
- data/qed/03_formats/04_markdown.rdoc +0 -66
- data/qed/03_formats/05_erb.rdoc +0 -65
- data/qed/03_formats/06_liquid.rdoc +0 -54
- data/qed/03_formats/07_haml.rdoc +0 -44
- data/qed/03_formats/08_ragtag.rdoc +0 -19
- data/qed/03_formats/09_radius.rdoc +0 -43
- data/qed/03_formats/11_tenjin.rdoc +0 -47
- data/qed/03_formats/12_rbhtml.rdoc +0 -55
- data/qed/03_formats/13_sass.rdoc +0 -55
- data/qed/03_formats/14_scss.rdoc +0 -58
- data/qed/03_formats/15_less.rdoc +0 -46
- data/qed/03_formats/16_ruby.rdoc +0 -48
- data/qed/03_formats/17_markaby.rdoc +0 -50
- data/qed/03_formats/18_builder.rb +0 -50
- data/qed/03_formats/19_erector.rb +0 -50
- data/qed/03_formats/20_mustache.rdoc +0 -54
- data/qed/05_machine/01_limited_formats.rdoc +0 -29
- data/qed/05_machine/02_prioritized_engines.rdoc +0 -34
- data/qed/applique/malt.rb +0 -13
- data/qed/samples/data.yml +0 -4
- data/qed/samples/output-erb.txt +0 -1
- data/qed/samples/output-liquid.txt +0 -1
- data/qed/samples/output-mustache.txt +0 -1
- data/qed/samples/output-radius.txt +0 -1
- data/qed/samples/sample.erb +0 -1
- data/qed/samples/sample.liquid +0 -1
- data/qed/samples/sample.markdown +0 -308
- data/qed/samples/sample.mustache +0 -1
- data/qed/samples/sample.radius +0 -1
- data/qed/samples/sample.rdoc +0 -8
data/lib/malt/engines/markaby.rb
CHANGED
@@ -4,43 +4,66 @@ module Malt::Engine
|
|
4
4
|
|
5
5
|
# Markaby
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# @see http://markaby.rubyforge.org/
|
8
8
|
#
|
9
|
+
# Markaby doesn't support template caching b/c the the initializer
|
10
|
+
# takes the local variable settings.
|
11
|
+
#
|
9
12
|
class Markaby < Abstract
|
10
13
|
|
11
|
-
default
|
14
|
+
default :markaby, :mab
|
15
|
+
register :rbml, :builder
|
12
16
|
|
13
17
|
#
|
14
|
-
|
15
|
-
|
16
|
-
# eval("lambda{ #{text} }")
|
17
|
-
#end
|
18
|
+
def render(params={}, &content)
|
19
|
+
into = parameters(params, :to) || :html
|
18
20
|
|
19
|
-
#
|
20
|
-
def render(params, &yld)
|
21
|
-
into = params[:to]
|
22
21
|
case into
|
23
|
-
when :html,
|
24
|
-
|
22
|
+
when :html, :xml, :xhtml
|
23
|
+
prepare_engine(params, &content).to_s
|
25
24
|
else
|
26
|
-
super(params, &
|
25
|
+
super(params, &content)
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
29
|
+
# TODO: Prefix support ?
|
30
|
+
|
30
31
|
#
|
31
|
-
def
|
32
|
-
text = params
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
32
|
+
def prepare_engine(params={}, &content)
|
33
|
+
prefix, text, file, scope, locals, prefix = parameters(params, :prefix, :text, :file, :scope, :locals)
|
34
|
+
|
35
|
+
file = file || "(markaby)"
|
36
|
+
|
37
|
+
if prefix
|
38
|
+
raise NotImplmentedError, "Markaby doesn't support prefix templates."
|
39
|
+
#scope, locals = scope_and_locals(data, &content)
|
40
|
+
#scope, locals = split_data(data)
|
41
|
+
|
42
|
+
scope ||= Object.new
|
43
|
+
locals ||= {}
|
44
|
+
|
45
|
+
mab = ::Markaby::Builder.new(locals) #, scope)
|
46
|
+
|
47
|
+
code = %{
|
48
|
+
lambda do |#{prefix}|
|
49
|
+
#{text}
|
50
|
+
end
|
51
|
+
}
|
52
|
+
|
53
|
+
eval(code, scope.to_binding, file).call(mab)
|
54
|
+
else
|
55
|
+
scope, locals = make_external(scope, locals, &content)
|
56
|
+
|
57
|
+
mab = ::Markaby::Builder.new(locals, scope)
|
58
|
+
mab.instance_eval(text, file)
|
59
|
+
mab
|
60
|
+
end
|
38
61
|
end
|
39
62
|
|
40
|
-
|
63
|
+
private
|
41
64
|
|
42
65
|
# Load Markaby library if not already loaded.
|
43
|
-
def
|
66
|
+
def require_engine
|
44
67
|
return if defined? ::Markaby
|
45
68
|
require_library 'markaby'
|
46
69
|
end
|
@@ -48,4 +71,3 @@ module Malt::Engine
|
|
48
71
|
end
|
49
72
|
|
50
73
|
end
|
51
|
-
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engine
|
4
|
+
|
5
|
+
# Redcarpet Markdown implementation.
|
6
|
+
#
|
7
|
+
# http://maruku.rubyforge.org/
|
8
|
+
#
|
9
|
+
class Maruku < Abstract
|
10
|
+
|
11
|
+
register :markdown, :md
|
12
|
+
|
13
|
+
# Convert Markdown text to HTML text.
|
14
|
+
#
|
15
|
+
# @param [Hash] params
|
16
|
+
#
|
17
|
+
# @option params [String] :text
|
18
|
+
# Template text
|
19
|
+
#
|
20
|
+
# @option params [String,Symbol] :to ('html')
|
21
|
+
# Type or file extension to convert template into.
|
22
|
+
#
|
23
|
+
def render(params={})
|
24
|
+
into, text, part = parameters(params, :to, :text, :partial)
|
25
|
+
|
26
|
+
engine = prepare_engine(params)
|
27
|
+
|
28
|
+
case into
|
29
|
+
when :html, nil
|
30
|
+
if part
|
31
|
+
engine.to_html
|
32
|
+
else
|
33
|
+
engine.to_html_document
|
34
|
+
end
|
35
|
+
when :latex #, :pdf
|
36
|
+
if part
|
37
|
+
engine.to_latex
|
38
|
+
else
|
39
|
+
engine.to_latex_document
|
40
|
+
end
|
41
|
+
else
|
42
|
+
super(params)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Convert Markdown text to intermediate object.
|
47
|
+
#
|
48
|
+
# @param [Hash] params
|
49
|
+
# A hash containing the Markdown extensions which the parser
|
50
|
+
# will identify. The following extensions are accepted.
|
51
|
+
#
|
52
|
+
# @option params [Symbol] :on_error
|
53
|
+
# If :raise, then raise error.
|
54
|
+
#
|
55
|
+
def create_engine(params={})
|
56
|
+
text = parameters(params, :text)
|
57
|
+
opts = engine_options(params)
|
58
|
+
|
59
|
+
::Maruku.new(text, opts)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Supported engine options.
|
65
|
+
#
|
66
|
+
# @todo Add more options.
|
67
|
+
#
|
68
|
+
# @see http://maruku.rubyforge.org/exd.html
|
69
|
+
#
|
70
|
+
ENGINE_OPTION_NAMES = %w{
|
71
|
+
math_enabled
|
72
|
+
}
|
73
|
+
|
74
|
+
# Load rdoc makup library if not already loaded.
|
75
|
+
def require_engine
|
76
|
+
return if defined? ::Maruku
|
77
|
+
require_library 'maruku'
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
def engine_option_names
|
82
|
+
ENGINE_OPTION_NAMES
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|
@@ -4,35 +4,41 @@ module Malt::Engine
|
|
4
4
|
|
5
5
|
# Mustache engine.
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# @see http://github.com/defunkt/mustache
|
8
8
|
#
|
9
9
|
class Mustache < Abstract
|
10
10
|
|
11
11
|
register :mustache
|
12
12
|
|
13
|
-
## Convert Markdown text to intermediate object.
|
14
|
-
#def intermediate(params)
|
15
|
-
# text = params[:text]
|
16
|
-
# ???
|
17
|
-
#end
|
18
|
-
|
19
13
|
#
|
20
|
-
def render(params={}, &
|
21
|
-
text = params
|
22
|
-
|
14
|
+
def render(params={}, &content) #file, db, &content)
|
15
|
+
text, scope, locals = parameters(params, :text, :scope, :locals)
|
16
|
+
|
17
|
+
locals = make_hash(scope, locals, &content)
|
23
18
|
|
24
|
-
|
19
|
+
# convert symbol keys to strings w/o rewriting the hash
|
20
|
+
symbol_keys = locals.keys.select{ |k| Symbol === k }
|
21
|
+
symbol_keys.each do |k|
|
22
|
+
locals[k.to_s] = locals[k]
|
23
|
+
locals.delete(k)
|
24
|
+
end
|
25
25
|
|
26
26
|
#engine = intermediate(params)
|
27
27
|
#engine.render(data)
|
28
|
-
|
28
|
+
|
29
|
+
::Mustache.render(text, locals)
|
29
30
|
end
|
30
31
|
|
32
|
+
#
|
33
|
+
#def intermediate(params)
|
34
|
+
# text = parameters(params, :text)
|
35
|
+
# ???
|
36
|
+
#end
|
31
37
|
|
32
|
-
|
38
|
+
private
|
33
39
|
|
34
40
|
# Load rdoc makup library if not already loaded.
|
35
|
-
def
|
41
|
+
def require_engine
|
36
42
|
return if defined? ::Mustache
|
37
43
|
require_library 'mustache'
|
38
44
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engine
|
4
|
+
|
5
|
+
# Nokogiri builder-like templates.
|
6
|
+
#
|
7
|
+
# @see http://nokogiri.org/
|
8
|
+
|
9
|
+
class Nokogiri < Abstract
|
10
|
+
|
11
|
+
default :nokogiri
|
12
|
+
register :rbml, :builder
|
13
|
+
|
14
|
+
#
|
15
|
+
DOCUMENT_HEADER_XML = /^<\?xml version=\"1\.0\"\?>\n?/
|
16
|
+
|
17
|
+
#
|
18
|
+
DOCUMENT_HEADER_HTML = /^<\!DOCTYPE html PUBLIC \".*?\">/
|
19
|
+
|
20
|
+
#
|
21
|
+
def render(params={}, &content)
|
22
|
+
into = parameters(params, :to) || :html
|
23
|
+
|
24
|
+
case into.to_sym
|
25
|
+
when :html
|
26
|
+
prepare_engine(params, &content).to_html.sub(DOCUMENT_HEADER_HTML,'')
|
27
|
+
when :xml, :xhtml
|
28
|
+
prepare_engine(params, &content).to_xml.sub(DOCUMENT_HEADER_XML,'')
|
29
|
+
else
|
30
|
+
super(params, &content)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
def prepare_engine(params={}, &content)
|
36
|
+
text, file, scope, locals = parameters(params, :text, :file, :scope, :locals)
|
37
|
+
|
38
|
+
scope, locals = make_external(scope, locals, &content)
|
39
|
+
|
40
|
+
engine = create_engine(params)
|
41
|
+
|
42
|
+
locals.each do |k,v|
|
43
|
+
engine.instance_eval("@#{k} = v")
|
44
|
+
end
|
45
|
+
|
46
|
+
scope.instance_variables.each do |k|
|
47
|
+
next if k == "@target"
|
48
|
+
v = scope.instance_variable_get(k)
|
49
|
+
engine.instance_eval("#{k} = v")
|
50
|
+
end
|
51
|
+
|
52
|
+
engine.instance_eval(text, file || inspect)
|
53
|
+
|
54
|
+
engine
|
55
|
+
end
|
56
|
+
|
57
|
+
# Nokogiri engine cannot be cached as it keeps a copy the
|
58
|
+
# rendering internally. (Unless there is a way to clear it?)
|
59
|
+
#
|
60
|
+
def create_engine(params={})
|
61
|
+
into = parameters(params, :to) || :html
|
62
|
+
|
63
|
+
opts = engine_options(params)
|
64
|
+
|
65
|
+
#cached(into, opts) do
|
66
|
+
case into
|
67
|
+
when :html
|
68
|
+
::Nokogiri::HTML::Builder.new(opts)
|
69
|
+
else
|
70
|
+
::Nokogiri::XML::Builder.new(opts)
|
71
|
+
end
|
72
|
+
#end
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
# Load Nokogiri library if not already loaded.
|
78
|
+
def require_engine
|
79
|
+
return if defined? ::Nokogiri
|
80
|
+
require_library 'nokogiri'
|
81
|
+
|
82
|
+
::Nokogiri::XML::Builder.class_eval do
|
83
|
+
undef_method :p
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
data/lib/malt/engines/radius.rb
CHANGED
@@ -11,69 +11,107 @@ module Malt::Engine
|
|
11
11
|
default :radius
|
12
12
|
|
13
13
|
#
|
14
|
-
def render(params, &
|
15
|
-
text = params
|
16
|
-
|
17
|
-
into = params[:to]
|
14
|
+
def render(params={}, &content)
|
15
|
+
into, text = parameters(params, :to, :text)
|
16
|
+
|
18
17
|
case into
|
19
18
|
when :html, :xml, nil
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
context = prepare_engine(params, &content)
|
20
|
+
options = engine_options(params)
|
21
|
+
|
22
|
+
parser = ::Radius::Parser.new(context, options)
|
23
23
|
parser.parse(text)
|
24
24
|
else
|
25
|
-
super(params, &
|
25
|
+
super(params, &content)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
#
|
30
|
+
def prepare_engine(params={}, &content)
|
31
|
+
scope, locals = parameters(params, :scope, :locals)
|
32
|
+
|
33
|
+
locals ||= {}
|
34
|
+
|
35
|
+
# convert string keys to symbols w/o rewriting the hash
|
36
|
+
string_keys = locals.keys.select{ |k| String === k }
|
37
|
+
string_keys.each do |k|
|
38
|
+
locals[k.to_sym] = locals[k]
|
39
|
+
locals.delete(k)
|
40
|
+
end
|
41
|
+
|
42
|
+
make_context(scope, locals, &content)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
30
46
|
|
31
47
|
# Load Radius library if not already loaded.
|
32
|
-
def
|
48
|
+
def require_engine
|
33
49
|
return if defined? ::Radius
|
34
50
|
require_library 'radius'
|
35
51
|
end
|
36
52
|
|
37
53
|
# Radius templates have a very special data source.
|
38
|
-
def make_context(
|
39
|
-
case
|
40
|
-
when
|
41
|
-
context = make_context_from_hash(
|
54
|
+
def make_context(scope, locals, &content)
|
55
|
+
case scope
|
56
|
+
when nil
|
57
|
+
context = make_context_from_hash(locals, &content)
|
58
|
+
when Binding
|
59
|
+
context = make_context_from_binding(scope, locals, &content)
|
42
60
|
else
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
61
|
+
context = make_context_from_object(scope, locals, &content)
|
62
|
+
end
|
63
|
+
context
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
def make_context_from_binding(scope, locals, &content)
|
68
|
+
context_class = Class.new(::Radius::Context)
|
69
|
+
context_class.class_eval do
|
70
|
+
define_method :tag_missing do |tag, attr|
|
71
|
+
if locals.key?(tag.to_sym)
|
72
|
+
locals[tag.to_sym]
|
73
|
+
else
|
74
|
+
scope.eval(tag)
|
75
|
+
end
|
48
76
|
end
|
49
77
|
end
|
78
|
+
context = context_class.new
|
79
|
+
context.define_tag("content") do
|
80
|
+
content ? content.call : ''
|
81
|
+
end
|
50
82
|
context
|
51
83
|
end
|
52
84
|
|
53
85
|
#
|
54
|
-
def make_context_from_object(
|
55
|
-
|
56
|
-
|
57
|
-
(class << context; self; end).class_eval do
|
86
|
+
def make_context_from_object(scope, locals, &content)
|
87
|
+
context_class = Class.new(::Radius::Context)
|
88
|
+
context_class.class_eval do
|
58
89
|
define_method :tag_missing do |tag, attr|
|
59
|
-
|
90
|
+
if locals.key?(tag.to_sym)
|
91
|
+
locals[tag.to_sym]
|
92
|
+
else
|
93
|
+
scope.__send__(tag) # any way to support attr as args?
|
94
|
+
end
|
60
95
|
end
|
61
96
|
end
|
62
|
-
context.
|
63
|
-
|
97
|
+
context = context_class.new
|
98
|
+
context.define_tag("content") do
|
99
|
+
content ? content.call : ''
|
64
100
|
end
|
65
101
|
context
|
66
102
|
end
|
67
103
|
|
68
104
|
#
|
69
|
-
def make_context_from_hash(
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
105
|
+
def make_context_from_hash(locals, &content)
|
106
|
+
context_class = Class.new(::Radius::Context)
|
107
|
+
context_class.class_eval do
|
108
|
+
define_method :tag_missing do |tag, attr|
|
109
|
+
locals[tag.to_sym]
|
110
|
+
end
|
74
111
|
end
|
75
|
-
context.
|
76
|
-
|
112
|
+
context = context_class.new
|
113
|
+
context.define_tag("content") do
|
114
|
+
content ? content.call : ''
|
77
115
|
end
|
78
116
|
context
|
79
117
|
end
|
@@ -81,7 +119,7 @@ module Malt::Engine
|
|
81
119
|
#
|
82
120
|
def engine_options(params)
|
83
121
|
opts = {}
|
84
|
-
opts[:tag_prefix] = params[:tag_prefix] || settings[:tag_prefix]
|
122
|
+
opts[:tag_prefix] = params[:tag_prefix] || settings[:tag_prefix] #|| 'r'
|
85
123
|
opts
|
86
124
|
end
|
87
125
|
|