ember 0.0.1 → 0.1.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.
Files changed (65) hide show
  1. data/HISTORY +79 -0
  2. data/INSTALL +31 -0
  3. data/MANUAL +25 -0
  4. data/README +54 -0
  5. data/THEORY +151 -0
  6. data/USAGE +250 -0
  7. data/bin/ember +58 -20
  8. data/doc/ann.xml +93 -0
  9. data/doc/api/Ember.html +436 -0
  10. data/doc/api/Ember/Template.html +774 -0
  11. data/doc/api/Ember/Template/Program.html +877 -0
  12. data/doc/api/Ember/Template/Program/Statement.html +181 -0
  13. data/doc/api/_index.html +139 -0
  14. data/doc/api/class_list.html +36 -0
  15. data/doc/api/css/common.css +1 -0
  16. data/doc/api/css/full_list.css +50 -0
  17. data/doc/api/css/style.css +273 -0
  18. data/doc/api/file.LICENSE.html +73 -0
  19. data/doc/api/file_list.html +38 -0
  20. data/doc/api/frames.html +13 -0
  21. data/doc/api/index.html +72 -13
  22. data/doc/api/js/app.js +111 -0
  23. data/doc/api/js/full_list.js +117 -0
  24. data/doc/api/js/{jquery-1.3.2.min.js → jquery.js} +0 -0
  25. data/doc/api/method_list.html +179 -0
  26. data/doc/api/top-level-namespace.html +87 -0
  27. data/doc/index.html +1353 -682
  28. data/inochi.opts +31 -0
  29. data/lib/ember.rb +1 -15
  30. data/lib/ember/inochi.rb +103 -0
  31. data/lib/ember/template.rb +66 -78
  32. data/test/combinatorics.rb +188 -0
  33. data/test/ember/template_test.rb +137 -0
  34. data/test/runner +25 -0
  35. data/test/test_helper.rb +5 -0
  36. metadata +61 -51
  37. data/doc/api/apple-touch-icon.png +0 -0
  38. data/doc/api/classes/Ember.html +0 -61
  39. data/doc/api/classes/Ember/Template.html +0 -413
  40. data/doc/api/classes/Ember/Template/Program.html +0 -60
  41. data/doc/api/created.rid +0 -1
  42. data/doc/api/css/main.css +0 -263
  43. data/doc/api/css/panel.css +0 -383
  44. data/doc/api/css/reset.css +0 -53
  45. data/doc/api/favicon.ico +0 -0
  46. data/doc/api/files/LICENSE.html +0 -76
  47. data/doc/api/files/lib/ember/template_rb.html +0 -66
  48. data/doc/api/files/lib/ember_rb.html +0 -63
  49. data/doc/api/i/arrows.png +0 -0
  50. data/doc/api/i/results_bg.png +0 -0
  51. data/doc/api/i/tree_bg.png +0 -0
  52. data/doc/api/js/jquery-effect.js +0 -593
  53. data/doc/api/js/main.js +0 -22
  54. data/doc/api/js/searchdoc.js +0 -628
  55. data/doc/api/panel/index.html +0 -71
  56. data/doc/api/panel/search_index.js +0 -1
  57. data/doc/api/panel/tree.js +0 -1
  58. data/doc/history.erb +0 -34
  59. data/doc/index.erb +0 -11
  60. data/doc/intro.erb +0 -53
  61. data/doc/setup.erb +0 -78
  62. data/doc/usage.erb +0 -280
  63. data/rakefile +0 -14
  64. data/test/ember.rb +0 -17
  65. data/test/ember/template.rb +0 -141
