Sha256: f0f7f6809630a6a7bc2ffa29d262084f586483a8095205a36875ed63c1979876
Contents?: true
Size: 1.34 KB
Versions: 1
Compression:
Stored size: 1.34 KB
Contents
# frozen_string_literal: true module Blackcal # Weekday range class WeekdayRange include Enumerable # Map weekday name to number WEEKDAY_MAP = { sunday: 0, monday: 1, tuesday: 2, wednesday: 3, thursday: 4, friday: 5, saturday: 6, }.freeze # Map weekday number to name WEEKDAY_INVERT_MAP = WEEKDAY_MAP.invert.freeze # @return [Array<Symbol>] weekdays in range attr_reader :weekdays # Initialize weekday range # @param [Array<String>, Array<Symbol>, Array<Integer>, String, Symbol, Integer, nil] weekdays # @example # WeekdayRange.new(:monday) # @example # WeekdayRange.new([:monday, :thursday]) def initialize(weekdays) return unless weekdays @weekdays = Array(weekdays).map do |week| next WEEKDAY_INVERT_MAP.fetch(week) if week.is_a?(Integer) week.downcase.to_sym end end # Returns true if it covers timestamp # @return [Boolean] def cover?(timestamp) return false if @weekdays.nil? || @weekdays.empty? weekdays.any? do |weekday| WEEKDAY_MAP.fetch(weekday) == timestamp.wday end end # @return [Array<Symbol>] weekdays in range alias_method :to_a, :weekdays # 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/weekday_range.rb |