Forum: Ruby could someone explain this CGI problem ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A8c75ba3d60af9c11ae792a1a2b7582b?d=identicon&s=25 lg (Guest)
on 2006-01-03 14:30
(Received via mailing list)
the following code sequence

cgi.div{
  1..3.times{ |i|
    cgi.div{
      "hello from div"
    }
  }
}

produces

<DIV>
  1..3
</DIV>

but i wanted to produce

<DIV>
  <DIV>
    huhu
  </DIV>
  <DIV>
    huhu
  </DIV>
  <DIV>
    huhu
  </DIV>
</DIV>

could someone point me how to get the right result ?
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-01-03 14:46
(Received via mailing list)
Hi --

On Tue, 3 Jan 2006, lg wrote:

> produces
>  </DIV>
>  <DIV>
>    huhu
>  </DIV>
>  <DIV>
>    huhu
>  </DIV>
> </DIV>
>
> could someone point me how to get the right result ?

1..3.times is being parsed as:  1..(3.times).  Since times returns its
receiver, that's the same as: 1..3

Try this:

   cgi.div {
     (1..3).map {
       cgi.div {
         "hello from div"     # or "huhu", or whatever
       }
     }
   }

You could also do:

   cgi.div { cgi.div { "hello from div" } * 3 }


David

--
David A. Black
dblack@wobblini.net

"Ruby for Rails", from Manning Publications, coming April 2006!
http://www.manning.com/books/black
C0d7d6f961535b6d9d0fb1154148b655?d=identicon&s=25 Patrick Gundlach (Guest)
on 2006-01-03 14:55
(Received via mailing list)
> produces
>
> <DIV>
>   1..3
> </DIV>

This is, because the 1..3..... statement returns "1..3" and this is
what cgi gets. Try it with irb.

perhaps this works (untested)



> cgi.div{
temp_string=""
>   1..3.times{ |i|
 temp_string <<  cgi.div{ "hello from div"   }
>   }
 temp_string
> }

i.e. it collects the divs in a temporary string and gives that to the
outer div.

Patrick
508861510639b56d61eb30e6a28b01d9?d=identicon&s=25 John Maclean (Guest)
on 2006-01-03 15:11
(Received via mailing list)
Hey chaps,

I'd just like to check that the following uses methods and that no
classes or instance variables are created. I see that there are no
@instance_variables..
Where's the object? What class is being used?
Am I correct in saying that say_goodnight is a method, where (name) is
the parameter for it?

#!/usr/bin/ruby
# Tue Dec 27 15:42:59 GMT 2005
#  from page 13 of the pick-axe book
def say_goodnight(name)
        "Good night,  #{name.capitalize}"
        #  we use the output of the last result - this save time
end
# Time for bed...
puts say_goodnight('jayeola')
puts say_goodnight('john-Boy')
puts say_goodnight('mary-Ellen')
puts say_goodnight('mary-loo')
puts say_goodnight('silly-slapper')
puts say_goodnight('hex-editor')
A8c75ba3d60af9c11ae792a1a2b7582b?d=identicon&s=25 lg (Guest)
on 2006-01-03 16:45
(Received via mailing list)
thanks - this was the hint i needed !

regards,

lars
Dd54c22454b4e3c21cadf3bdb5192e28?d=identicon&s=25 Kero (Guest)
on 2006-01-04 13:18
(Received via mailing list)
> I'd just like to check that the following uses methods and that no classes
> or instance variables are created. I see that there are no
> @instance_variables..
>
> Where's the object?

try
  ruby -e 'p self'
(as if executing a ruby file containing "p self" and nothing else)
it prints "main".
Apparently the object sees itself as main. ok.

> What class is being used?

do
  ruby -e 'p self.class'
it prints "Object"
so main is an Object. tadaa!
(actually, it is a bit more than "just" an Object, but you can figure
that
out yourself when you learn about Modules and mixin)

What should you learn from this? Everything is an object. Really. But if
you
want to do some simple procedural stuff, the objects do not get in your
way.
They can be, as you experienced, completely invisible. That's one of
many,
many reasons I like Ruby so much :)


> Am I correct in saying that say_goodnight is a method, where (name) is the
> parameter for it?

absolutely correct

> #!/usr/bin/ruby
> # Tue Dec 27 15:42:59 GMT 2005
> #  from page 13 of the pick-axe book
> def say_goodnight(name)
>         "Good night,  #{name.capitalize}"
>         #  we use the output of the last result - this save time
> end
[snip]
This topic is locked and can not be replied to.