Sha256: 292ea146a963c1a2d27bb8bc7c8c92d041c0dc7b19e6758676541bd82493a2b5

Contents?: true

Size: 1.69 KB

Versions: 9

Compression:

Stored size: 1.69 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 to_param(value)
            case value
            when ::Date, ::DateTime, ::Time, ActiveSupport::TimeWithZone
              value.to_date.to_fs(:db)
            else
              super
            end
          end

          def suggestions(scope, attribute)
            _, model, column = model_and_column_for(scope, attribute)

            [
              *super(scope, attribute, limit: 6, order: :desc),
              database_suggestion(attribute:, model:, column:, value: ::Date.current.beginning_of_week..),
              database_suggestion(attribute:, model:, column:, value: ::Date.current.beginning_of_month..),
              database_suggestion(attribute:, model:, column:, value: 1.month.ago.all_month),
              database_suggestion(attribute:, model:, column:, value: 1.year.ago.all_year),
            ]
          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

9 entries across 9 versions & 1 rubygems

Version Path
katalyst-tables-3.6.2 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.6.1 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.6.0 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.5.5 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.5.4 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.5.3 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.5.2 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.5.1 lib/katalyst/tables/collection/type/date.rb
katalyst-tables-3.5.0 lib/katalyst/tables/collection/type/date.rb