Sha256: a51c5888d25ccaa46869822e532629ce147a13cd6f88c95030272bce76608400

Contents?: true

Size: 1.88 KB

Versions: 10

Compression:

Stored size: 1.88 KB

Contents

module Virtus
  class Coercion

    # Common time coercion methods
    module TimeCoercions

      # Coerce given value to String
      #
      # @example
      #   Virtus::Coercion::Time.to_string(time)  # => "Wed Jul 20 10:30:41 -0700 2011"
      #
      # @param [Date,Time,DateTime] value
      #
      # @return [String]
      #
      # @api public
      def to_string(value)
        value.to_s
      end

      # Coerce given value to Time
      #
      # @example
      #   Virtus::Coercion::DateTime.to_time(datetime)  # => Time object
      #
      # @param [Date,DateTime] value
      #
      # @return [Time]
      #
      # @api public
      def to_time(value)
        coerce_with_method(value, :to_time)
      end

      # Coerce given value to DateTime
      #
      # @example
      #   Virtus::Coercion::Time.to_datetime(time)  # => DateTime object
      #
      # @param [Date,Time] value
      #
      # @return [DateTime]
      #
      # @api public
      def to_datetime(value)
        coerce_with_method(value, :to_datetime)
      end

      # Coerce given value to Date
      #
      # @example
      #   Virtus::Coercion::Time.to_date(time)  # => Date object
      #
      # @param [Time,DateTime] value
      #
      # @return [Date]
      #
      # @api public
      def to_date(value)
        coerce_with_method(value, :to_date)
      end

    private

      # Try to use native coercion method on the given value
      #
      # Falls back to String-based parsing
      #
      # @param [Date,DateTime,Time] value
      # @param [Symbol] method
      #
      # @return [Date,DateTime,Time]
      #
      # @api private
      def coerce_with_method(value, method)
        coerced = super
        if coerced.equal?(value)
          String.public_send(method, to_string(value))
        else
          coerced
        end
      end

    end # module TimeCoercions
  end # class Coercion
end # module Virtus

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
virtus-0.5.5 lib/virtus/coercion/time_coercions.rb
virtus-0.5.4 lib/virtus/coercion/time_coercions.rb
virtus-0.5.3 lib/virtus/coercion/time_coercions.rb
fragrant-0.0.5 vendor/bundle/ruby/1.9.1/gems/virtus-0.5.2/lib/virtus/coercion/time_coercions.rb
virtus-0.5.2 lib/virtus/coercion/time_coercions.rb
virtus-0.5.1 lib/virtus/coercion/time_coercions.rb
virtus-0.5.0 lib/virtus/coercion/time_coercions.rb
virtus-0.4.2 lib/virtus/coercion/time_coercions.rb
virtus-0.4.1 lib/virtus/coercion/time_coercions.rb
virtus-0.4.0 lib/virtus/coercion/time_coercions.rb