From 9b330ea7beace5f3a0befaca0970409652c8420e Mon Sep 17 00:00:00 2001 From: Zamith Date: Fri, 6 Feb 2015 12:34:07 +0000 Subject: [PATCH] Adds support for DateTime inputs --- lib/formulaic/form.rb | 1 + lib/formulaic/inputs.rb | 1 + lib/formulaic/inputs/date_time_input.rb | 18 +++++ spec/features/fill_in_user_form_spec.rb | 13 ++++ spec/fixtures/user_form.html | 88 +++++++++++++++++++++++++ 5 files changed, 121 insertions(+) create mode 100644 lib/formulaic/inputs/date_time_input.rb diff --git a/lib/formulaic/form.rb b/lib/formulaic/form.rb index 4453541..8347aa9 100644 --- a/lib/formulaic/form.rb +++ b/lib/formulaic/form.rb @@ -5,6 +5,7 @@ class Form ATTRIBUTE_INPUT_MAP = { ActiveSupport::TimeWithZone => Formulaic::Inputs::DateInput, Date => Formulaic::Inputs::DateInput, + DateTime => Formulaic::Inputs::DateTimeInput, Array => Formulaic::Inputs::ArrayInput, String => Formulaic::Inputs::StringInput, Fixnum => Formulaic::Inputs::StringInput, diff --git a/lib/formulaic/inputs.rb b/lib/formulaic/inputs.rb index 5b48497..faebb93 100644 --- a/lib/formulaic/inputs.rb +++ b/lib/formulaic/inputs.rb @@ -2,5 +2,6 @@ require 'formulaic/inputs/array_input' require 'formulaic/inputs/boolean_input' require 'formulaic/inputs/date_input' +require 'formulaic/inputs/date_time_input' require 'formulaic/inputs/string_input' require 'formulaic/inputs/file_input' diff --git a/lib/formulaic/inputs/date_time_input.rb b/lib/formulaic/inputs/date_time_input.rb new file mode 100644 index 0000000..bc5bd94 --- /dev/null +++ b/lib/formulaic/inputs/date_time_input.rb @@ -0,0 +1,18 @@ +module Formulaic + module Inputs + class DateTimeInput < DateInput + def fill + select_date(value, from: label) + end + + private + + def select_date(date_time, options) + super + field = find_field(options[:from].to_s)["id"].gsub(/_\di/, "") + select date_time.hour.to_s, from: "#{field}_4i" + select date_time.minute.to_s, from: "#{field}_5i" + end + end + end +end diff --git a/spec/features/fill_in_user_form_spec.rb b/spec/features/fill_in_user_form_spec.rb index 499aa51..f216cb5 100644 --- a/spec/features/fill_in_user_form_spec.rb +++ b/spec/features/fill_in_user_form_spec.rb @@ -70,6 +70,19 @@ expect(page.find('#user_date_of_birth_3i').value).to eq('2') end + it 'finds and fills a datetime field' do + visit 'user_form' + form = Formulaic::Form.new(:user, :new, date_of_birth: DateTime.new(1980, 1, 2, 10, 30)) + + form.fill + + expect(page.find('#user_date_of_birth_1i').value).to eq('1980') + expect(page.find('#user_date_of_birth_2i').value).to eq('1') + expect(page.find('#user_date_of_birth_3i').value).to eq('2') + expect(page.find('#user_date_of_birth_4i').value).to eq('10') + expect(page.find('#user_date_of_birth_5i').value).to eq('30') + end + it 'finds and checks a boolean field' do visit 'user_form' form = Formulaic::Form.new(:user, :new, terms_of_service: true) diff --git a/spec/fixtures/user_form.html b/spec/fixtures/user_form.html index 1633571..4b304a0 100644 --- a/spec/fixtures/user_form.html +++ b/spec/fixtures/user_form.html @@ -199,6 +199,94 @@ + +