fixe for attribute write and raw value methods

add new generalised method to get raw value without dependence on
before_type_cast which may not be supported in ORMs

call super to define full ORM write method default
This commit is contained in:
Adam Meehan
2010-08-11 13:45:06 +10:00
parent 30fb0e5192
commit e3928e78eb
3 changed files with 36 additions and 14 deletions

View File

@@ -4,19 +4,35 @@ describe ValidatesTimeliness::AttributeMethods do
before do
Employee.validates_datetime :birth_datetime
Employee.define_attribute_methods
Person.validates_datetime :birth_datetime
Person.define_attribute_methods [:birth_datetime]
end
it 'should define attribute write method for validated attributes' do
Employee.instance_methods(false).should include("birth_datetime=")
it 'should define _timeliness_raw_value_for instance method' do
Person.instance_methods.should include('_timeliness_raw_value_for')
end
context "attribute write method" do
it 'should cache attribute raw value' do
r = Employee.new
r.birth_datetime = date_string = '2010-01-01'
r._timeliness_raw_value_for(:birth_datetime).should == date_string
end
end
it 'should define attribute before_type_cast method for validated attributes' do
Employee.instance_methods(false).should include("birth_datetime_before_type_cast")
end
context "before_type_cast method" do
it 'should be defined on class if ORM supports it' do
Employee.instance_methods(false).should include("birth_datetime_before_type_cast")
end
it 'should store original raw value on attribute write' do
r = Employee.new
r.birth_datetime = '2010-01-01'
r.birth_datetime_before_type_cast.should == '2010-01-01'
it 'should not be defined if ORM does not support it' do
Person.instance_methods(false).should_not include("birth_datetime_before_type_cast")
end
it 'should return original value' do
r = Employee.new
r.birth_datetime = date_string = '2010-01-01'
r.birth_datetime_before_type_cast.should == date_string
end
end
end