Sha256: b88cd33b2524abb76c3df57e05b63877a29fa60e460de5a38837521d6d5e0acc

Contents?: true

Size: 1.79 KB

Versions: 211

Compression:

Stored size: 1.79 KB

Contents

module Comee
  module Core
    class Period
      attr_accessor :start, :finish

      def initialize(start, finish)
        @start = start
        @finish = finish
      end

      def ==(other)
        self.class == other.class && @start == other.start && @finish == other.finish
      end

      def <(other)
        instance_of?(other.class) && @start < other.start && @finish < other.finish
      end

      def >(other)
        instance_of?(other.class) && @start > other.start && @finish > other.finish
      end

      def valid?
        finish > start
      end

      def past?
        raise(StandardError, "Period must be valid.") unless valid?

        finish < Date.current
      end

      def current?
        raise(StandardError, "Period must be valid.") unless valid?

        start <= Date.current && finish > Date.current
      end

      def future?
        raise(StandardError, "Period must be valid.") unless valid?

        start > Date.current
      end

      def contains?(period)
        return true if start <= period.start && finish >= period.finish

        false
      end

      def contained_by?(period)
        return true if start >= period.start && finish <= period.finish

        false
      end

      def disjoint?(period)
        @finish < period.start || period.finish < @start
      end

      def overlaps?(period)
        return true if period.start <= @start && @start <= period.finish

        return true if @start <= period.start && period.start <= @finish

        false
      end

      def self.compute_next_valid_period(period1, period2)
        return period2 if period1.disjoint?(period2) && period1 < period2

        return nil if period1 > period2 || period1.contains?(period2)

        Period.new(period1.finish.advance(days: 1), period2.finish)
      end
    end
  end
end

Version data entries

211 entries across 211 versions & 1 rubygems

Version Path
comee_core-0.1.43 app/utils/comee/core/period.rb
comee_core-0.1.42 app/utils/comee/core/period.rb
comee_core-0.1.41 app/utils/comee/core/period.rb
comee_core-0.1.40 app/utils/comee/core/period.rb
comee_core-0.1.39 app/utils/comee/core/period.rb
comee_core-0.1.38 app/utils/comee/core/period.rb
comee_core-0.1.37 app/utils/comee/core/period.rb
comee_core-0.1.36 app/utils/comee/core/period.rb
comee_core-0.1.35 app/utils/comee/core/period.rb
comee_core-0.1.34 app/utils/comee/core/period.rb
comee_core-0.1.33 app/utils/comee/core/period.rb