Sha256: 9260ceb073f215d6b98dcac4181d2629ff0142526441ed0e06d975872a21d3d8

Contents?: true

Size: 1.92 KB

Versions: 4

Compression:

Stored size: 1.92 KB

Contents

module ValidatesTimeliness
  module Conversion

    def type_cast_value(value, type)
      return nil if value.nil?

      value = value.in_time_zone if value.acts_like?(:time) && @timezone_aware
      value = case type
      when :time
        dummy_time(value)
      when :date
        value.to_date
      when :datetime
        value.to_time
      end
      if options[:ignore_usec] && value.is_a?(Time)
        ValidatesTimeliness::Parser.make_time(Array(value).reverse[4..9], @timezone_aware)
      else
        value
      end
    end

    def dummy_time(value)
      time = if value.acts_like?(:time)
        value = value.in_time_zone if @timezone_aware
        [value.hour, value.min, value.sec]
      else
        [0,0,0]
      end
      values = ValidatesTimeliness.dummy_date_for_time_type + time
      ValidatesTimeliness::Parser.make_time(values, @timezone_aware)
    end

    def evaluate_option_value(value, record)
      case value
      when Time, Date
        value
      when String
        parse(value)
      when Symbol
        if !record.respond_to?(value) && restriction_shorthand?(value)
          ValidatesTimeliness.restriction_shorthand_symbols[value].call
        else
          evaluate_option_value(record.send(value), record)
        end
      when Proc
        result = value.arity > 0 ? value.call(record) : value.call
        evaluate_option_value(result, record)
      else
        value
      end
    end

    def restriction_shorthand?(symbol)
      ValidatesTimeliness.restriction_shorthand_symbols.keys.include?(symbol)
    end

    def parse(value)
      if ValidatesTimeliness.use_plugin_parser
        ValidatesTimeliness::Parser.parse(value, @type, :timezone_aware => @timezone_aware, :format => options[:format], :strict => false)
      else
        @timezone_aware ? Time.zone.parse(value) : value.to_time(ValidatesTimeliness.default_timezone)
      end
    rescue ArgumentError, TypeError
      nil
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
validates_timeliness-3.0.0.beta.4 lib/validates_timeliness/conversion.rb
validates_timeliness-3.0.0.beta.3 lib/validates_timeliness/conversion.rb
validates_timeliness-3.0.0.beta.2 lib/validates_timeliness/conversion.rb
validates_timeliness-3.0.0.beta lib/validates_timeliness/conversion.rb