私はキュウリのテーブルを持っています。フィールドの1つは、今日の日付を入力したい日付です。今日の日付をテーブルにハードコーディングせずにこれを行う方法はありますか?
Time.now.strftime("%Y-%m-%d")
基本的にはテーブルに入って、壊れないようにしたいと思います。
テーブルはステップ定義によって処理されているため、文字列「TODAYS_DATE」などの特別なプレースホルダーをテーブルに配置し、を使用map_column!
して列のデータを必要な形式に処理できます。
たとえば、次の表が与えられます
Given the following user records
| username | date |
| alice | 2001-01-01 |
| bob | TODAYS_DATE |
ステップ定義では、
Given /^the following user records$/ do |table|
table.map_column!('date') do |date|
if date == 'TODAYS_DATE'
date = Time.now.strftime("%Y-%m-%d")
end
date
end
table.hashes.each do |hash|
#Whatever you need to do
end
end
これは、ハッシュを要求したときにのみ値を変更することに注意してください。tableとtable.rawは同じままですが、行ハッシュが必要な場合は常に、map_column内のコードによって変換されます。
この質問が出されてから何年も経っていますが、最近キュウリと同じようなことをしていたので、興味があれば別の解決策を紹介します...
Given the following user records
| username | date |
| bob | Time.now.strftime("%Y-%m-%d") |
そして、ステップ定義では、日付文字列をeval()するだけです。
Given /^the following user records$/ do |table|
table.hashes.each do |hash|
date = eval(hash["date"])
end
end
Brandonの例とは異なり、これでは、ロジックを追加しなくても正確な日付を入力することはできません。
それがあなたがしたいことであるならば、bodnarbmの答えはかなり良いです。私自身の提案は、timecopgemを見てみることです。これを使用して時間を既知の日に設定し、それに応じてテーブルを調整します。
フィクスチャファイルに基づいて、次のコードを作成しました。
特徴:
Given the following "Inquirers":
| id | email | start_date |
| 1 | alberto@deco.proteste.pt | <%= Time.now %> |
ヘルパー:
Given(/^the following "(.*?)":$/) do |model, table|
table.hashes.each do |hash|
attributes = Rack::Utils.parse_nested_query(hash.to_query)
object = model_name.classify.constantize.new
attributes.keys.each do |key|
object.send("#{key}=", ERB.new(value).result())
end
...
end
end