Sha256: 1c9ba70fa4f9cea23681dea0d239942d5ddfda03adef7ddf1b3714ba876b1f5c

Contents?: true

Size: 1.69 KB

Versions: 5

Compression:

Stored size: 1.69 KB

Contents

require "montrose/errors"
require "montrose/options"

module Montrose
  # Abstract class for special recurrence rule required
  # in all instances of Recurrence. Frequency describes
  # the base recurrence interval.
  #
  class Frequency
    include Montrose::Rule

    FREQUENCY_TERMS = {
      "second" => "Secondly",
      "minute" => "Minutely",
      "hour" => "Hourly",
      "day" => "Daily",
      "week" => "Weekly",
      "month" => "Monthly",
      "year" => "Yearly"
    }.freeze

    FREQUENCY_KEYS = FREQUENCY_TERMS.keys.freeze

    attr_reader :time, :starts

    # Factory method for instantiating the appropriate Frequency
    # subclass.
    #
    def self.from_options(opts)
      frequency = opts.fetch(:every) { fail ConfigurationError, "Please specify the :every option" }
      class_name = FREQUENCY_TERMS.fetch(frequency.to_s) do
        fail "Don't know how to enumerate every: #{frequency}"
      end

      Montrose::Frequency.const_get(class_name).new(opts)
    end

    # @private
    def self.assert(frequency)
      FREQUENCY_TERMS.key?(frequency.to_s) or fail ConfigurationError,
        "Don't know how to enumerate every: #{frequency}"

      frequency.to_sym
    end

    def initialize(opts = {})
      opts = Montrose::Options.merge(opts)
      @time = nil
      @starts = opts.fetch(:start_time)
      @interval = opts.fetch(:interval)
    end

    def matches_interval?(time_diff)
      (time_diff % @interval).zero?
    end
  end
end

require "montrose/frequency/daily"
require "montrose/frequency/hourly"
require "montrose/frequency/minutely"
require "montrose/frequency/monthly"
require "montrose/frequency/secondly"
require "montrose/frequency/weekly"
require "montrose/frequency/yearly"

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
montrose-0.6.0 lib/montrose/frequency.rb
montrose-0.5.0 lib/montrose/frequency.rb
montrose-0.4.3 lib/montrose/frequency.rb
montrose-0.4.2 lib/montrose/frequency.rb
montrose-0.4.1 lib/montrose/frequency.rb