How to pull text from database and eval it?


#1

I’m trying to add some executable code to my blog posts. How can I
include this inside of a blog post and eval it?

Charlie bowman
http://www.recentrambles.com


#2

On 5/23/06, Charlie B. removed_email_address@domain.invalid wrote:

I’m trying to add some executable code to my blog posts. How can I include this inside
of a blog post and eval it?

In my controller I have a method that does this:

@content = Content.find( :first, :conditions => [ ‘active = 1 AND
action = ?’, params[:id] ] )

Then in my view I have this:

<%= render_template ‘rhtml’, @content.body %>


#3

I’m not sure I understand what you’re getting at. Currently I pull the
post from the database, pass it to a template and the text is displayed.
How could I embed a small block of code in that text that instead of
being displayed, it will be executed? Forgive me if that’s what your
already showing me.

On Tue, 2006-05-23 at 09:51 -0500, Greg D. wrote:

<%= render_template ‘rhtml’, @content.body %>

Charlie B.
http://www.recentrambles.com


#4

what if I"m only evaling part of the blog post. Would I need to store
the executable code in a seperate field? I wouldn’t want to eval the
entire post.

On Tue, 2006-05-23 at 17:37 +0200, Simen wrote:

<%= render_template ‘rhtml’, @content.body %>
It’s a Ruby method that evaluates a string.
Charlie B.
http://www.recentrambles.com


#5

Charlie B. wrote:

I’m not sure I understand what you’re getting at. Currently I pull the
post from the database, pass it to a template and the text is displayed.
How could I embed a small block of code in that text that instead of
being displayed, it will be executed? Forgive me if that’s what your
already showing me.

On Tue, 2006-05-23 at 09:51 -0500, Greg D. wrote:

<%= render_template ‘rhtml’, @content.body %>

Charlie B.
http://www.recentrambles.com

Use eval:

<%= eval(@your_code_block) %>

It’s a Ruby method that evaluates a string.


#6

On 5/23/06, Charlie B. removed_email_address@domain.invalid wrote:

I’m not sure I understand what you’re getting at. Currently I pull the post from
the database, pass it to a template and the text is displayed. How could I embed a
small block of code in that text that instead of being displayed, it will be executed?
Forgive me if that’s what your already showing me.

render_template will evaluate any embedded code you include.


#7

First put all the Ruby code that shall be executable into a tag:

list = [1, 2, 3]
list.each do |one|
print one
end

So use a simple regex:
@blog.content = @blog.content.gsub(/<ruby>(.*?)</ruby>/) do |match|
match = eval($1)
end

Judofyr


#8

Thanks, that will work perfectly! So simple, it went right over my
head!

On Tue, 2006-05-23 at 18:22 +0200, Magnus H. wrote:

match = eval($1)
end

Judofyr

Charlie B.
http://www.recentrambles.com