class SplitDmy::DateValidator
Public Class Methods
new(object, attribute)
click to toggle source
# File lib/split_dmy/date_validator.rb, line 3 def initialize(object, attribute) @split_day = object.instance_variable_get("@#{attribute}_day") @split_month = object.instance_variable_get("@#{attribute}_month") @split_year = object.instance_variable_get("@#{attribute}_year").to_i @object = object @attr = attribute end
Public Instance Methods
any_errors?()
click to toggle source
# File lib/split_dmy/date_validator.rb, line 37 def any_errors? !partials_valid? || partials_valid_date_fails? end
build_date()
click to toggle source
# File lib/split_dmy/date_validator.rb, line 26 def build_date date = Date.new( @split_year.to_i, parse_month(@split_month), @split_day.to_i ) date if partials_match_date(date) rescue false end
parse_month(val)
click to toggle source
# File lib/split_dmy/date_validator.rb, line 16 def parse_month(val) if valid_fixnum?(val, 12) || valid_numeric_string?(val, 12) result = val.to_i else mon_name = valid_month_name?(val) result = mon_name.present? ? mon_name : val end result.to_i end
partial_updated()
click to toggle source
# File lib/split_dmy/date_validator.rb, line 11 def partial_updated new_date = build_date partials_valid? && new_date ? new_date : nil end
Private Instance Methods
partials_match_date(date)
click to toggle source
# File lib/split_dmy/date_validator.rb, line 51 def partials_match_date(date) date.day == @split_day.to_i && date.month == parse_month(@split_month).to_i && date.year == @split_year.to_i end
partials_valid?()
click to toggle source
# File lib/split_dmy/date_validator.rb, line 43 def partials_valid? { d: valid_day?, m: valid_month?, y: valid_year? }.values.all? end
partials_valid_date_fails?()
click to toggle source
# File lib/split_dmy/date_validator.rb, line 47 def partials_valid_date_fails? partials_valid? && !build_date end
valid_day?()
click to toggle source
# File lib/split_dmy/date_validator.rb, line 57 def valid_day? (valid_fixnum?(@split_day, 31) || valid_numeric_string?(@split_day, 31)) end
valid_fixnum?(x, max)
click to toggle source
# File lib/split_dmy/date_validator.rb, line 76 def valid_fixnum?(x, max) x.is_a?(Fixnum) && x > 0 && x <= max end
valid_month?()
click to toggle source
# File lib/split_dmy/date_validator.rb, line 61 def valid_month? ( valid_fixnum?(@split_month, 12) || valid_numeric_string?(@split_month, 12) || valid_month_name?(@split_month) ) end
valid_month_name?(month)
click to toggle source
# File lib/split_dmy/date_validator.rb, line 88 def valid_month_name?(month) short_months = I18n.t('date.abbr_month_names') full_months = I18n.t('date.month_names') if short_months.include?(month.to_s.capitalize) short_months.index(month.capitalize) elsif full_months.include?(month.to_s.capitalize) full_months.index(month.capitalize) end end
valid_numeric_string?(x, max)
click to toggle source
# File lib/split_dmy/date_validator.rb, line 80 def valid_numeric_string?(x, max) x =~ /^[0-9]{1,2}$/ && x.to_i <= max end
valid_numeric_string_year?(x)
click to toggle source
# File lib/split_dmy/date_validator.rb, line 84 def valid_numeric_string_year?(x) x =~ /^[0-9]{4}$/ && x.to_i <= 3333 && x.to_i > 0000 end
valid_year?()
click to toggle source
# File lib/split_dmy/date_validator.rb, line 69 def valid_year? ( valid_fixnum?(@split_year, 3333) || valid_numeric_string_year?(@split_year) ) end