@@ -0,0 +1,137 @@
1
+ require 'ember/template'
2
+
3
+ describe do
4
+ BLANK = [''] # the empty string
5
+ NEWLINES = ["\n", "\r\n"]
6
+ SPACES = [' ', "\t"]
7
+ WHITESPACE = SPACES + NEWLINES
8
+ OPERATIONS = [nil, '=', '#', *WHITESPACE]
9
+
10
+ ##
11
+ # Invokes the given block, passing in the result
12
+ # of Array#join, for every possible combination.
13
+ #
14
+ def each_join array
15
+ raise ArgumentError unless block_given?
16
+
17
+ array.permutations do |combo|
18
+ yield combo.join
19
+ end
20
+ end
21
+
22
+ describe "A template" do
23
+ it "renders single & multi-line comments as nothing" do
24
+ each_join(WHITESPACE) do |s|
25
+ render("<%##{s}an#{s}eRuby#{s}comment#{s}%>").must_equal("")
26
+ end
27
+ end
28
+
29
+ it "renders directives with whitespace-only bodies as nothing" do
30
+ each_join(WHITESPACE) do |s|
31
+ OPERATIONS.each do |o|
32
+ render("<%#{o}#{s}%>").must_equal("")
33
+ end
34
+ end
35
+ end
36
+
37
+ it "renders escaped directives in unescaped form" do
38
+ render("<%%%>").must_equal("<%%>")
39
+
40
+ render("<%% %>").must_equal("<% %>")
41
+
42
+ E SyntaxError, "the trailing delimiter must not be unescaped" do
43
+ render("<% %%>")
44
+ end
45
+
46
+ render("<%%%%>").must_equal("<%%%>",
47
+ "the trailing delimiter must not be unescaped")
48
+
49
+ each_join(WHITESPACE) do |s|
50
+ body = "#{s}an#{s}eRuby#{s}directive#{s}"
51
+
52
+ OPERATIONS.each do |o|
53
+ render("<%%#{o}#{body}%>").must_equal("<%#{o}#{body}%>")
54
+ end
55
+ end
56
+ end
57
+
58
+ it "renders whitespace surrounding vocal directives correctly" do
59
+ o = rand.to_s
60
+ i = "<%= #{o} %>"
61
+
62
+ each_join(WHITESPACE) do |s|
63
+ (BLANK + NEWLINES).enumeration do |a, b|
64
+ render("a#{a}#{s}#{i}#{b}#{s}b").must_equal("a#{a}#{s}#{o}#{b}#{s}b")
65
+ end
66
+ end
67
+ end
68
+
69
+ it "renders whitespace surrounding silent directives correctly" do
70
+ i = '<%%>'
71
+ o = ''
72
+
73
+ each_join(SPACES) do |s|
74
+ NEWLINES.each do |n|
75
+ # without preceding newline
76
+ render("a#{s}#{i}#{n}b").must_equal("a#{o}b")
77
+
78
+ # with preceding newline
79
+ render("a#{n}#{s}#{i}#{n}b").must_equal("a#{n}#{o}b")
80
+ end
81
+ end
82
+ end
83
+
84
+ def render input, options = {}
85
+ Ember::Template.new(input, options).render
86
+ end
87
+ end
88
+
89
+ describe "A program compiled from a template" do
90
+ it "has the same number of lines as its input, regardless of template options" do
91
+ (BLANK + NEWLINES).each do |s|
92
+ test_num_lines s
93
+ test_num_lines "hello#{s}world"
94
+
95
+ OPERATIONS.each do |o|
96
+ test_num_lines "<%#{o}hello#{s}world%>"
97
+ end
98
+ end
99
+ end
100
+
101
+ OPTIONS = [:shorthand, :infer_end, :unindent]
102
+
103
+ ##
104
+ # Checks that the given input template is compiled into the same
105
+ # number of lines of Ruby code for all possible template options.
106
+ #
107
+ def test_num_lines input
108
+ num_input_lines = count_lines(input)
109
+
110
+ each_option_combo(OPTIONS) do |options|
111
+ template = Ember::Template.new(input, options)
112
+ program = template.program
113
+
114
+ count_lines(program).must_equal num_input_lines, "template program compiled with #{options.inspect} has different number of lines for input #{input.inspect}"
115
+ end
116
+ end
117
+
118
+ ##
119
+ # Counts the number of lines in the given string.
120
+ #
121
+ def count_lines string
122
+ string.to_s.scan(/$/).length
123
+ end
124
+
125
+ ##
126
+ # Invokes the given block, passing in an options hash
127
+ # for Ember::Template, for every possible combination.
128
+ #
129
+ def each_option_combo options
130
+ raise ArgumentError unless block_given?
131
+
132
+ options.combinations do |flags|
133
+ yield Hash[ *flags.map {|f| [f, true] }.flatten ]
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Adds the project library directory
4
+ # and this test directory to Ruby's
5
+ # load path and runs the given tests.
6
+ #
7
+ # Usage: ruby test/runner [TESTS_TO_RUN]
8
+ #
9
+ # Where: TESTS_TO_RUN is a list of files
10
+ # or file globbing patterns that
11
+ # describe a set of files to run.
12
+ #
13
+ # If this parameter is not given,
14
+ # all *_test.rb files within or
15
+ # beneath this directory are run.
16
+
17
+ lib_dir = File.expand_path('../../lib', __FILE__)
18
+ test_dir = File.expand_path('..', __FILE__)
19
+ $LOAD_PATH.unshift lib_dir, test_dir
20
+
21
+ require 'ember/inochi'
22
+ require 'test_helper'
23
+
24
+ ARGV << "#{test_dir}/**/*_test.rb" if ARGV.empty?
25
+ ARGV.each {|glob| Dir[glob].each {|test| load test } }
@@ -0,0 +1,5 @@
1
+ require 'combinatorics'
2
+
3
+ Ember.require 'dfect'
4
+ require 'dfect/mini'
5
+ require 'dfect/auto'
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ember
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Suraj N. Kurapati
@@ -9,33 +14,36 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-10-03 00:00:00 -07:00
17
+ date: 2010-04-03 00:00:00 -07:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: inochi
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ~>
22
26
  - !ruby/object:Gem::Version
