Skip to content

Commit 9cef102

Browse files
committed
Convert erb.rb comments to README.md
1 parent 39fa152 commit 9cef102

1 file changed

Lines changed: 235 additions & 13 deletions

File tree

README.md

Lines changed: 235 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,253 @@
22

33
An easy to use but powerful templating system for Ruby.
44

5-
## Installation
5+
## Introduction
66

7-
Add this line to your application's Gemfile:
7+
ERB provides an easy to use but powerful templating system for Ruby. Using
8+
ERB, actual Ruby code can be added to any plain text document for the
9+
purposes of generating document information details and/or flow control.
810

9-
```ruby
10-
gem 'erb'
11+
A very simple example is this:
12+
13+
```rb
14+
require 'erb'
15+
16+
x = 42
17+
template = ERB.new <<-EOF
18+
The value of x is: <%= x %>
19+
EOF
20+
puts template.result(binding)
21+
```
22+
23+
Prints: `The value of x is: 42`
24+
25+
More complex examples are given below.
26+
27+
## Recognized Tags
28+
29+
ERB recognizes certain tags in the provided template and converts them based
30+
on the rules below:
31+
32+
```erb
33+
<% Ruby code -- inline with output %>
34+
<%= Ruby expression -- replace with result %>
35+
<%# comment -- ignored -- useful in testing %>
36+
% a line of Ruby code -- treated as <% line %> (optional -- see ERB.new)
37+
%% replaced with % if first thing on a line and % processing is used
38+
<%% or %%> -- replace with <% or %> respectively
1139
```
1240

13-
And then execute:
41+
All other text is passed through ERB filtering unchanged.
42+
43+
## Options
44+
45+
There are several settings you can change when you use ERB:
46+
* the nature of the tags that are recognized;
47+
* the binding used to resolve local variables in the template.
48+
49+
See the ERB.new and ERB#result methods for more detail.
50+
51+
## Character encodings
52+
53+
ERB (or Ruby code generated by ERB) returns a string in the same
54+
character encoding as the input string. When the input string has
55+
a magic comment, however, it returns a string in the encoding specified
56+
by the magic comment.
57+
58+
```rb
59+
# -*- coding: utf-8 -*-
60+
require 'erb'
61+
62+
template = ERB.new <<EOF
63+
<%#-*- coding: Big5 -*-%>
64+
__ENCODING__ is <%= __ENCODING__ %>.
65+
EOF
66+
puts template.result
67+
```
1468
15-
$ bundle install
69+
Prints: `__ENCODING__ is Big5.`
1670
17-
Or install it yourself as:
71+
## Examples
1872

19-
$ gem install erb
73+
### Plain Text
2074

21-
## Development
75+
ERB is useful for any generic templating situation. Note that in this example, we use the
76+
convenient "% at start of line" tag, and we quote the template literally with
77+
`%q{...}` to avoid trouble with the backslash.
78+
79+
```rb
80+
require "erb"
81+
82+
# Create template.
83+
template = %q{
84+
From: James Edward Gray II <james@grayproductions.net>
85+
To: <%= to %>
86+
Subject: Addressing Needs
87+
88+
<%= to[/\w+/] %>:
89+
90+
Just wanted to send a quick note assuring that your needs are being
91+
addressed.
92+
93+
I want you to know that my team will keep working on the issues,
94+
especially:
95+
96+
<%# ignore numerous minor requests -- focus on priorities %>
97+
% priorities.each do |priority|
98+
* <%= priority %>
99+
% end
100+
101+
Thanks for your patience.
102+
103+
James Edward Gray II
104+
}.gsub(/^ /, '')
105+
106+
message = ERB.new(template, trim_mode: "%<>")
107+
108+
# Set up template data.
109+
to = "Community Spokesman <spokesman@ruby_community.org>"
110+
priorities = [ "Run Ruby Quiz",
111+
"Document Modules",
112+
"Answer Questions on Ruby Talk" ]
113+
114+
# Produce result.
115+
email = message.result
116+
puts email
117+
```
118+
119+
Generates:
120+
121+
```
122+
From: James Edward Gray II <james@grayproductions.net>
123+
To: Community Spokesman <spokesman@ruby_community.org>
124+
Subject: Addressing Needs
22125

