Sha256: 74b147e414eeccf8d4cbd97ad661a76c39178722097a52747b42f4a2c1af3660

Contents?: true

Size: 1.32 KB

Versions: 5

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Tables
    module Collection
      module Type
        class Date < Value
          include Helpers::Range

          define_range_patterns /\d{4}-\d\d-\d\d/

          def type
            :date
          end

          def serialize(value)
            if value.is_a?(::Date)
              value.to_fs(:db)
            else
              super
            end
          end

          def examples_for(...)
            [
              ::Date.current,
              ::Date.yesterday,
              ::Date.current.beginning_of_week..,
              ::Date.current.beginning_of_month..,
              ::Date.current.beginning_of_year..,
            ].map { |d| serialize(d) }
          end

          private

          ISO_DATE = /\A(?<year>\d{4})-(?<month>\d\d)-(?<day>\d\d)\z/

          def cast_value(value)
            return value unless value.is_a?(::String)

            if /\A(?<year>\d{4})-(?<month>\d\d)-(?<day>\d\d)\z/ =~ value
              new_date(year.to_i, month.to_i, day.to_i)
            end
          end

          def new_date(year, mon, mday)
            return nil if year.nil? || (year.zero? && mon.zero? && mday.zero?)

            ::Date.new(year, mon, mday)
          rescue ArgumentError, TypeError
            nil
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
katalyst-tables-3.4.1 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.4.0 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.3.4 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.3.3 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.3.2 app/models/katalyst/tables/collection/type/date.rb