23
- version: "1"
24
- version:
27
+ segments:
28
+ - 2
29
+ version: "2"
30
+ type: :development
31
+ version_requirements: *id001
25
32
  - !ruby/object:Gem::Dependency
26
- name: inochi
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
33
+ name: dfect
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ~>
32
38
  - !ruby/object:Gem::Version
33
- version: "1"
34
- version:
35
- description: " Ember 0.0.1\n\n eRuby template processor\n\n http://snk.tuxfamily.org/lib/ember/\n\n Ember is an [1]eRuby template processsor that allows\n debugging, reduces markup, and improves composability of\n eRuby templates.\n\n\
36
- Version 0.0.1 (2009-10-03)\n\n This release improves Ruby 1.9 support and revises the user\n manual.\n\n * [2]Bug fixes\n\n * [3]Housekeeping\n\n Bug fixes\n\n * Nested templates could not access parent's binding in\n Ruby 1.9\n\n Housekeeping\n\n * Use simpler Copyright reminder at the top of every file.\n\n * Rename internal Program class' methods to be\n self-documenting.\n\n * Open source is for fun, so [4]be nice: speak of \"related\n works\" instead of \"competitors\".\n\n\
37
- References\n\n 1. http://en.wikipedia.org/wiki/ERuby\n 2. http://snk.tuxfamily.org/lib/ember/#Bug-fixes\n 3. http://snk.tuxfamily.org/lib/ember/#Housekeeping\n 4. http://loiclemeur.com/english/2009/03/never-criticize-your-competitors.html\n"
38
- email: sunaku@gmail.com
39
+ segments:
40
+ - 2
41
+ version: "2"
42
+ type: :development
43
+ version_requirements: *id002
44
+ description: " Ember (EMBEdded Ruby) is an [1]eRuby template processor that\n enables debugging, reduces markup, and improves composability\n of eRuby templates.\n\n * It reports correct line numbers in error message stack\n traces.\n\n * It can infer <% end %> based on indentation.\n\n * It can unindent block content hierarchically.\n\n * It completely silences code-only eRuby directives.\n\n * It is implemented in 364 lines of pure Ruby.\n\n\
45
+ References\n\n 1. http://en.wikipedia.org/wiki/ERuby\n"
46
+ email:
39
47
  executables:
