ruby whitespace

¿Hay diferentes sensibilidades/configuraciones para espacios en blanco en ruby?

Tengo un proyecto RoR, donde una llamada de registro activa tiene muchos 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 bien con esto en mi mac, pero en el servidor ubuntu se ejecuta, se queja del hecho de que .joins está en una línea separada (inesperado, esperando kEND)

¿lo que da?

1
intentado tanto 1.8 como 1.9.3
agregado el autor kolosy, fuente

5 Respuestas

Esta sintaxis era introducida en ruby 1.9.1:

Language core changes

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

Lo más probable es que su servidor ejecute una versión anterior de Ruby, es decir, 1.9.0 o 1.8.x.

8
agregado

Mueva el período a la línea anterior. Si está analizando línea por línea,

foo = bar

parece una declaración completa, y la siguiente línea, tomada por separado, es un error de sintaxis:

.baz

Sin embargo, esto no puede ser una declaración:

foo = bar.

y el analizador también tiene que agregar la siguiente línea:

baz

(que da el mismo análisis que foo = bar.baz , como se esperaba).

5
agregado
@muistooshort: Sí, de hecho. Ya cubierto, y muy bien, por Stefan. Di un voto positivo y todo.
agregado el autor Amadan, fuente

Tal vez

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
agregado

Poner puntos en el final de las líneas

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
agregado

También puede probar varias combinaciones de las siguientes, donde ( termina la línea, o ) comienza la línea. Aquí estoy mostrando ambos, y puedes ajustar a tu gusto.

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
agregado