Forum: Ruby named scope lambda string substitution 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.
2090378440415ee8eb2193727c198abd?d=identicon&s=25 jdwy (Guest)
on 2008-11-07 15:57
(Received via mailing list)
Sorry for a cross post with rails, but I think this may be more of a
ruby question (or rails's impl?). I have a complex named scope like
the following.

named_scope :foo, lambda {|foo, bar|
    foo.each do |d|
      #foo = "this line doesn't work #{s}"
      baz = "something like this works " + s
    end

    bar.each do |b|
    end
{
  :conditions => {'baz' => 1}

}}

It does some pre-processing to calculate the :conditions hash. The
weird bit is that I get a bizarre syntax error when I try to use
double quoted strings with substitutions. If I use a syntax such as
"A"+str+"B" it's ok, but "A#{str}B" is a syntax error. Any thoughts?

I've tried to replicate it in pure ruby lambda functions but wasn't
able to, leading me to think it may be related to the named scope.

-Jeff
753dcb78b3a3651127665da4bed3c782?d=identicon&s=25 Brian Candler (candlerb)
on 2008-11-07 19:11
jdwy wrote:
> Sorry for a cross post with rails, but I think this may be more of a
> ruby question (or rails's impl?). I have a complex named scope like
> the following.
>
> named_scope :foo, lambda {|foo, bar|
>     foo.each do |d|
>       #foo = "this line doesn't work #{s}"
>       baz = "something like this works " + s
>     end
>
>     bar.each do |b|
>     end
> {
>   :conditions => {'baz' => 1}
>
> }}
>
> It does some pre-processing to calculate the :conditions hash. The
> weird bit is that I get a bizarre syntax error when I try to use
> double quoted strings with substitutions. If I use a syntax such as
> "A"+str+"B" it's ok, but "A#{str}B" is a syntax error. Any thoughts?

It's clearly not a syntax error. Post the *exact* exception report you
see, together with the exact code which causes it. If you're going to
show just an excerpt, then at least show the line numbers on the excerpt
so these can be tied up to the exception.
2090378440415ee8eb2193727c198abd?d=identicon&s=25 jdwy (Guest)
on 2008-11-07 21:35
(Received via mailing list)
Hey Brian,
This is the syntax error I get. The code I posted is enough to trigger
it in a simple class. I modified and added line numbers below.


[user@silvia proj-git]$ ruby foo.rb
foo.rb:8: syntax error, unexpected kDO_BLOCK, expecting '}'
    bar.each do |b|
               ^


1  class Foo
2  named_scope :foo, lambda {|foo, bar|
3     foo.each do |d|
4       foo = "this line doesn't work #{s}"
5       baz = "something like this works " + s
6     end
7
8     bar.each do |b|
9     end
10 {
11  :conditions => {'baz' => 1}
12
13 }}
14 end
D71ee781fc01856cc187c3ce14374c80?d=identicon&s=25 Mikael Høilund (Guest)
on 2008-11-07 22:39
(Received via mailing list)
foo :bar {} # doesn't work.

use doend or parentheses around the arguments.


--
instance_variable_set(%@\@%sample@%%@ew@.succ, Class.new(&proc{def
self.net;$;,
$/='','/';%;.fqn-
cmtkhng;end}));Kernel.send(:"define_method",:method_missing){|
n,$_|$_<<"?kd!jhl";n=split.map{|q|q.succ}*'';puts n.reverse.chomp.tr(*
%w{" a})}
me@example.net
D71ee781fc01856cc187c3ce14374c80?d=identicon&s=25 Mikael Høilund (Guest)
on 2008-11-07 22:39
(Received via mailing list)
foo :bar {} # doesn't work.

use doend or parentheses around the arguments.


-- instance_variable_set(%@\@%sample@%%@ew@.succ, Class.new(&proc{def
self.net;$;,
$/='','/';%;.fqn-
cmtkhng;end}));Kernel.send(:"define_method",:method_missing){|
n,$_|$_<<"?kd!jhl";n=split.map{|q|q.succ}*'';puts n.reverse.chomp.tr(*
%w{" a})}
me@example.net
2090378440415ee8eb2193727c198abd?d=identicon&s=25 jdwy (Guest)
on 2008-11-08 20:11
(Received via mailing list)
ah! right you are. that solves the problem. That does seem like a
weird ruby oddity. I wonder if there's a reason for it?
Thanks,
-Jeff
D71ee781fc01856cc187c3ce14374c80?d=identicon&s=25 Mikael Høilund (Guest)
on 2008-11-08 20:28
(Received via mailing list)
On Nov 8, 2008, at 20:07, jdwy wrote:

> ah! right you are. that solves the problem. That does seem like a
> weird ruby oddity. I wonder if there's a reason for it?
> Thanks,
> -Jeff

Sorry about the double post earlier (and lack of special characters),
Mail.app didn't want as I.

The reason it doesn't work is that the parser thinks the {…} means a
hash instead of a block.

--
a,b=%Q=Z,O^NPO\r4_PV\\PI\x15^-\x0\v=,email=%\%%%c\%115%%# Mikael
Hoilund, CTO
okay=%#;hmm=(0...a.size).map{|i|((a[i]-email[i]+2)%128).# of Meta.io
ApS from
chr}.join;!email.gsub!'o',"%c%c"%[3+?0.<<(2),?G.~@];aha=#############
Denmark
hmm.scan(/#{'(.)'*5}/);!puts(email[1..-12]+aha.shift.zip(*aha).join)#
Ruby <3
This topic is locked and can not be replied to.