40
48
  - ember
41
49
  extensions: []
@@ -43,46 +51,46 @@ extensions: []
43
51
  extra_rdoc_files: []
44
52
 
45
53
  files:
46
- - rakefile
47
- - test/ember.rb
48
- - test/ember/template.rb
54
+ - THEORY
55
+ - inochi.opts
56
+ - INSTALL
57
+ - MANUAL
58
+ - test/combinatorics.rb
59
+ - test/ember/template_test.rb
60
+ - test/runner
61
+ - test/test_helper.rb
49
62
  - lib/ember.rb
63
+ - lib/ember/inochi.rb
50
64
  - lib/ember/template.rb
51
65
  - bin/ember
66
+ - USAGE
52
67
  - LICENSE
53
- - doc/intro.erb
54
- - doc/setup.erb
68
+ - HISTORY
69
+ - README
70
+ - doc/ann.xml
55
71
  - doc/example.txt
56
72
  - doc/example.erb
57
73
  - doc/index.html
58
- - doc/api/classes/Ember.html
59
- - doc/api/classes/Ember/Template/Program.html
60
- - doc/api/classes/Ember/Template.html
61
- - doc/api/panel/search_index.js
62
- - doc/api/panel/tree.js
63
- - doc/api/panel/index.html
64
- - doc/api/js/searchdoc.js
65
- - doc/api/js/jquery-effect.js
66
- - doc/api/js/jquery-1.3.2.min.js
67
- - doc/api/js/main.js
68
- - doc/api/files/LICENSE.html
69
- - doc/api/files/lib/ember_rb.html
70
- - doc/api/files/lib/ember/template_rb.html
71
- - doc/api/css/main.css
72
- - doc/api/css/reset.css
73
- - doc/api/css/panel.css
74
- - doc/api/i/arrows.png
75
- - doc/api/i/tree_bg.png
76
- - doc/api/i/results_bg.png
77
- - doc/api/apple-touch-icon.png
78
- - doc/api/created.rid
79
- - doc/api/favicon.ico
74
+ - doc/api/Ember.html
75
+ - doc/api/class_list.html
76
+ - doc/api/js/full_list.js
77
+ - doc/api/js/jquery.js
78
+ - doc/api/js/app.js
79
+ - doc/api/method_list.html
80
+ - doc/api/Ember/Template/Program.html
81
+ - doc/api/Ember/Template/Program/Statement.html
82
+ - doc/api/Ember/Template.html
83
+ - doc/api/css/full_list.css
84
+ - doc/api/css/style.css
85
+ - doc/api/css/common.css
86
+ - doc/api/_index.html
87
+ - doc/api/frames.html
88
+ - doc/api/top-level-namespace.html
80
89
  - doc/api/index.html
90
+ - doc/api/file.LICENSE.html
91
+ - doc/api/file_list.html
81
92
  - doc/ember.png
82
- - doc/usage.erb
83
- - doc/history.erb
84
93
  - doc/ember.svg
85
- - doc/index.erb
86
94
  has_rdoc: true
87
95
  homepage: http://snk.tuxfamily.org/lib/ember/
88
96
  licenses: []
@@ -96,18 +104,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
104
  requirements:
97
105
  - - ">="
98
106
  - !ruby/object:Gem::Version
107
+ segments:
108
+ - 0
99
109
  version: "0"
100
- version:
101
110
  required_rubygems_version: !ruby/object:Gem::Requirement
102
111
  requirements:
103
112
  - - ">="
104
113
  - !ruby/object:Gem::Version
114
+ segments:
115
+ - 0
105
116
  version: "0"
