1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
|
= Amrita quick start guide
== 1. hello world
Amrita has two level APIs. This sample shows how to use Amrita's high
level API: Amrita::TemplateFile and Amrita::TemplateText. They both
are derived from Amrita::Template which wraps Amrita's low level
API.
The sample codes in this document use only high level API.
=== HTML template
This is the simplest template for Amrita
:include: sample/hello/template.html
Amrita treats an element with +id+ attribute as a dynamic element and
will get the data for it from model data by +id+ attribute's value as
key.
=== code
This is the code that use the template above and
produce an output to STDOUT.
:include: sample/hello/hello.rb
Amrita::Template mixes template with model data and produces output
html document.
=== output
The output of this code is ...
<html>
<body>
<h1>hello world</h1>
<p>Amrita is a html template library for Ruby</p>
</body>
</html>
The text "hello world" is picked up from model data by the key +title+
and inserted into <tt><h1></tt> which has <tt>id="title"</tt>
attribute. And <tt><p id="body">...</p></tt> was modified in the same
way.
== description
You can use Amrita in these steps.
1. Generate a Amrita::TemplateFile object with the path to template file.
tmpl = TemplateFile.new("template.html")
2. Make a model data for template expansion
data = {
:title => "hello world",
:body => "Amrita is a html template library for Ruby"
}
Model data can be various form but should be fit template's ID
structure. In this case, template has two +id+s and they has value
"title" and "body". So model data must provide data for "title" and
"body".
3. call Amrita::Template#expand
tmpl.expand(STDOUT, data)
The first parameter of +expand+ is the _stream_: amrita will put
the output to it by << method. _stream_ can be IO including File,
or String or Array or any objects that has << method.
---
== 2 list
This sample show how to make iteration with amrita.
To copy a HTML element, mark it and give an Array to it.
=== code and output
code:
:include: sample/hello/list.rb
output:
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
=== description
tmpl = TemplateText.new <<END
<ul>
<li id=list1>
</ul>
END
This example uses Amrita::TemplateText class. This class accepts
template as String instead of File, but can be used in same way to
Amrita::TemplateFile.
data = {
:list1=>[ 1, 2, 3 ]
}
Model data is a Hash who contains an Array as :list1's value. If model
data of some HTML element is an Array (or an Enumerable object),
amrita copies that element and expand each by each element of the
Array.
tmpl.prettyprint = true
tmpl.expand(STDOUT, data)
If prettyprint is set to true, the output is pretty-printed.
---
== 3. table
== code and output
code:
:include: sample/hello/table.rb
output:
<table>
<tr>
<th>name</th>
<th>author</th>
</tr>
<tr>
<td>Ruby</td>
<td>matz</td>
</tr>
<tr>
<td>perl</td>
<td>Larry Wall</td>
</tr>
<tr>
<td>python</td>
<td>Guido van Rossum</td>
</tr>
</table>
=== description
<table border="1">
<tr><th>name</th><th>author</th></tr>
<tr id="table1">
<td id="name"><td id="author">
</tr>
</table>
data = {
:table1=>[
{ :name=>"Ruby", :author=>"matz" },
{ :name=>"perl", :author=>"Larry Wall" },
{ :name=>"python", :author=>"Guido van Rossum" },
]
}
<tt><tr id="table1">...</tr></tt> is copied three times because the
model data for <tt>:table1</tt> is an Array. And for each iteration,
the child elements modified by the data <tt>{ :name=>"...",
:author=>"..." }</tt>
The model data can be complicated object like Array of Hash of Array
of String....
Amrita applys each structure of model data to HTML template's ID
structure recursively. So any HTML can be produced by amrita.
---
== 4. conditional
If model data of some element is +nil+ or +false+, it will be deleted.
Using this, you can select the part of template to be printed.
== code and output
code:
:include: sample/hello/conditional.rb
output:
<html>
<body>
<div>
<h1>Group A</h1>
<div> This group has only one data: "only_one".
</div>
</div>
<div>
<h1>Group B</h1>
<div> Here's the list of this group's data.
<ul>
<li>one</li>
<li>two</li>
<li>three</li>
</ul>
</div>
</div>
<div>
<h1>Group C</h1>
<div>
<em>This group has no data.</em>
</div>
</div>
</body>
</html>
=== description
There are three <tt><div id=...>...</div></tt> parts in this
template. Only one of those will be used. This sample sets only one
key of +no_data+, +one_data+, +many_data+. Hash will be return +nil+
for the key not set.So the part for +nil+ is deleted.
If +true+ was given as model data for some element, it will be printed
unmodified.
---
|