есть ли порядковый номер для кардинальной функции в рубине или рельсах? - PullRequest
10 голосов
/ 06 мая 2011

Я пытаюсь найти лучший способ выразить свои огурцы, поэтому я ищу порядковую и кардинальную функцию, которая преобразует это:

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

в нечто более динамичное (вместо создания отдельных шагов для каждой строки)

вот пример моих шагов в Интернете

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

Видите, что 0 и 1? Я хочу преобразовать «первый» в кардинальное число, чтобы я мог просто заменить. Вы также можете просто предложить лучший способ объявить кукс:)

ОБНОВЛЕННЫЙ ОТВЕТ Я занимаюсь рефакторингом, но в основном я использовал 1-й вместо первого и использовал to_i для этого.

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

Ответы [ 3 ]

19 голосов
/ 06 мая 2011

Я не совсем понимаю, что именно вы хотите сделать, но вы можете сделать что-то подобное с активной поддержкой:

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

и есть помощник вида действия number_in_words для получения "first", "second" и т. Д.

Я не знаю много о Куксе, извините,

7 голосов
/ 06 мая 2011

Используйте краткий, легко разбираемый порядковый номер:

When /^I fill up the (\d+)(?:st|nd|rd|th) passenger field$/ do |n|
  # etc...
end
4 голосов
/ 03 ноября 2012

Эта функция встроена в Хронический :

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