106
- version:
107
117
  requirements: []
108
118
 
109
- rubyforge_project: sunaku
110
- rubygems_version: 1.3.5
119
+ rubyforge_project:
120
+ rubygems_version: 1.3.6
111
121
  signing_key:
112
122
  specification_version: 3
113
123
  summary: eRuby template processor
Binary file
@@ -1,61 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
- <head>
6
- <title>Ember</title>
7
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
- <link rel="stylesheet" href="../css/reset.css" type="text/css" media="screen" />
9
- <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen" />
10
- <script src="../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
11
- <script src="../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
12
- <script src="../js/main.js" type="text/javascript" charset="utf-8"></script>
13
- </head>
14
-
15
- <body>
16
- <div class="banner">
17
- <h1>
18
- <span class="type">Module</span>
19
- Ember
20
-
21
- </h1>
22
- <ul class="files">
23
-
24
- <li><a href="../files/lib/ember/template_rb.html">lib/ember/template.rb</a></li>
25
-
26
- </ul>
27
- </div>
28
- <div id="bodyContent">
29
- <div id="content">
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
- <div class="sectiontitle">Classes and Modules</div>
46
- <ul>
47
-
48
- <li><span class="type">CLASS</span> <a href="Ember/Template.html">Ember::Template</a></li>
49
-
50
- </ul>
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
- </div>
59
- </div>
60
- </body>
61
- </html>
@@ -1,413 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
- <head>
6
- <title>Ember::Template</title>
7
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
- <link rel="stylesheet" href="../../css/reset.css" type="text/css" media="screen" />
9
- <link rel="stylesheet" href="../../css/main.css" type="text/css" media="screen" />
10
- <script src="../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
11
- <script src="../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
12
- <script src="../../js/main.js" type="text/javascript" charset="utf-8"></script>
13
- </head>
14
-
15
- <body>
16
- <div class="banner">
17
- <h1>
18
- <span class="type">Class</span>
19
- Ember::Template
20
-
21
- <span class="parent">&lt;
22
-
23
- Object
24
-
25
- </span>
26
-
27
- </h1>
28
- <ul class="files">
29
-
30
- <li><a href="../../files/lib/ember/template_rb.html">lib/ember/template.rb</a></li>
31
-
32
- </ul>
33
- </div>
34
- <div id="bodyContent">
35
- <div id="content">
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
- <div class="sectiontitle">Methods</div>
46
- <dl class="methods">
47
-
48
- <dt>L</dt>
49
- <dd>
50
- <ul>
51
-
52
- <li><a href="#M000003">load_file</a></li>
53
-
54
- </ul>
55
- </dd>
56
-
57
- <dt>N</dt>
58
- <dd>
59
- <ul>
60
-
61
- <li><a href="#M000000">new</a></li>
62
-
63
- </ul>
64
- </dd>
65
-
66
- <dt>P</dt>
67
- <dd>
68
- <ul>
69
-
70
- <li><a href="#M000001">program</a></li>
71
-
72
- </ul>
73
- </dd>
74
-
75
- <dt>R</dt>
76
- <dd>
77
- <ul>
78
-
79
- <li><a href="#M000004">read_file</a>,</li>
80
-
81
- <li><a href="#M000002">render</a></li>
82
-
83
- </ul>
84
- </dd>
85
-
86
- </dl>
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
- <div class="sectiontitle">Classes and Modules</div>
95
- <ul>
96
-
97
- <li><span class="type">CLASS</span> <a href="Template/Program.html">Ember::Template::Program</a></li>
98
-
99
- </ul>
100
-
101
-
102
-
103
- <div class="sectiontitle">Constants</div>
104
- <table border='0' cellpadding='5'>
105
-
106
- <tr valign='top'>
107
- <td class="attr-name">OPERATION_EVAL_EXPRESSION</td>
108
- <td>=</td>
109
- <td class="attr-value">'='</td>
110
- </tr>
111
-
112
-
113
- <tr valign='top'>
114
- <td class="attr-name">OPERATION_COMMENT_LINE</td>
115
- <td>=</td>
116
- <td class="attr-value">'#'</td>
117
- </tr>
118
-
119
-
120
- <tr valign='top'>
121
- <td class="attr-name">OPERATION_BEGIN_LAMBDA</td>
122
- <td>=</td>
123
- <td class="attr-value">'|'</td>
124
- </tr>
125
-
126
-
127
- <tr valign='top'>
128
- <td class="attr-name">OPERATION_EVAL_TEMPLATE_FILE</td>
129
- <td>=</td>
130
- <td class="attr-value">'+'</td>
131
- </tr>
132
-
133
-
134
- <tr valign='top'>
135
- <td class="attr-name">OPERATION_EVAL_TEMPLATE_STRING</td>
136
- <td>=</td>
137
- <td class="attr-value">'~'</td>
138
- </tr>
139
-
140
-
141
- <tr valign='top'>
142
- <td class="attr-name">OPERATION_INSERT_PLAIN_FILE</td>
143
- <td>=</td>
144
- <td class="attr-value">'&lt;'</td>
145
- </tr>
146
-
147
-
148
- </table>
149
-
150
-
151
-
152
-
153
-
154
- <div class="sectiontitle">Class Public methods</div>
155
-
156
- <div class="method">
157
- <div class="title" id="M000003">
158
-
159
- <a name="M000003"></a><b>load_file</b>(path, options = {})
160
-
161
- </div>
162
-
163
- <div class="description">
164
- <p>
165
- Builds a template whose body is read from the given source.
166
- </p>
167
- <p>
168
- If the source is a relative path, it will be resolved relative to
169
- options[:source_file] if that is a valid path.
170
- </p>
171
-
172
- </div>
173
-
174
-
175
-
176
-
177
- <div class="sourcecode">
178
- <p class="source-link">
179
- Source: <a href="javascript:toggleSource('M000003_source')" id="l_M000003_source">show</a>
180
-
181
- | <a href="http://github.com/sunaku/ember/blob/f6b6ad4d02813bfe061fe18469d2d20395699d65/lib/ember/template.rb#L103" target="_blank" class="github_url">on GitHub</a>
182
-
183
- </p>
184
- <div id="M000003_source" class="dyn-source">
185
- <pre><span class="ruby-comment cmt"># File lib/ember/template.rb, line 103</span>
186
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load_file</span> <span class="ruby-identifier">path</span>, <span class="ruby-identifier">options</span> = {}
187
- <span class="ruby-identifier">path</span> = <span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">options</span>)
188
- <span class="ruby-identifier">new</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">path</span>), <span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">:source_file</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">path</span>)
189
- <span class="ruby-keyword kw">end</span></pre>
190
- </div>
191
- </div>
192
-
193
- </div>
194
-
195
- <div class="method">
196
- <div class="title" id="M000000">
197
-
198
- <a name="M000000"></a><b>new</b>(input, options = {})
199
-
200
- </div>
201
-
202
- <div class="description">
203
- <p>
204
- Builds a processor that evaluates eRuby directives in the given input
205
- according to the given options.
206
- </p>
207
- <p>
208
- This processor transforms the given input into an executable Ruby program
209
- (provided by the program() method) which is then executed by the render()
210
- method on demand.
211
- </p>
212
- <p>
213
- eRuby directives that contribute to the output of the given template are
214
- called &#8220;vocal&#8221; directives. Those that do not are called
215
- &#8220;silent&#8221; directives.
216
- </p>
217
- <h4>Options</h4>
218
- <dl>
219
- <dt>:result_variable</dt><dd>Name of the variable which stores the result of template evaluation during
220
- template evaluation.
221
-
222
- <p>
223
- The default value is &#8220;_erbout&#8221;.
224
- </p>
225
- </dd>
226
- <dt>:continue_result</dt><dd>Append to the result variable if it already exists?
227
-
228
- <p>
229
- The default value is false.
230
- </p>
231
- </dd>
232
- <dt>:source_file</dt><dd>Name of the file which contains the given input. This is shown in stack
233
- traces when reporting error messages.
234
-
235
- <p>
236
- The default value is &#8220;SOURCE&#8221;.
237
- </p>
238
- </dd>
239
- <dt>:source_line</dt><dd>Line number at which the given input exists in the :source_file. This is
240
- shown in stack traces when reporting error messages.
241
-
242
- <p>
243
- The default value is 1.
244
- </p>
245
- </dd>
246
- <dt>:shorthand</dt><dd>Treat lines beginning with &#8220;%&#8221; as eRuby directives?
247
-
248
- <p>
249
- The default value is false.
250
- </p>
251
- </dd>
252
- <dt>:<a href="Template.html#M000009">infer_end</a></dt><dd>Add missing <% end %> statements based on indentation?
253
-
254
- <p>
255
- The default value is false.
256
- </p>
257
- </dd>
258
- <dt>:unindent</dt><dd>Unindent the content of eRuby blocks (everything between <% do %> &#8230;
259
- <% end %>) hierarchically?
260
-
261
- <p>
262
- The default value is false.
263
- </p>
264
- </dd>
265
- </dl>
266
-
267
- </div>
268
-
269
-
270
-
271
-
272
- <div class="sourcecode">
273
- <p class="source-link">
274
- Source: <a href="javascript:toggleSource('M000000_source')" id="l_M000000_source">show</a>
275
-
276
- | <a href="http://github.com/sunaku/ember/blob/f6b6ad4d02813bfe061fe18469d2d20395699d65/lib/ember/template.rb#L64" target="_blank" class="github_url">on GitHub</a>
277
-
278
- </p>
279
- <div id="M000000_source" class="dyn-source">
280
- <pre><span class="ruby-comment cmt"># File lib/ember/template.rb, line 64</span>
281
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span> <span class="ruby-identifier">input</span>, <span class="ruby-identifier">options</span> = {}
282
- <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">options</span>
283
- <span class="ruby-ivar">@render_context_id</span> = <span class="ruby-identifier">object_id</span>
284
- <span class="ruby-ivar">@compile</span> = <span class="ruby-identifier">compile</span>(<span class="ruby-identifier">input</span>.<span class="ruby-identifier">to_s</span>)
285
- <span class="ruby-keyword kw">end</span></pre>
286
- </div>
287
- </div>
288
-
289
- </div>
290
-
291
- <div class="method">
292
- <div class="title" id="M000004">
293
-
294
- <a name="M000004"></a><b>read_file</b>(path, options = {})
295
-
296
- </div>
297
-
298
- <div class="description">
299
- <p>
300
- Returns the contents of the given file, which can be relative to the
301
- current template in which this command is being executed.
302
- </p>
303
- <p>
304
- If the source is a relative path, it will be resolved relative to
305
- options[:source_file] if that is a valid path.
306
- </p>
307
-
308
- </div>
309
-
310
-
311
-
312
-
313
- <div class="sourcecode">
314
- <p class="source-link">
315
- Source: <a href="javascript:toggleSource('M000004_source')" id="l_M000004_source">show</a>
316
-
317
- | <a href="http://github.com/sunaku/ember/blob/f6b6ad4d02813bfe061fe18469d2d20395699d65/lib/ember/template.rb#L115" target="_blank" class="github_url">on GitHub</a>
318
-
319
- </p>
320
- <div id="M000004_source" class="dyn-source">
321
- <pre><span class="ruby-comment cmt"># File lib/ember/template.rb, line 115</span>
322
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read_file</span> <span class="ruby-identifier">path</span>, <span class="ruby-identifier">options</span> = {}
323
- <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span> <span class="ruby-identifier">resolve_path</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">options</span>)
324
- <span class="ruby-keyword kw">end</span></pre>
325
- </div>
326
- </div>
327
-
328
- </div>
329
-
330
- <div class="sectiontitle">Instance Public methods</div>
331
-
332
- <div class="method">
333
- <div class="title" id="M000001">
334
-
335
- <a name="M000001"></a><b>program</b>()
336
-
337
- </div>
338
-
339
- <div class="description">
340
- <p>
341
- Ruby source code assembled from the eRuby template provided as input to the
342
- constructor of this class.
343
- </p>
344
-
345
- </div>
346
-
347
-
348
-
349
-
350
- <div class="sourcecode">
351
- <p class="source-link">
352
- Source: <a href="javascript:toggleSource('M000001_source')" id="l_M000001_source">show</a>
353
-
354
- | <a href="http://github.com/sunaku/ember/blob/f6b6ad4d02813bfe061fe18469d2d20395699d65/lib/ember/template.rb#L74" target="_blank" class="github_url">on GitHub</a>
355
-
356
- </p>
357
- <div id="M000001_source" class="dyn-source">
358
- <pre><span class="ruby-comment cmt"># File lib/ember/template.rb, line 74</span>
359
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">program</span>
360
- <span class="ruby-ivar">@compile</span>
361
- <span class="ruby-keyword kw">end</span></pre>
362
- </div>
363
- </div>
364
-
365
- </div>
366
-
367
- <div class="method">
368
- <div class="title" id="M000002">
369
-
370
- <a name="M000002"></a><b>render</b>(context = TOPLEVEL_BINDING, parent_context_id = nil)
371
-
372
- </div>
373
-
374
- <div class="description">
375
- <p>
376
- Returns the result of executing the Ruby program for this template
377
- (provided by the program() method) inside the given context binding.
378
- </p>
379
-
380
- </div>
381
-
382
-
383
-
384
-
385
- <div class="sourcecode">
386
- <p class="source-link">
387
- Source: <a href="javascript:toggleSource('M000002_source')" id="l_M000002_source">show</a>
388
-
389
- | <a href="http://github.com/sunaku/ember/blob/f6b6ad4d02813bfe061fe18469d2d20395699d65/lib/ember/template.rb#L84" target="_blank" class="github_url">on GitHub</a>
390
-
391
- </p>
392
- <div id="M000002_source" class="dyn-source">
393
- <pre><span class="ruby-comment cmt"># File lib/ember/template.rb, line 84</span>
394
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render</span> <span class="ruby-identifier">context</span> = <span class="ruby-constant">TOPLEVEL_BINDING</span>, <span class="ruby-identifier">parent_context_id</span> = <span class="ruby-keyword kw">nil</span>
395
- <span class="ruby-identifier">context</span> <span class="ruby-operator">||=</span> <span class="ruby-ivar">@@contexts</span>[<span class="ruby-identifier">parent_context_id</span>] <span class="ruby-comment cmt"># inherit parent context</span>
396
- <span class="ruby-ivar">@@contexts</span>[<span class="ruby-ivar">@render_context_id</span>] = <span class="ruby-identifier">context</span> <span class="ruby-comment cmt"># provide to children</span>
397
-
398
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">eval</span> <span class="ruby-ivar">@compile</span>, <span class="ruby-identifier">context</span>,
399
- (<span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:source_file</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">:SOURCE</span>).<span class="ruby-identifier">to_s</span>,
400
- (<span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:source_line</span>] <span class="ruby-operator">||</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">to_i</span>
401
-
402
- <span class="ruby-ivar">@@contexts</span>.<span class="ruby-identifier">delete</span> <span class="ruby-ivar">@render_context_id</span> <span class="ruby-comment cmt"># free the memory</span>
403
- <span class="ruby-identifier">result</span>
404
- <span class="ruby-keyword kw">end</span></pre>
405
- </div>
406
- </div>
407
-
408
- </div>
409
-
410
- </div>
411
- </div>
412
- </body>
413
- </html>