mirror of
https://github.com/ditkrg/validates_timeliness.git
synced 2026-01-23 06:16:44 +00:00
changed version check to Rails constant as AR VERSION not loaded by
default changed time component validation to use dummy date parts to avoid pre epoch issues
This commit is contained in:
parent
4ee24faad4
commit
d22aa94b89
46
lib/validates_timeliness/date_helper.rb
Normal file
46
lib/validates_timeliness/date_helper.rb
Normal file
@ -0,0 +1,46 @@
|
||||
# This module intercepts the date and time select helpers to allow the
|
||||
# attribute value before type cast to be used as in the select helpers.
|
||||
# This means that an invalid date or time will be redisplayed rather than the
|
||||
# implicitly converted value which occurs by default with Rails.
|
||||
module ValidatesTimeliness
|
||||
module DateHelper
|
||||
|
||||
class InstanceTag
|
||||
TimelinessDateTime = Struct.new(:year, :day, :month, :hour, :min, :sec)
|
||||
|
||||
def to_date_select_tag_with_timeliness(options = {}, html_options = {})
|
||||
@timeliness_date_or_time_tag = true
|
||||
date_or_time_select_without_timeliness(options.merge(:discard_hour => true), html_options)
|
||||
end
|
||||
alias_method_chain :to_date_select_tag, :timeliness
|
||||
|
||||
def to_time_select_tag_with_timeliness(options = {}, html_options = {})
|
||||
@timeliness_date_or_time_tag = true
|
||||
date_or_time_select_without_timeliness(options.merge(:discard_year => true, :discard_month => true), html_options)
|
||||
end
|
||||
alias_method_chain :to_time_select_tag, :timeliness
|
||||
|
||||
def to_datetime_select_tag_with_timeliness(options = {}, html_options = {})
|
||||
@timeliness_date_or_time_tag = true
|
||||
date_or_time_select_without_timeliness(options, html_options)
|
||||
end
|
||||
alias_method_chain :to_date_select_tag, :timeliness
|
||||
|
||||
def value_with_timeliness(object)
|
||||
return value_without_timeliness(object) unless @timeliness_date_or_time_tag
|
||||
|
||||
raw_value = value_before_type_case(object)
|
||||
|
||||
if raw_value.acts_as?(:time) || raw_value.is_a?(Date)
|
||||
return value_without_timeliness(object)
|
||||
end
|
||||
|
||||
time_array = ParseDate.parsedate(raw_value)
|
||||
|
||||
TimelinessDateTime.new(time_array)
|
||||
end
|
||||
alias_method_chain :value, :timeliness
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
11
spec/date_helper_spec.rb
Normal file
11
spec/date_helper_spec.rb
Normal file
@ -0,0 +1,11 @@
|
||||
#require File.dirname(__FILE__) + '/spec_helper'
|
||||
|
||||
#describe ValidatesTimeliness::DateHelper::InstanceTag do
|
||||
|
||||
# it "should return struct for time string" do
|
||||
# object = mock("Model", :birth_date_and_time_before_type_cast => "2008-01-01 12:00:00")
|
||||
# struct = value_with_timeliness(object)
|
||||
# struct.should be_kind_of(DateTimeStruct)
|
||||
# end
|
||||
|
||||
#end
|
||||
@ -9,13 +9,13 @@ if File.exists?(File.dirname(__FILE__) + '/../../../../vendor/rails')
|
||||
require 'activerecord/lib/active_record'
|
||||
require 'railties/lib/rails/version'
|
||||
|
||||
puts "Using vendored ActiveRecord version #{ActiveRecord::VERSION::STRING}"
|
||||
puts "Using vendored Rails version #{Rails::VERSION::STRING}"
|
||||
else
|
||||
require 'active_record'
|
||||
require 'active_record/version'
|
||||
require 'rails/version'
|
||||
|
||||
puts "Using gem ActiveRecord version #{ActiveRecord::VERSION::STRING}"
|
||||
puts "Using gem Rails version #{Rails::VERSION::STRING}"
|
||||
end
|
||||
|
||||
require 'validates_timeliness'
|
||||
|
||||
Loading…
Reference in New Issue
Block a user