23-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
126+
Community:
127+
128+
Just wanted to send a quick note assuring that your needs are being addressed.
129+
130+
I want you to know that my team will keep working on the issues, especially:
131+
132+
* Run Ruby Quiz
133+
* Document Modules
134+
* Answer Questions on Ruby Talk
135+
136+
Thanks for your patience.
137+
138+
James Edward Gray II
139+
```
140+
141+
### Ruby in HTML
142+
143+
ERB is often used in .rhtml files (HTML with embedded Ruby). Notice the need in
144+
this example to provide a special binding when the template is run, so that the instance
145+
variables in the Product object can be resolved.
146+
147+
```rb
148+
require "erb"
149+
150+
# Build template data class.
151+
class Product
152+
def initialize( code, name, desc, cost )
153+
@code = code
154+
@name = name
155+
@desc = desc
156+
@cost = cost
157+
158+
@features = [ ]
159+
end
160+
161+
def add_feature( feature )
162+
@features << feature
163+
end
164+
165+
# Support templating of member data.
166+
def get_binding
167+
binding
168+
end
169+
170+
# ...
171+
end
172+
173+
# Create template.
174+
template = %{
175+
<html>
176+
<head><title>Ruby Toys -- <%= @name %></title></head>
177+
<body>
178+
179+
<h1><%= @name %> (<%= @code %>)</h1>
180+
<p><%= @desc %></p>
181+
182+
<ul>
183+
<% @features.each do |f| %>
184+
<li><b><%= f %></b></li>
185+
<% end %>
186+
</ul>
187+
188+
<p>
189+
<% if @cost < 10 %>
190+
<b>Only <%= @cost %>!!!</b>
191+
<% else %>
192+
Call for a price, today!
193+
<% end %>
194+
</p>
195+
196+
</body>
197+
</html>
198+
}.gsub(/^ /, '')
199+
200+
rhtml = ERB.new(template)
201+
202+
# Set up template data.
203+
toy = Product.new( "TZ-1002",
204+
"Rubysapien",
205+
"Geek's Best Friend! Responds to Ruby commands...",
206+
999.95 )
207+
toy.add_feature("Listens for verbal commands in the Ruby language!")
208+
toy.add_feature("Ignores Perl, Java, and all C variants.")
209+
toy.add_feature("Karate-Chop Action!!!")
210+
toy.add_feature("Matz signature on left leg.")
211+
toy.add_feature("Gem studded eyes... Rubies, of course!")
212+
213+
# Produce result.
214+
rhtml.run(toy.get_binding)
215+
```
216+
217+
Generates (some blank lines removed):
218+
219+
```html
220+
<html>
221+
<head><title>Ruby Toys -- Rubysapien</title></head>
222+
<body>
223+
224+
<h1>Rubysapien (TZ-1002)</h1>
225+
<p>Geek's Best Friend! Responds to Ruby commands...</p>
226+
227+
<ul>
228+
<li><b>Listens for verbal commands in the Ruby language!</b></li>
229+
<li><b>Ignores Perl, Java, and all C variants.</b></li>
230+
<li><b>Karate-Chop Action!!!</b></li>
231+
<li><b>Matz signature on left leg.</b></li>
232+
<li><b>Gem studded eyes... Rubies, of course!</b></li>
233+
</ul>
234+
235+
<p>
236+
Call for a price, today!
237+
</p>
238+
239+
</body>
240+
</html>
241+
```
24242

25-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
243+
## Notes
26244

27-
## Contributing
245+
There are a variety of templating solutions available in various Ruby projects.
246+
For example, RDoc, distributed with Ruby, uses its own template engine, which
247+
can be reused elsewhere.
28248

29-
Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/erb.
249+
Other popular engines could be found in the corresponding
250+
[Category](https://www.ruby-toolbox.com/categories/template_engines) of
251+
The Ruby Toolbox.
30252

31253
## License
32254

0 commit comments

Comments
 (0)