espaço em branco rubi

Existem diferentes sensibilidades/configurações para o espaço em branco no rubi?

Eu tenho um projeto de RoR, onde uma chamada de registro ativa tem muitos componentes:

    max_stuff = FooSummary.select("max(stuff) as stuff")
                        .joins(:foo => :bar)
                        .where("user_id = ? and record_date < ?", r.user_id, r.record_date)
                        .group("user_id")
                        .first

1.9.3 funciona bem com isso no meu mac, mas no servidor ubuntu ele roda, ele reclama sobre o fato de que .joins está em uma linha separada (inesperado. Esperando kEND)

o que da?

1
adicionado editado
Visualizações: 1
tentei tanto 1.8 e 1.9.3
adicionado o autor kolosy, fonte

5 Respostas

Essa sintaxe foi introduzida no ruby 1.9.1:

Language core changes

  • New syntax and semantics
    • Newlines allowed before ternary colon operator (:) and method call dot operator (.)

Muito provavelmente o seu servidor está executando uma versão mais antiga do Ruby, ou seja, 1.9.0 ou 1.8.x.

8
adicionado

Mova o período para a linha anterior. Se analisar linha por linha,

foo = bar

parece uma declaração completa, e a próxima linha, tomada separadamente, é um erro de sintaxe:

.baz

No entanto, isso não pode ser uma afirmação:

foo = bar.

e o analisador sabe que tem que anexar a próxima linha também:

baz

(o que dá o mesmo parse como foo = bar.baz , como esperado).

5
adicionado
@muistooshort: Sim, de fato. Já coberto e muito bem, por Stefan. Eu dei um upvote e tudo mais.
adicionado o autor Amadan, fonte

Talvez

max_stuff = FooSummary.select("max(stuff) as stuff") \
                    .joins(:foo => :bar) \
                    .where("user_id = ? and record_date < ?", r.user_id, r.record_date) \
                    .group("user_id") \
                    .first
1
adicionado

Coloque dottes no final das linhas

max_stuff = FooSummary.select("max(stuff) as stuff").
                       joins(:foo => :bar).
                       where("user_id = ? and record_date < ?", r.user_id, r.record_date).
                       group("user_id").
                       first
0
adicionado

Você também pode tentar várias combinações dos seguintes, onde ( termina a linha, ou ) inicia a linha. Aqui estou mostrando os dois e você pode ajustar ao seu gosto.

max_stuff = FooSummary.select(
                              "max(stuff) as stuff"
                     ).joins(
                             :foo => :bar
                     ).where(
                             "user_id = ? and record_date < ?", r.user_id, r.record_date
                     ).group(
                             "user_id"
                     ).first
0
adicionado