Named scope lambda string substitution problem


#1

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


#2

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.


#3

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


#4

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})}
removed_email_address@domain.invalid


#5

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})}
removed_email_address@domain.invalid


#6

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


#7

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