Sha256: d66cdc8b27603949fb43921c809222659cee3e2aaa178ff856ed7e03d5706f40

Contents?: true

Size: 931 Bytes

Versions: 1

Compression:

Stored size: 931 Bytes

Contents

# frozen_string_literal: true

require 'blackcal/time_util'
require 'blackcal/array_util'

module Blackcal
  # Week of month range
  class WeeksOfMonthRange
    include Enumerable

    # @return [Array<Integer>] numbers in range
    attr_reader :numbers

    # Initialize numbers range
    # @param [Array<Integer>, Integer, nil] numbers
    # @example
    #   WeeksOfMonthRange.new(1)
    # @example
    #   WeeksOfMonthRange.new([1, 2])
    def initialize(numbers)
      @numbers = ArrayUtil.flatten(numbers) if numbers
    end

    # Returns true if it covers timestamp
    # @return [Boolean]
    def cover?(timestamp)
      return false if numbers.nil? || numbers.empty?

      numbers.include?(TimeUtil.week_of_month(timestamp))
    end

    # @return [Array<Integer>] numbers in range
    alias_method :to_a, :numbers

    # Iterate over range
    # @see #to_a
    def each(&block)
      to_a.each(&block)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
blackcal-0.5.0 lib/blackcal/range/weeks_of_month_range.rb