2011-05-06 9 views
10

estoy tratando de encontrar una mejor manera de expresar mis pepinos así que estoy buscando un ordinal de la función cardinal que convierte esta:¿hay una función ordinal a cardinal en rubí o rieles?

When I fill up the first passenger field 
Then I should see the passenger list update with the first passenger details 
When I follow "Add Another Passenger" 
Then I should see a second passenger field 
When I fill up the second passenger field 
Then I should see the passenger list update with the second passenger details 

en algo más dinámico (en lugar de crear pasos separados para cada línea)

aquí es una muestra de mi web pasos

When /^I fill up the first passenger field$/ do 
    fill_in("booking_passengers_attributes_0_first_name", :with => "Blah") 
    fill_in("booking_passengers_attributes_0_last_name", :with => "blah") 
    select("5' to 6'", :from => "booking_passengers_attributes_0_height") 
    select("100 to 150lbs", :from => "booking_passengers_attributes_0_weight") 
end 

When /^I fill up the second passenger field$/ do 
    fill_in("booking_passengers_attributes_1_first_name", :with => "Wee") 
    fill_in("booking_passengers_attributes_1_last_name", :with => "Sir") 
    select("5' to 6'", :from => "booking_passengers_attributes_1_height") 
    select("150 to 200lbs", :from => "booking_passengers_attributes_1_weight") 
end 

ver que 0 y 1? Deseo convertir "primero" en un número cardinal para poder sustituirlo. También se puede simplemente sugerir una mejor manera de declarar los pepinos :)

RESPUESTA ACTUALIZADO estoy en el medio de refactorización pero básicamente he utilizado primera vez de primero y utilizado to_i en eso.

When /^I fill up the "([^"]*)" passenger field$/ do |id| 
    input_id = id.to_i - 1 
    fill_in("booking_passengers_attributes_#{input_id}_first_name", :with => id) 
    fill_in("booking_passengers_attributes_#{input_id}_last_name", :with => "Passenger") 
    select("5' to 6'", :from => "booking_passengers_attributes_#{input_id}_height") 
    select("100 to 150lbs", :from => "booking_passengers_attributes_#{input_id}_weight") 
end 

Respuesta

7

Use la forma corta, ordinales fácilmente analizable:

When /^I fill up the (\d+)(?:st|nd|rd|th) passenger field$/ do |n| 
    # etc... 
end 
+1

Sí, pensé que podría usar eso. mucho mejor sin el st | nd | rd | th embargo, podría simplemente usar n.to_i y convertirlo de inmediato en un número. ¡Gracias por el aviso! – corroded

+1

En caso de que alguien más tenga un problema con esto, debe usar (?: St | nd | rd | th) para que no sea "| th el campo del pasajero" (que incorrectamente coincidirá con "I fill up the 1st") –

19

Realmente no entiendo por completo, exactamente lo que quiere hacer, pero se puede hacer algo como esto con el apoyo activo:

1.ordinalize # => "1st" 
    2.ordinalize # => "2nd" 
    1002.ordinalize # => "1002nd" 

y hay una number_in_words vista de la acción de ayuda a llegar " ", 'segundo', etc.

no sé mucho acerca de cukes lo siento,

+0

quería algo al revés donde digo: algo así como "primera" .to_cardinal # => "1" o algo – corroded

+0

oh ok, lo siento No estaba de ayuda – loosecannon

+1

No veo 'number_in_words' en los documentos y no parece funcionar para mí. – Dex

4

Esta función está integrada en Chronic:

irb(main):001:0> require 'chronic' 
=> true 
irb(main):002:0> Chronic::Numerizer.numerize("eighty-fifth").to_i 
=> 85 
Cuestiones relacionadas