Sha256: 653aaf4cf0430d3ac8a1a82375d1ffc2073902ae833d9d9d4261f9430994c3d2

Contents?: true

Size: 1.62 KB

Versions: 3

Compression:

Stored size: 1.62 KB

Contents

# frozen_string_literal: true

class Code
  class Object
    class Date < Object
      def initialize(*args, **_kargs, &)
        raw = args.map(&:to_s).join("-").presence || ::Date.current.to_s
        @raw = ::Date.parse(raw)
      rescue ::Date::Error
        raise Error, "#{raw.inspect} is an invalid date"
      end

      def self.call(**args)
        operator = args.fetch(:operator, nil)

        case operator.to_s
        when "tomorrow"
          sig(args)
          code_tomorrow
        when "yesterday"
          sig(args)
          code_yesterday
        when "today"
          sig(args)
          code_today
        when "now"
          sig(args)
          code_now
        when "hour"
          sig(args)
          code_hour
        else
          super
        end
      end

      def self.code_hour
        code_today.code_hour
      end

      def self.code_now
        ::Time.zone ||= Time::DEFAULT_ZONE
        new(::Time.zone.now.beginning_of_day)
      end

      def self.code_today
        ::Time.zone ||= Time::DEFAULT_ZONE
        new(::Time.zone.now.beginning_of_day)
      end

      def self.code_tomorrow
        ::Time.zone ||= Time::DEFAULT_ZONE
        new(::Time.zone.tomorrow.beginning_of_day)
      end

      def self.code_yesterday
        ::Time.zone ||= Time::DEFAULT_ZONE
        new(::Time.zone.yesterday.beginning_of_day)
      end

      def call(**args)
        operator = args.fetch(:operator, nil)

        case operator.to_s
        when "hour"
          sig(args)
          code_hour
        else
          super
        end
      end

      def code_hour
        Integer.new(0)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
code-ruby-1.1.3 lib/code/object/date.rb
code-ruby-1.1.1 lib/code/object/date.rb
code-ruby-1.1.0 lib/code/object/date.rb