diff --git a/lib/serial_preference/preference_definition.rb b/lib/serial_preference/preference_definition.rb index 51b0bfd..15f4c78 100644 --- a/lib/serial_preference/preference_definition.rb +++ b/lib/serial_preference/preference_definition.rb @@ -1,7 +1,7 @@ module SerialPreference class PreferenceDefinition - SUPPORTED_TYPES = [:string,:integer,:decimal,:float,:boolean] + SUPPORTED_TYPES = [:string,:integer,:decimal,:float,:boolean,:date] attr_accessor :data_type, :name, :default, :required, :field_type @@ -61,7 +61,7 @@ def value(v) case data_type when :string, :password v.to_s - when :integer + when :integer v.respond_to?(:to_i) ? v.to_i : nil when :float, :real v.respond_to?(:to_f) ? v.to_f : nil @@ -73,6 +73,8 @@ def value(v) return false if v == "0" return false if v.to_s.downcase == "no" !!v + when :date + v.respond_to?(:to_date) ? v.to_date : nil else nil end @@ -80,4 +82,4 @@ def value(v) end end -end \ No newline at end of file +end diff --git a/spec/fixtures/dummy_class.rb b/spec/fixtures/dummy_class.rb index 53e2dc6..ad4fcfa 100644 --- a/spec/fixtures/dummy_class.rb +++ b/spec/fixtures/dummy_class.rb @@ -5,6 +5,7 @@ class DummyClass < ActiveRecord::Base preference :required_number, data_type: :integer, required: :true preference :vat_no, required: false preference :max_invoice_items, data_type: :integer + preference :shipping_date, data_type: :date preference_group "Preferred Ledgers" do income_ledger_id data_type: :integer, default: 1 creditable data_type: :boolean, default: false diff --git a/spec/has_preference_map_spec.rb b/spec/has_preference_map_spec.rb index b6a7ced..280371d 100644 --- a/spec/has_preference_map_spec.rb +++ b/spec/has_preference_map_spec.rb @@ -35,7 +35,6 @@ class OverriddenPreferenceAttributeClass < ActiveRecord::Base end end - context "should define accessors" do it "should have readers available" do d = DummyClass.new @@ -43,6 +42,7 @@ class OverriddenPreferenceAttributeClass < ActiveRecord::Base expect(d.respond_to?(:vat_no)).to be_truthy expect(d.respond_to?(:max_invoice_items)).to be_truthy expect(d.respond_to?(:income_ledger_id)).to be_truthy + expect(d.respond_to?(:shipping_date)).to be_truthy end it "should ensure that the readers returns the correct data" do @@ -57,6 +57,7 @@ class OverriddenPreferenceAttributeClass < ActiveRecord::Base expect(d.respond_to?(:vat_no=)).to be_truthy expect(d.respond_to?(:max_invoice_items=)).to be_truthy expect(d.respond_to?(:income_ledger_id=)).to be_truthy + expect(d.respond_to?(:shipping_date=)).to be_truthy end it "should ensure that the writer write the correct data" do @@ -89,8 +90,6 @@ class OverriddenPreferenceAttributeClass < ActiveRecord::Base end - - =begin context "should define validations" do it "should define presence validation on required preferences" do diff --git a/spec/preference_definition_spec.rb b/spec/preference_definition_spec.rb index c132314..5b84020 100644 --- a/spec/preference_definition_spec.rb +++ b/spec/preference_definition_spec.rb @@ -52,7 +52,7 @@ end it "should be not numerical when data_type is non numerical" do - [:string,:boolean,:password,:whatever].each do |dt| + [:string,:boolean,:password,:whatever,:date].each do |dt| expect(described_class.new("whatever",{data_type: dt})).to_not be_numerical end end @@ -179,6 +179,28 @@ end end + context "should report correct date values" do + before do + @preference = described_class.new("birthday",{data_type: :date}) + end + it "should return correct dates" do + ["", "2014-08-01", "2014-08-01 14:00"].each do |input_val| + expect(@preference.value(input_val)).to eq(input_val.to_date) + end + end + + it "should report default date when input is nil" do + p = described_class.new("birthday",{data_type: :date,default: "1990-05-08"}) + expect(p.value(nil)).to eq(Date.parse("1990-05-08")) + end + + it "should report nil for non date input" do + [[],{}].each do |input_val| + expect(@preference.value(input_val)).to be_nil + end + end + end + end end