Sha256: 80b94ac780cb51a219071d21299e1b1761810a4bdc74a2c8580fb555df287907

Contents?: true

Size: 1.35 KB

Versions: 3

Compression:

Stored size: 1.35 KB

Contents

module WithFilters
  module ValuePrep
    # @private
    class DateTimePrep < DefaultPrep
      def prepare_value(value)
        value = super
        date_info = Date._parse(value)

        if date_info[:sec_fraction]
          to_parsed_s(value, {}, date_info[:sec_fraction].to_f)
        else
          {start: prepare_start_value(value), stop: prepare_stop_value(value)}
        end
      end

      def prepare_start_value(value)
        date_info = Date._parse(value)

        if date_info[:sec_fraction]
          to_parsed_s(value, {}, date_info[:sec_fraction])
        else
          to_parsed_s(value)
        end
      end

      def prepare_stop_value(value)
        date_info = Date._parse(value)

        if date_info[:sec_fraction]
          to_parsed_s(value, {}, date_info[:sec_fraction])
        elsif date_info[:sec]
          to_parsed_s(value, seconds: 1)
        elsif date_info[:min]
          to_parsed_s(value, minutes: 1)
        elsif date_info[:hour]
          to_parsed_s(value, hours: 1)
        elsif date_info[:mday]
          to_parsed_s(value, days: 1)
        end
      end

      private

      def to_parsed_s(value, advance_options = {}, sec_decimal = nil)
        parsed_s = Time.zone.parse(value).advance(advance_options).to_s(:db)
        parsed_s << ('%.6f' % sec_decimal)[1..-1] if sec_decimal
        parsed_s
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
with_filters-0.1.2 lib/with_filters/value_prep/date_time_prep.rb
with_filters-0.1.1 lib/with_filters/value_prep/date_time_prep.rb
with_filters-0.1.0 lib/with_filters/value_prep/date_time_prep.rb