# Simple eruby -- including files

**URL:** <https://www.ruby-forum.com/t/simple-eruby-including-files/90553>\
**Category:** Ruby\
**Created:** [March 29, 2007, 10:10pm UTC](https://www.ruby-forum.com/t/simple-eruby-including-files/90553 "2007-03-29T22:10:49Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![cpeterson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58f4c7/32.png) [@cpeterson](https://www.ruby-forum.com/u/cpeterson)\
**Post date:** [March 29, 2007, 10:10pm UTC](https://www.ruby-forum.com/t/simple-eruby-including-files/90553/1 "2007-03-29T22:10:49Z")

</div>

NOTE: I’ll try one more time. For some reason, this message hasn’t  
been getting through. It occurred to me that the mailing list might be  
discarding messages with (X)HTML in them, so I replaced all greater-than  
and less-than symbols with the corresponding bracket symbols. Please  
pretend, while reading this, that it’s all valid XHTML – and please  
forgive me if all three messages ultimately make it through.

I’ve been playing with eruby a little bit – a VERY LITTLE bit, mind  
you. I haven’t gotten far yet.

It seems like an excellent way to finally get away from PHP in certain  
types of work I do. The problem is that some of the concepts of PHP  
don’t seem to translate directly, and the only howtos I’m able to find  
for eruby are anemic at best. There’s plenty of stuff about how to  
install it, and precious little about how to make use of it.

My current frustration is figuring out how to achieve the following:

1. an index.rhtml page that defines some variables

2. a template.whatever page that contains an XHTML page with evaluation  
of ruby variables defined in the index.rhtml page to produce  
page-specific content

In PHP, it would be something like the following example.

index.php:  
[?php  
$title = “Home”;  
require\_once(‘template.php’);  
?]

template.php:  
[html]  
[head]  
[title]Welcome [?php echo $title ?][/title]  
[/head]  
[body]  
[p]blah blah blah[/p]  
[/body]  
[/html]

So . . . ideas? How would I go about achieving the same results with  
eruby? Unless and until I can figure this out, there’s a HUGE roadblock  
in my way of the application of the DRY principle.

---

<div class="post-metadata">

**Author:** ![cpeterson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58f4c7/32.png) [@cpeterson](https://www.ruby-forum.com/u/cpeterson)\
**Post date:** [March 30, 2007, 1:01am UTC](https://www.ruby-forum.com/t/simple-eruby-including-files/90553/2 "2007-03-30T01:01:26Z")

</div>

It really does work pretty much the same way as you would do it with  
PHP.  
You can make it as simple or as complex as you like.  
Use Ruby include or require for the same files.  
eRuby is just a lot more concise than PHP is the result.  
Your pages become readable again.  
It’s not different in terms of breaking up files into:  
Commonly reused elements (header, navigation, footer, analytics scripts)  
Content unique to a page.

For a simple, fairly static site, you’re biggest concern is this  
organization of files.  
Anything that is the same on multiple pages should get put into a  
separate file.

Of course you can also always just parse files by having the files  
written and produced once then storing those, thus saving the  
processing time on the server.

---

<div class="post-metadata">

**Author:** ![cpeterson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58f4c7/32.png) [@cpeterson](https://www.ruby-forum.com/u/cpeterson)\
**Post date:** [March 30, 2007, 1:41am UTC](https://www.ruby-forum.com/t/simple-eruby-including-files/90553/3 "2007-03-30T01:41:30Z")

</div>

On Fri, Mar 30, 2007 at 08:00:52AM +0900, John J. wrote:

> It really does work pretty much the same way as you would do it with  
> PHP.  
> You can make it as simple or as complex as you like.  
> Use Ruby include or require for the same files.  
> eRuby is just a lot more concise than PHP is the result.  
> Your pages become readable again.  
> It’s not different in terms of breaking up files into:  
> Commonly reused elements (header, navigation, footer, analytics scripts)  
> Content unique to a page.

Could you provide an example? The following, an apparently direct  
translation from PHP (as far as I can tell), doesn’t work.

index.rhtml:  
\<%  
title = “Home”  
require ‘template.rhtml’  
%\>

template.rhtml:

 Welcome \<%= title %\> 

blah blah blah

> For a simple, fairly static site, you’re biggest concern is this  
> organization of files.  
> Anything that is the same on multiple pages should get put into a  
> separate file.

I’m aware of this. That’s why I’m trying to figure out how to make the  
above tactic work.

> Of course you can also always just parse files by having the files  
> written and produced once then storing those, thus saving the  
> processing time on the server.

Not always an option – but I have used it in the past.

---

<div class="post-metadata">

**Author:** ![cpeterson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58f4c7/32.png) [@cpeterson](https://www.ruby-forum.com/u/cpeterson)\
**Post date:** [March 30, 2007, 5:58am UTC](https://www.ruby-forum.com/t/simple-eruby-including-files/90553/4 "2007-03-30T05:58:47Z")

</div>

On Fri, Mar 30, 2007 at 12:29:12PM +0900, Ezra Z. wrote:

> > 
> 
> Erb doesn’t do anything like that by default. But you can fudge it  
> \<% 10.times do %\>  
> \<%= \_include ‘bar.rhtml’ %\>  
> \<% end %\>  
> ez socialpicks $ cat bar.rhtml  
> \<%= “hello world!” %\>

Thank you. I was hoping there was something simpler (using eruby.cgi  
rather than erb) than rolling my own, but I do appreciate your example  
and will put it (or something like it) to work. I guess I just assumed  
too much about how eruby would work. At least now I won’t waste my time  
trying to figure out what I’m doing wrong.

---

<div class="post-metadata">

**Author:** ![cpeterson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58f4c7/32.png) [@cpeterson](https://www.ruby-forum.com/u/cpeterson)\
**Post date:** [March 30, 2007, 8:06am UTC](https://www.ruby-forum.com/t/simple-eruby-including-files/90553/5 "2007-03-30T08:06:59Z")

</div>

If it’s the eruby.cgi at Dreamhost  
that doesn’t work very well…

---

<div class="post-metadata">

**Author:** ![cpeterson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58f4c7/32.png) [@cpeterson](https://www.ruby-forum.com/u/cpeterson)\
**Post date:** [March 30, 2007, 5:29am UTC](https://www.ruby-forum.com/t/simple-eruby-including-files/90553/6 "2007-03-30T05:29:45Z")

</div>

On Mar 29, 2007, at 4:40 PM, Chad P. wrote:

> Welcome \<%= title %\> 
> 
> blah blah blah

Chad-

Erb doesn’t do anything like that by default. But you can fudge it  
pretty easily:

ez work $ cat include.rb  
require ‘erb’  
def \_include(template, bind=binding)  
erb = ERB.new(IO.read(File.join(File.dirname( **FILE** ),template)))  
erb.result(bind)  
end  
ez work $ cat foo.rhtml  
\<% require ‘include’ %\>  
\<% 10.times do %\>  
\<%= \_include ‘bar.rhtml’ %\>  
\<% end %\>  
ez socialpicks $ cat bar.rhtml  
\<%= “hello world!” %\>  
ez work $ erb foo.rhtml

hello world!

hello world!

hello world!

hello world!

hello world!

hello world!

hello world!

hello world!

hello world!

hello world!

You can’t use ‘include’ because of Module#include so I used  
\_include. Have fun!

Cheers  
– Ezra Z.  
– Lead Rails Evangelist  
– removed\_email\_address@domain.invalid  
– Engine Y., Serious Rails Hosting  
– (866) 518-YARD (9273)
