ember 0.0.0 → 0.0.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.
- data/bin/ember +2 -2
- data/doc/api/apple-touch-icon.png +0 -0
- data/doc/api/classes/Ember/Template.html +27 -10
- data/doc/api/classes/Ember/Template/Program.html +0 -437
- data/doc/api/created.rid +1 -1
- data/doc/api/favicon.ico +0 -0
- data/doc/api/files/LICENSE.html +1 -1
- data/doc/api/files/lib/ember/template_rb.html +1 -1
- data/doc/api/files/lib/ember_rb.html +1 -1
- data/doc/api/js/searchdoc.js +38 -15
- data/doc/api/panel/index.html +13 -5
- data/doc/api/panel/search_index.js +1 -1
- data/doc/api/panel/tree.js +1 -1
- data/doc/ember.png +0 -0
- data/doc/ember.svg +784 -0
- data/doc/history.erb +27 -2
- data/doc/index.erb +2 -2
- data/doc/index.html +1624 -0
- data/doc/intro.erb +34 -60
- data/doc/setup.erb +51 -2
- data/doc/usage.erb +34 -3
- data/lib/ember.rb +5 -5
- data/lib/ember/template.rb +33 -23
- data/rakefile +2 -2
- metadata +12 -6
- data/doc/index.xhtml +0 -758
data/doc/intro.erb
CHANGED
@@ -1,15 +1,31 @@
|
|
1
1
|
%#--
|
2
|
-
%# Copyright
|
3
|
-
%# See
|
2
|
+
%# Copyright protects this work.
|
3
|
+
%# See LICENSE file for details.
|
4
4
|
%#++
|
5
5
|
|
6
6
|
% api_url = './api/index.html'
|
7
|
-
%
|
8
|
-
%
|
7
|
+
% src_url = 'http://github.com/sunaku/' + $program
|
8
|
+
% src_scm = '[Git](http://git-scm.com)'
|
9
|
+
|
9
10
|
|
10
11
|
%|chapter "Introduction"
|
12
|
+
|
13
|
+
|
11
14
|
%|project
|
12
|
-
|
15
|
+
|
16
|
+
<%= $project %> is an [eRuby template](http://en.wikipedia.org/wiki/ERuby) processsor that allows debugging, reduces markup, and improves composability of eRuby templates.
|
17
|
+
|
18
|
+
|
19
|
+
* <%= xref "History", "What's new?" %> --- history of project releases.
|
20
|
+
* [Source code](<%= src_url %>) --- obtain via <%= src_scm %> or browse online.
|
21
|
+
* [API reference](<%= api_url %>) --- documentation for source code.
|
22
|
+
* [Project home](<%= $website %>) --- the <%= $project %> project home page.
|
23
|
+
|
24
|
+
To get help or provide feedback, simply
|
25
|
+
<%= xref "License", "contact the author(s)" %>.
|
26
|
+
|
27
|
+
|
28
|
+
%|section "Features"
|
13
29
|
|
14
30
|
<%= $project %> is exciting because:
|
15
31
|
* It reports correct line numbers in stack traces.
|
@@ -18,62 +34,20 @@
|
|
18
34
|
* It completely silences code-only eRuby directives.
|
19
35
|
* It is implemented in <%= `sloccount lib`[/^\d+/] %> lines of pure Ruby.
|
20
36
|
|
21
|
-
|
37
|
+
|
38
|
+
%|section "Etymology"
|
39
|
+
|
40
|
+
<%= $project %> stands for *embe*dded *r*uby.
|
41
|
+
|
42
|
+
|
43
|
+
%|section "License"
|
44
|
+
|
45
|
+
%< "../LICENSE"
|
46
|
+
|
47
|
+
|
48
|
+
%|section "Related works"
|
49
|
+
|
22
50
|
* [Erubis](http://www.kuwata-lab.com/erubis/)
|
23
51
|
* [eruby](http://modruby.net/en/)
|
24
52
|
* [ERB](http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/)
|
25
53
|
|
26
|
-
%|paragraph "Etymology"
|
27
|
-
<%= $project %> stands for *embe*dded *r*uby.
|
28
|
-
|
29
|
-
%|section "Logistics"
|
30
|
-
* <%= xref "History", "Release notes" %> --- history of project releases.
|
31
|
-
* [Source code](<%= repo_url %>) --- obtain via <%= repo_scm %> or browse online.
|
32
|
-
* [API reference](<%= api_url %>) --- documentation for source code.
|
33
|
-
* [Project home](<%= $website %>) --- the <%= $project %> project home page.
|
34
|
-
|
35
|
-
To get help or provide feedback, simply
|
36
|
-
<%= xref "License", "contact the author(s)" %>.
|
37
|
-
|
38
|
-
%|paragraph "Version numbers"
|
39
|
-
<%= $project %> releases are numbered in *major.minor.patch*
|
40
|
-
form according to the [RubyGems rational versioning
|
41
|
-
policy](http://www.rubygems.org/read/chapter/7), which
|
42
|
-
can be summarized thus:
|
43
|
-
|
44
|
-
<table markdown="1">
|
45
|
-
<thead>
|
46
|
-
<tr>
|
47
|
-
<td rowspan="2">What increased in the version number?</td>
|
48
|
-
<td colspan="3">The increase indicates that the release:</td>
|
49
|
-
</tr>
|
50
|
-
<tr>
|
51
|
-
<th>Is backward compatible?</th>
|
52
|
-
<th>Has new features?</th>
|
53
|
-
<th>Has bug fixes?</th>
|
54
|
-
</tr>
|
55
|
-
</thead>
|
56
|
-
<tbody>
|
57
|
-
<tr>
|
58
|
-
<th>major</th>
|
59
|
-
<td style="background-color: #FFE4E1;">No</td>
|
60
|
-
<td>Yes</td>
|
61
|
-
<td>Yes</td>
|
62
|
-
</tr>
|
63
|
-
<tr>
|
64
|
-
<th>minor</th>
|
65
|
-
<td>Yes</td>
|
66
|
-
<td>Yes</td>
|
67
|
-
<td>Yes</td>
|
68
|
-
</tr>
|
69
|
-
<tr>
|
70
|
-
<th>patch</th>
|
71
|
-
<td>Yes</td>
|
72
|
-
<td style="background-color: #FFE4E1;">No</td>
|
73
|
-
<td>Yes</td>
|
74
|
-
</tr>
|
75
|
-
</tbody>
|
76
|
-
</table>
|
77
|
-
|
78
|
-
%|paragraph "License"
|
79
|
-
%< "../LICENSE"
|
data/doc/setup.erb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
%#--
|
2
|
-
%# Copyright
|
3
|
-
%# See
|
2
|
+
%# Copyright protects this work.
|
3
|
+
%# See LICENSE file for details.
|
4
4
|
%#++
|
5
5
|
|
6
|
+
|
6
7
|
%|chapter "Setup"
|
8
|
+
|
9
|
+
|
7
10
|
%|section "Requirements"
|
11
|
+
|
8
12
|
Your system needs the following software to run <%= $project %>.
|
9
13
|
|
10
14
|
| Software | Description | Notes |
|
@@ -12,7 +16,9 @@
|
|
12
16
|
| [Ruby](http://ruby-lang.org) | Ruby language interpreter | Version 1.8.6, 1.8.7, and 1.9.1 have been tested successfully. |
|
13
17
|
| [RubyGems](http://rubygems.org) | Ruby packaging system | Version 1.3.1 or newer is required. |
|
14
18
|
|
19
|
+
|
15
20
|
%|section "Installation"
|
21
|
+
|
16
22
|
You can install <%= $project %> by running this command:
|
17
23
|
|
18
24
|
gem install <%= $program %>
|
@@ -27,3 +33,46 @@
|
|
27
33
|
|
28
34
|
If you do not see such output, you may
|
29
35
|
<%= xref "License", "ask the author(s)" %> for help.
|
36
|
+
|
37
|
+
|
38
|
+
%|section "Version numbers"
|
39
|
+
|
40
|
+
<%= $project %> releases are numbered in *major.minor.patch*
|
41
|
+
form according to the [RubyGems rational versioning
|
42
|
+
policy](http://www.rubygems.org/read/chapter/7), which
|
43
|
+
can be summarized thus:
|
44
|
+
|
45
|
+
<table markdown="1">
|
46
|
+
<thead>
|
47
|
+
<tr>
|
48
|
+
<td rowspan="2">What increased in the version number?</td>
|
49
|
+
<td colspan="3">The increase indicates that the release:</td>
|
50
|
+
</tr>
|
51
|
+
<tr>
|
52
|
+
<th>Is backward compatible?</th>
|
53
|
+
<th>Has new features?</th>
|
54
|
+
<th>Has bug fixes?</th>
|
55
|
+
</tr>
|
56
|
+
</thead>
|
57
|
+
<tbody>
|
58
|
+
<tr>
|
59
|
+
<th>major</th>
|
60
|
+
<td style="background-color: #FFE4E1;">No</td>
|
61
|
+
<td>Yes</td>
|
62
|
+
<td>Yes</td>
|
63
|
+
</tr>
|
64
|
+
<tr>
|
65
|
+
<th>minor</th>
|
66
|
+
<td>Yes</td>
|
67
|
+
<td>Yes</td>
|
68
|
+
<td>Yes</td>
|
69
|
+
</tr>
|
70
|
+
<tr>
|
71
|
+
<th>patch</th>
|
72
|
+
<td>Yes</td>
|
73
|
+
<td style="background-color: #FFE4E1;">No</td>
|
74
|
+
<td>Yes</td>
|
75
|
+
</tr>
|
76
|
+
</tbody>
|
77
|
+
</table>
|
78
|
+
|
data/doc/usage.erb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
%#--
|
2
|
-
%# Copyright
|
3
|
-
%# See
|
2
|
+
%# Copyright protects this work.
|
3
|
+
%# See LICENSE file for details.
|
4
4
|
%#++
|
5
5
|
|
6
|
+
|
6
7
|
%|chapter "Usage"
|
8
|
+
|
9
|
+
|
7
10
|
%|section "Command-line interface"
|
11
|
+
|
8
12
|
When you run this command:
|
9
13
|
|
10
14
|
<%= $program %> --help
|
@@ -13,7 +17,9 @@
|
|
13
17
|
|
14
18
|
<pre><%= verbatim `ruby bin/#{$program} --help` %></pre>
|
15
19
|
|
20
|
+
|
16
21
|
%|section "Ruby library interface"
|
22
|
+
|
17
23
|
Begin by loading <%= $project %> into Ruby:
|
18
24
|
|
19
25
|
<code>
|
@@ -44,7 +50,9 @@
|
|
44
50
|
|
45
51
|
See the [API documentation](<%= api_url %>) for details and examples.
|
46
52
|
|
53
|
+
|
47
54
|
%|section "eRuby template directives", "Directives"
|
55
|
+
|
48
56
|
eRuby templates are plain-text documents that contain special processing instructions known as **directives**. Directives may be expressed using either **standard** or **shorthand** notation:
|
49
57
|
|
50
58
|
| Notation | Directive | Head | Operation | Body | Tail |
|
@@ -58,7 +66,9 @@
|
|
58
66
|
|
59
67
|
In any case, directives are atomic constructs; they may not be nested.
|
60
68
|
|
69
|
+
|
61
70
|
%|section "Operations"
|
71
|
+
|
62
72
|
The first character that follows the head of a directive is known as an **operation**. Operations specify how the directive should be processed:
|
63
73
|
|
64
74
|
| Operation | Effect | Example |
|
@@ -105,12 +115,16 @@
|
|
105
115
|
end
|
106
116
|
%>
|
107
117
|
|
118
|
+
|
108
119
|
%|example "An empty template"
|
120
|
+
|
109
121
|
Begin with an empty template:
|
110
122
|
|
111
|
-
|
123
|
+
%= template_example.call "", {}
|
124
|
+
|
112
125
|
|
113
126
|
%|example "Comment directives"
|
127
|
+
|
114
128
|
Add comment directives:
|
115
129
|
|
116
130
|
<%=
|
@@ -122,7 +136,9 @@
|
|
122
136
|
}, :shorthand => true
|
123
137
|
%>
|
124
138
|
|
139
|
+
|
125
140
|
%|example "Escaped directives"
|
141
|
+
|
126
142
|
Add escaped directives:
|
127
143
|
|
128
144
|
<%=
|
@@ -134,7 +150,9 @@
|
|
134
150
|
}, :shorthand => true
|
135
151
|
%>
|
136
152
|
|
153
|
+
|
137
154
|
%|example "Vocal directives"
|
155
|
+
|
138
156
|
Add vocal directives, which produce output:
|
139
157
|
|
140
158
|
<%=
|
@@ -145,7 +163,9 @@
|
|
145
163
|
}, :shorthand => true
|
146
164
|
%>
|
147
165
|
|
166
|
+
|
148
167
|
%|example "Silent directives"
|
168
|
+
|
149
169
|
Add silent directives, which do not produce output:
|
150
170
|
|
151
171
|
<%=
|
@@ -159,7 +179,9 @@
|
|
159
179
|
}, :shorthand => true
|
160
180
|
%>
|
161
181
|
|
182
|
+
|
162
183
|
%|example "Block directives"
|
184
|
+
|
163
185
|
Add some Ruby blocks:
|
164
186
|
|
165
187
|
<%=
|
@@ -181,7 +203,9 @@
|
|
181
203
|
}, :shorthand => true
|
182
204
|
%>
|
183
205
|
|
206
|
+
|
184
207
|
%|example "Infer block endings"
|
208
|
+
|
185
209
|
Omit <tt><%= standard_directive[' end'] %></tt> directives from the template:
|
186
210
|
|
187
211
|
<%=
|
@@ -200,7 +224,9 @@
|
|
200
224
|
}, :shorthand => true, :infer_end => true
|
201
225
|
%>
|
202
226
|
|
227
|
+
|
203
228
|
%|example "Raw file inclusion"
|
229
|
+
|
204
230
|
When <tt>doc/example.txt</tt> contains:
|
205
231
|
|
206
232
|
<pre><%< "example.txt" %></pre>
|
@@ -218,7 +244,9 @@
|
|
218
244
|
}, :shorthand => true, :source_file => __FILE__
|
219
245
|
%>
|
220
246
|
|
247
|
+
|
221
248
|
%|example "Template file inclusion"
|
249
|
+
|
222
250
|
When <tt>doc/example.erb</tt> contains:
|
223
251
|
|
224
252
|
<code lang="rhtml"><%< "example.erb" %></code>
|
@@ -236,7 +264,9 @@
|
|
236
264
|
}, :shorthand => true, :source_file => __FILE__
|
237
265
|
%>
|
238
266
|
|
267
|
+
|
239
268
|
%|example "Dynamic template evaluation"
|
269
|
+
|
240
270
|
<%=
|
241
271
|
example = %{~ "#{shorthand_directive['= 2 + 2']}"}
|
242
272
|
|
@@ -247,3 +277,4 @@
|
|
247
277
|
|
248
278
|
}, :shorthand => true
|
249
279
|
%>
|
280
|
+
|
data/lib/ember.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright
|
3
|
-
# See
|
2
|
+
# Copyright protects this work.
|
3
|
+
# See LICENSE file for details.
|
4
4
|
#++
|
5
5
|
|
6
6
|
require 'rubygems'
|
@@ -8,9 +8,9 @@ gem 'inochi', '~> 1'
|
|
8
8
|
require 'inochi'
|
9
9
|
|
10
10
|
Inochi.init :Ember,
|
11
|
-
:version => '0.0.
|
12
|
-
:release => '2009-
|
13
|
-
:website => 'http://snk.tuxfamily.org/lib/ember',
|
11
|
+
:version => '0.0.1',
|
12
|
+
:release => '2009-10-03',
|
13
|
+
:website => 'http://snk.tuxfamily.org/lib/ember/',
|
14
14
|
:tagline => 'eRuby template processor'
|
15
15
|
|
16
16
|
require 'ember/template'
|
data/lib/ember/template.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright
|
3
|
-
# See
|
2
|
+
# Copyright protects this work.
|
3
|
+
# See LICENSE file for details.
|
4
4
|
#++
|
5
5
|
|
6
6
|
require 'pathname'
|
@@ -11,9 +11,10 @@ module Ember
|
|
11
11
|
# Builds a processor that evaluates eRuby directives
|
12
12
|
# in the given input according to the given options.
|
13
13
|
#
|
14
|
-
# This processor transforms the given input
|
15
|
-
# executable Ruby program (provided
|
16
|
-
#
|
14
|
+
# This processor transforms the given input
|
15
|
+
# into an executable Ruby program (provided
|
16
|
+
# by the #program() method) which is then
|
17
|
+
# executed by the #render() method on demand.
|
17
18
|
#
|
18
19
|
# eRuby directives that contribute to the output of
|
19
20
|
# the given template are called "vocal" directives.
|
@@ -62,6 +63,7 @@ module Ember
|
|
62
63
|
#
|
63
64
|
def initialize input, options = {}
|
64
65
|
@options = options
|
66
|
+
@render_context_id = object_id
|
65
67
|
@compile = compile(input.to_s)
|
66
68
|
end
|
67
69
|
|
@@ -73,14 +75,22 @@ module Ember
|
|
73
75
|
@compile
|
74
76
|
end
|
75
77
|
|
78
|
+
@@contexts = {}
|
79
|
+
|
76
80
|
##
|
77
81
|
# Returns the result of executing the Ruby program for this template
|
78
|
-
# (provided by the #
|
82
|
+
# (provided by the #program() method) inside the given context binding.
|
79
83
|
#
|
80
|
-
def render
|
81
|
-
|
84
|
+
def render context = TOPLEVEL_BINDING, parent_context_id = nil
|
85
|
+
context ||= @@contexts[parent_context_id] # inherit parent context
|
86
|
+
@@contexts[@render_context_id] = context # provide to children
|
87
|
+
|
88
|
+
result = eval @compile, context,
|
82
89
|
(@options[:source_file] || :SOURCE).to_s,
|
83
90
|
(@options[:source_line] || 1).to_i
|
91
|
+
|
92
|
+
@@contexts.delete @render_context_id # free the memory
|
93
|
+
result
|
84
94
|
end
|
85
95
|
|
86
96
|
class << self
|
@@ -323,7 +333,7 @@ module Ember
|
|
323
333
|
|
324
334
|
# content + after_spacing
|
325
335
|
content_line.gsub! '<%%', '<%' # unescape escaped directives
|
326
|
-
@program.
|
336
|
+
@program.emit_text content_line
|
327
337
|
|
328
338
|
# after_newline
|
329
339
|
@program.new_line if content_line =~ /\n\z/
|
@@ -359,28 +369,28 @@ module Ember
|
|
359
369
|
arguments =~ BLOCK_END_REGEXP ||
|
360
370
|
arguments =~ BLOCK_CONTINUE_REGEXP
|
361
371
|
|
362
|
-
@program.
|
372
|
+
@program.emit_text unindent(before_spacing) if is_vocal
|
363
373
|
|
364
374
|
# directive
|
365
375
|
template_class_name = '::Ember::Template'
|
366
376
|
nested_template_args = "(#{arguments}), #{@options.inspect}"
|
367
377
|
|
368
378
|
nest_template_with = lambda do |meth|
|
369
|
-
@program.
|
379
|
+
@program.emit_code "#{template_class_name}.#{meth}(#{
|
370
380
|
nested_template_args
|
371
|
-
}.merge!(:continue_result => true)).render(
|
381
|
+
}.merge!(:continue_result => true)).render(nil, #{@render_context_id.inspect})"
|
372
382
|
end
|
373
383
|
|
374
384
|
case operation
|
375
385
|
when OPERATION_EVAL_EXPRESSION
|
376
|
-
@program.
|
386
|
+
@program.emit_expr arguments
|
377
387
|
|
378
388
|
when OPERATION_COMMENT_LINE
|
379
|
-
@program.
|
389
|
+
@program.emit_code directive.gsub(/\S/, ' ')
|
380
390
|
|
381
391
|
when OPERATION_BEGIN_LAMBDA
|
382
392
|
arguments =~ /(\bdo\b)?\s*(\|[^\|]*\|)?\s*\z/
|
383
|
-
@program.
|
393
|
+
@program.emit_code "#{$`} #{$1 || 'do'} #{$2}"
|
384
394
|
|
385
395
|
p :begin => directive if $DEBUG
|
386
396
|
open_block.call
|
@@ -392,10 +402,10 @@ module Ember
|
|
392
402
|
nest_template_with[:load_file]
|
393
403
|
|
394
404
|
when OPERATION_INSERT_PLAIN_FILE
|
395
|
-
@program.
|
405
|
+
@program.emit_expr "#{template_class_name}.read_file(#{nested_template_args})"
|
396
406
|
|
397
407
|
else
|
398
|
-
@program.
|
408
|
+
@program.emit_code arguments
|
399
409
|
|
400
410
|
unless arguments =~ /\n/ # don't bother parsing multi-line directives
|
401
411
|
case arguments
|
@@ -417,14 +427,14 @@ module Ember
|
|
417
427
|
end
|
418
428
|
|
419
429
|
# after_spacing
|
420
|
-
@program.
|
430
|
+
@program.emit_text after_spacing if is_vocal || after_newline.empty?
|
421
431
|
|
422
432
|
# after_newline
|
423
|
-
@program.
|
433
|
+
@program.emit_text after_newline if is_vocal
|
424
434
|
@program.new_line unless after_newline.empty?
|
425
435
|
end
|
426
436
|
|
427
|
-
class Program
|
437
|
+
class Program #:nodoc:
|
428
438
|
##
|
429
439
|
# Transforms this program into Ruby code which uses
|
430
440
|
# the given variable name as the evaluation buffer.
|
@@ -465,7 +475,7 @@ module Ember
|
|
465
475
|
# Schedules the given text to be inserted verbatim
|
466
476
|
# into the evaluation buffer when this program is run.
|
467
477
|
#
|
468
|
-
def
|
478
|
+
def emit_text value
|
469
479
|
# don't bother emitting empty strings
|
470
480
|
return if value.empty?
|
471
481
|
|
@@ -481,7 +491,7 @@ module Ember
|
|
481
491
|
# Schedules the given Ruby code to be
|
482
492
|
# evaluated when this program is run.
|
483
493
|
#
|
484
|
-
def
|
494
|
+
def emit_code value
|
485
495
|
statement :code, value
|
486
496
|
end
|
487
497
|
|
@@ -489,7 +499,7 @@ module Ember
|
|
489
499
|
# Schedules the given Ruby code to be evaluated and inserted
|
490
500
|
# into the evaluation buffer when this program is run.
|
491
501
|
#
|
492
|
-
def
|
502
|
+
def emit_expr value
|
493
503
|
statement :expr, value
|
494
504
|
end
|
495
505
|
|