malt 0.1.1 → 0.2.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/History.rdoc +18 -0
- data/README.rdoc +6 -2
- data/lib/malt.rb +9 -0
- data/lib/malt/engines/abstract.rb +7 -7
- data/lib/malt/engines/bluecloth.rb +3 -3
- data/lib/malt/engines/builder.rb +72 -0
- data/lib/malt/engines/erb.rb +2 -0
- data/lib/malt/engines/erector.rb +59 -0
- data/lib/malt/engines/haml.rb +2 -2
- data/lib/malt/engines/kramdown.rb +6 -4
- data/lib/malt/engines/less.rb +8 -8
- data/lib/malt/engines/markaby.rb +51 -0
- data/lib/malt/engines/mustache.rb +44 -0
- data/lib/malt/engines/radius.rb +4 -4
- data/lib/malt/engines/ragtag.rb +49 -0
- data/lib/malt/engines/rdiscount.rb +1 -1
- data/lib/malt/engines/rdoc.rb +3 -3
- data/lib/malt/engines/redcloth.rb +1 -1
- data/lib/malt/engines/sass.rb +8 -8
- data/lib/malt/engines/tenjin.rb +6 -6
- data/lib/malt/formats/abstract.rb +8 -2
- data/lib/malt/formats/builder.rb +56 -0
- data/lib/malt/formats/css.rb +8 -8
- data/lib/malt/formats/erector.rb +53 -0
- data/lib/malt/formats/haml.rb +2 -2
- data/lib/malt/formats/html.rb +3 -3
- data/lib/malt/formats/latex.rb +4 -4
- data/lib/malt/formats/less.rb +5 -5
- data/lib/malt/formats/liquid.rb +11 -1
- data/lib/malt/formats/markaby.rb +53 -0
- data/lib/malt/formats/markdown.rb +6 -6
- data/lib/malt/formats/mustache.rb +34 -0
- data/lib/malt/formats/pdf.rb +2 -2
- data/lib/malt/formats/radius.rb +4 -4
- data/lib/malt/formats/{rtals.rb → ragtag.rb} +13 -9
- data/lib/malt/formats/rdoc.rb +4 -4
- data/lib/malt/formats/ruby.rb +2 -2
- data/lib/malt/formats/sass.rb +10 -0
- data/lib/malt/formats/scss.rb +10 -0
- data/lib/malt/formats/tenjin.rb +4 -4
- data/lib/malt/formats/textile.rb +12 -12
- data/lib/malt/formats/xml.rb +29 -0
- data/lib/malt/formats/yaml.rb +2 -2
- data/lib/malt/meta/data.rb +4 -4
- data/lib/malt/meta/{gemfile → package} +6 -2
- data/lib/malt/render.rb +37 -9
- data/meta/data.rb +4 -4
- data/meta/{gemfile → package} +6 -2
- data/qed/03_formats/08_ragtag.rdoc +19 -0
- data/qed/03_formats/17_markaby.rdoc +50 -0
- data/qed/03_formats/18_builder.rb +50 -0
- data/qed/03_formats/19_erector.rb +50 -0
- data/qed/03_formats/20_mustache.rdoc +54 -0
- data/{test/samples/sample.md → qed/samples/sample.markdown} +0 -0
- data/{test → qed}/samples/sample.rdoc +0 -0
- metadata +81 -12
- data/lib/malt/engines/rtals.rb +0 -46
- data/qed/03_formats/08_rtal.rdoc +0 -15
data/History.rdoc
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
= Release History
|
2
2
|
|
3
|
+
== 0.2.0 | 2010-10-22
|
4
|
+
|
5
|
+
Malt now support Erector, Markaby, Builder and Mustache templates.
|
6
|
+
Erector, Markaby and Builder are Ruby-based formats --templates
|
7
|
+
are simply Ruby code. This requires them to use instance variables
|
8
|
+
in templates rather than local variables/methods. Somethinfg to keep
|
9
|
+
in mind.
|
10
|
+
|
11
|
+
Changes:
|
12
|
+
|
13
|
+
* Add support for Erector templates.
|
14
|
+
* Add support for Markaby templates.
|
15
|
+
* Add support for Builder templates.
|
16
|
+
* Add support for Mustache templates.
|
17
|
+
* Add `:pass` option to render method.
|
18
|
+
* Rename `:format` option to `:to` for render method.
|
19
|
+
|
20
|
+
|
3
21
|
== 0.1.1 | 2010-09-21
|
4
22
|
|
5
23
|
This release simple fixes two bugs. One to handle variant arity
|
data/README.rdoc
CHANGED
@@ -6,8 +6,12 @@
|
|
6
6
|
|
7
7
|
== DESCRIPTION
|
8
8
|
|
9
|
-
Malt provides a factory framework for rendering
|
10
|
-
|
9
|
+
Malt provides a factory framework for rendering a variety of template and
|
10
|
+
markup document formats. Malt has a very object-oriented design
|
11
|
+
utilizing separate engine adapter classes and format classes. This makes
|
12
|
+
Malt easy to maintain, debug and extend, and thus more robust. In fact,
|
13
|
+
Malt supports template caching and ERB compilation by default, which was
|
14
|
+
very easy to implement thanks to it's clean design.
|
11
15
|
|
12
16
|
|
13
17
|
== SYNOPSIS
|
data/lib/malt.rb
CHANGED
@@ -20,6 +20,15 @@ module Malt
|
|
20
20
|
@registry ||= {}
|
21
21
|
end
|
22
22
|
|
23
|
+
#
|
24
|
+
def self.support?(ext)
|
25
|
+
ext = ext.to_s
|
26
|
+
type = ext.sub(/^\./, '').strip
|
27
|
+
return false if type.empty?
|
28
|
+
#@registry.key?(ext.to_sym)
|
29
|
+
#Engine.registry[type.to_sym]
|
30
|
+
Engine.registry.key?(type.to_sym)
|
31
|
+
end
|
23
32
|
|
24
33
|
#
|
25
34
|
def self.file(file, options={})
|
@@ -42,7 +42,7 @@ module Engine
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
#
|
45
|
+
#
|
46
46
|
def initialize(settings={})
|
47
47
|
@settings = settings.rekey
|
48
48
|
|
@@ -53,7 +53,6 @@ module Engine
|
|
53
53
|
end
|
54
54
|
|
55
55
|
# Access to the options given to the initializer.
|
56
|
-
# Returns an OpenStruct object.
|
57
56
|
attr :settings
|
58
57
|
|
59
58
|
#
|
@@ -90,27 +89,28 @@ module Engine
|
|
90
89
|
# Convert a data source into a Binding.
|
91
90
|
# TODO: handle yld.
|
92
91
|
def make_binding(db, &yld)
|
93
|
-
return db if Binding === db
|
92
|
+
return db if Binding === db # FIXME: no yld
|
94
93
|
|
95
94
|
if db.respond_to?(:to_binding)
|
96
|
-
return db.to_binding
|
95
|
+
return db.to_binding(&yld)
|
97
96
|
end
|
98
97
|
|
99
|
-
db = make_object(db)
|
98
|
+
db = make_object(db, &yld)
|
100
99
|
|
101
100
|
return db.instance_eval{ binding }
|
102
101
|
end
|
103
102
|
|
104
103
|
# Convert a data source into an Object (aka a "scope").
|
105
|
-
def make_object(db)
|
104
|
+
def make_object(db, &yld)
|
106
105
|
if db.respond_to?(:to_hash)
|
107
106
|
hash = db.to_hash
|
107
|
+
hash[:yield] = yld.call if yld
|
108
108
|
attrs = hash.keys.map{ |k| k.to_sym }
|
109
109
|
return Struct.new(*attrs).new(*hash.values)
|
110
110
|
end
|
111
111
|
|
112
112
|
if Binding === db
|
113
|
-
eval('self', binding)
|
113
|
+
eval('self', binding) # FIXME: no yld
|
114
114
|
end
|
115
115
|
|
116
116
|
return db
|
@@ -9,9 +9,9 @@ module Malt::Engine
|
|
9
9
|
|
10
10
|
# Convert Markdown text to HTML text.
|
11
11
|
def render(params)
|
12
|
-
text
|
13
|
-
|
14
|
-
case
|
12
|
+
text = params[:text]
|
13
|
+
into = params[:to]
|
14
|
+
case into
|
15
15
|
when :html, nil
|
16
16
|
intermediate(params).to_html
|
17
17
|
else
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engine
|
4
|
+
|
5
|
+
# Builder
|
6
|
+
#
|
7
|
+
# http://builder.rubyforge.org/
|
8
|
+
#
|
9
|
+
class Builder < Abstract
|
10
|
+
|
11
|
+
default :builder
|
12
|
+
|
13
|
+
#
|
14
|
+
#def intermediate(params)
|
15
|
+
#end
|
16
|
+
|
17
|
+
#
|
18
|
+
def render(params, &yld)
|
19
|
+
into = params[:to]
|
20
|
+
case into
|
21
|
+
when :html, nil
|
22
|
+
render_html(params, &yld)
|
23
|
+
else
|
24
|
+
super(params, &yld)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# TODO: Do we need a #make_ivar(data, &yld) method to make data into
|
29
|
+
# instance variables for some templates like this one?
|
30
|
+
def render_html(params={}, &yld)
|
31
|
+
text = params[:text]
|
32
|
+
file = params[:file]
|
33
|
+
data = params[:data]
|
34
|
+
|
35
|
+
data = make_hash(data, &yld)
|
36
|
+
builder = ::Builder::XmlMarkup.new(engine_options(params))
|
37
|
+
data.each{ |k,v| builder.instance_eval("@#{k} = v") }
|
38
|
+
builder.instance_eval(text, file)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# Load Erector library if not already loaded.
|
44
|
+
def initialize_engine
|
45
|
+
return if defined? ::Builder
|
46
|
+
require_library 'builder'
|
47
|
+
end
|
48
|
+
|
49
|
+
# :target=>target_object: Object receiving the markup. target_object must
|
50
|
+
# respond to the <<(a_string) operator and return itself.
|
51
|
+
# The default target is a plain string target.
|
52
|
+
#
|
53
|
+
# :indent=>indentation: Number of spaces used for indentation. The default
|
54
|
+
# is no indentation and no line breaks.
|
55
|
+
#
|
56
|
+
# :margin=>initial_indentation_level: Amount of initial indentation
|
57
|
+
# (specified in levels, not spaces).
|
58
|
+
def engine_options(params)
|
59
|
+
target = params[:target] || settings[:target]
|
60
|
+
indent = params[:indent] || settings[:indent]
|
61
|
+
margin = params[:margin] || settings[:margin]
|
62
|
+
opts = {}
|
63
|
+
opts[:target] = target if target
|
64
|
+
opts[:indent] = indent if indent
|
65
|
+
opts[:margin] = margin if margin
|
66
|
+
opts
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
data/lib/malt/engines/erb.rb
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engine
|
4
|
+
|
5
|
+
# Erector
|
6
|
+
#
|
7
|
+
# http://erector.rubyforge.org/userguide.html
|
8
|
+
#
|
9
|
+
class Erector < Abstract
|
10
|
+
|
11
|
+
default :erector
|
12
|
+
|
13
|
+
#
|
14
|
+
def intermediate(params)
|
15
|
+
text = params[:text]
|
16
|
+
Class.new(::Erector::Widget) do
|
17
|
+
module_eval %{ def content; #{text}; end }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
def render(params, &yld)
|
23
|
+
into = params[:to]
|
24
|
+
case into
|
25
|
+
when :html, nil
|
26
|
+
render_html(params, &yld)
|
27
|
+
else
|
28
|
+
super(params, &yld)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
def render_html(params={}, &yld)
|
34
|
+
#text = params[:text]
|
35
|
+
file = params[:file]
|
36
|
+
data = params[:data]
|
37
|
+
data = make_hash(data, &yld)
|
38
|
+
|
39
|
+
intermediate(params).new(data).to_html
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
# Load Erector library if not already loaded.
|
45
|
+
def initialize_engine
|
46
|
+
return if defined? ::Erector
|
47
|
+
require_library 'erector'
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
def engine_options(params)
|
52
|
+
opts = {}
|
53
|
+
opts
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
data/lib/malt/engines/haml.rb
CHANGED
@@ -13,10 +13,13 @@ module Malt::Engine
|
|
13
13
|
register :markdown, :md
|
14
14
|
|
15
15
|
# Convert Markdown text to HTML text.
|
16
|
+
#
|
17
|
+
# @option params [String] :text Template text
|
18
|
+
# @option params [String,Symbol] :to ('html') Type or file extension to convert template into.
|
16
19
|
def render(params)
|
17
|
-
text
|
18
|
-
|
19
|
-
case
|
20
|
+
text = params[:text]
|
21
|
+
into = params[:to]
|
22
|
+
case into
|
20
23
|
when :html, nil
|
21
24
|
intermediate(params).to_html
|
22
25
|
when :latex
|
@@ -32,7 +35,6 @@ module Malt::Engine
|
|
32
35
|
::Kramdown::Document.new(text)
|
33
36
|
end
|
34
37
|
|
35
|
-
|
36
38
|
private
|
37
39
|
|
38
40
|
# Load rdoc makup library if not already loaded.
|
data/lib/malt/engines/less.rb
CHANGED
@@ -14,9 +14,9 @@ module Malt::Engine
|
|
14
14
|
|
15
15
|
#
|
16
16
|
def render(params)
|
17
|
-
text
|
18
|
-
|
19
|
-
case
|
17
|
+
text = params[:text]
|
18
|
+
into = params[:to]
|
19
|
+
case into
|
20
20
|
when :css, nil
|
21
21
|
intermediate(params).to_css
|
22
22
|
else
|
@@ -37,11 +37,11 @@ module Malt::Engine
|
|
37
37
|
|
38
38
|
private
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
# Load Less library if not already loaded.
|
41
|
+
def initialize_engine
|
42
|
+
return if defined? ::Less::Engine
|
43
|
+
require_library 'less'
|
44
|
+
end
|
45
45
|
|
46
46
|
end
|
47
47
|
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engine
|
4
|
+
|
5
|
+
# Markaby
|
6
|
+
#
|
7
|
+
# http://markaby.rubyforge.org/
|
8
|
+
#
|
9
|
+
class Markaby < Abstract
|
10
|
+
|
11
|
+
default :markaby, :mab
|
12
|
+
|
13
|
+
#
|
14
|
+
#def intermediate(params)
|
15
|
+
# text = params[:text]
|
16
|
+
# eval("lambda{ #{text} }")
|
17
|
+
#end
|
18
|
+
|
19
|
+
#
|
20
|
+
def render(params, &yld)
|
21
|
+
into = params[:to]
|
22
|
+
case into
|
23
|
+
when :html, nil
|
24
|
+
render_html(params, &yld)
|
25
|
+
else
|
26
|
+
super(params, &yld)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
def render_html(params={}, &yld)
|
32
|
+
text = params[:text]
|
33
|
+
file = params[:file]
|
34
|
+
data = params[:data]
|
35
|
+
data = make_hash(data, &yld)
|
36
|
+
builder = ::Markaby::Builder.new(data)
|
37
|
+
builder.instance_eval(text).to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# Load Markaby library if not already loaded.
|
43
|
+
def initialize_engine
|
44
|
+
return if defined? ::Markaby
|
45
|
+
require_library 'markaby'
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engine
|
4
|
+
|
5
|
+
# Mustache engine.
|
6
|
+
#
|
7
|
+
# http://github.com/defunkt/mustache
|
8
|
+
#
|
9
|
+
class Mustache < Abstract
|
10
|
+
|
11
|
+
register :mustache
|
12
|
+
|
13
|
+
## Convert Markdown text to intermediate object.
|
14
|
+
#def intermediate(params)
|
15
|
+
# text = params[:text]
|
16
|
+
# ???
|
17
|
+
#end
|
18
|
+
|
19
|
+
#
|
20
|
+
def render(params={}, &yld) #file, db, &yld)
|
21
|
+
text = params[:text]
|
22
|
+
data = params[:data]
|
23
|
+
|
24
|
+
data = make_hash(data, &yld)
|
25
|
+
|
26
|
+
#engine = intermediate(params)
|
27
|
+
#engine.render(data)
|
28
|
+
::Mustache.render(text, data)
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# Load rdoc makup library if not already loaded.
|
35
|
+
def initialize_engine
|
36
|
+
return if defined? ::Mustache
|
37
|
+
require_library 'mustache'
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
|
data/lib/malt/engines/radius.rb
CHANGED
@@ -12,10 +12,10 @@ module Malt::Engine
|
|
12
12
|
|
13
13
|
#
|
14
14
|
def render(params, &yld)
|
15
|
-
text
|
16
|
-
data
|
17
|
-
|
18
|
-
case
|
15
|
+
text = params[:text]
|
16
|
+
data = params[:data]
|
17
|
+
into = params[:to]
|
18
|
+
case into
|
19
19
|
when :html, :xml, nil
|
20
20
|
data = make_context(data, &yld)
|
21
21
|
opts = engine_options(params)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engine
|
4
|
+
|
5
|
+
# RagTag
|
6
|
+
#
|
7
|
+
# http://github.com/rubyworks/ragtag
|
8
|
+
#
|
9
|
+
class RagTag < Abstract
|
10
|
+
|
11
|
+
default :ragtag, :rt
|
12
|
+
|
13
|
+
#
|
14
|
+
def render(params, &yld)
|
15
|
+
text = params[:text]
|
16
|
+
file = params[:file]
|
17
|
+
data = params[:data]
|
18
|
+
into = params[:to]
|
19
|
+
|
20
|
+
case into
|
21
|
+
when :html, nil
|
22
|
+
data = make_binding(data, &yld)
|
23
|
+
intermediate(params).compile(data).to_xhtml
|
24
|
+
when :xml
|
25
|
+
data = make_binding(data, &yld)
|
26
|
+
intermediate(params).compile(data).to_xml
|
27
|
+
else
|
28
|
+
super(params, &yld)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
def intermediate(params)
|
34
|
+
text = params[:text]
|
35
|
+
::RagTag.new(text)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
# Load Haml library if not already loaded.
|
41
|
+
def initialize_engine
|
42
|
+
return if defined? ::RagTag
|
43
|
+
require_library 'ragtag'
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|