multiparameter extension for AR

This commit is contained in:
Adam Meehan
2010-08-03 22:59:29 +10:00
parent 81030a6ed8
commit 0f41671b32
4 changed files with 60 additions and 1 deletions

View File

@@ -1,9 +1,14 @@
module ValidatesTimeliness
module Extensions
autoload :DateTimeSelect, 'validates_timeliness/extensions/date_time_select'
autoload :DateTimeSelect, 'validates_timeliness/extensions/date_time_select'
autoload :MultiparameterParser, 'validates_timeliness/extensions/multiparameter_parser'
end
def self.enable_date_time_select_extension!
::ActionView::Helpers::InstanceTag.send(:include, ValidatesTimeliness::Extensions::DateTimeSelect)
end
def self.enable_multiparameter_parser!
::ActiveRecord::Base.send(:include, ValidatesTimeliness::Extensions::MultiparameterParser)
end
end

View File

@@ -0,0 +1,31 @@
module ValidatesTimeliness
module Extensions
module MultiparameterParser
extend ActiveSupport::Concern
included do
alias_method_chain :instantiate_time_object, :timeliness
end
private
# Stricter handling of date and time values from multiparameter
# assignment from the date/time select view helpers
#
def instantiate_time_object_with_timeliness(name, values)
unless Date.valid_civil?(*values[0..2])
value = [values[0], *values[1..2].map {|s| s.to_s.rjust(2,"0")} ].join("-")
value += ' ' + values[3..5].map {|s| s.to_s.rjust(2, "0") }.join(":") unless values[3..5].empty?
return value
end
if self.class.send(:create_time_zone_conversion_attribute?, name, column_for_attribute(name))
Time.zone.local(*values)
else
Time.time_with_datetime_fallback(@@default_timezone, *values)
end
end
end
end
end