Sha256: 5ec4501feb0068c01a0f3992ffa84ea7784abdf2e707dc52468d56fd08db82bc

Contents?: true

Size: 1.37 KB

Versions: 4

Compression:

Stored size: 1.37 KB

Contents

module Jets::Event::Dsl
  module ScheduledEvent
    include RateExpression
    # Public: Creates CloudWatch Event Rule
    #
    # expression - The rate expression.
    #
    # Examples
    #
    #   rate("10 minutes")
    #   rate("10 minutes", description: "Hard event")
    #
    def rate(expression, props = {})
      expression = rate_expression(expression) # normalize the rate expression
      md = expression.match(/\d+\s+\w+/)
      raise ArgumentError, "Invalid rate expression: #{expression}" unless md

      expression = "rate(#{expression})"
      scheduled_event(expression, props)
    end

    # Public: Creates CloudWatch Event Rule
    #
    # expression - The cron expression.
    #
    # Examples
    #
    #   cron("0 */12 * * ? *")
    #   cron("0 */12 * * ? *", description: "Hard event")
    #
    def cron(expression, props = {})
      expression = normalize_cron_expression(expression)
      scheduled_event("cron(#{expression})", props)
    end

    def normalize_cron_expression(expr)
      parts = expr.split(" ")
      # AWS Cron expressions require ? for the day of the week field
      parts[-2] = "?" if parts[-2] == "*"
      parts.join(" ")
    end

    def scheduled_event(expression, props = {})
      props = props.merge(ScheduleExpression: expression)
      rule_event(props)
    end

    # interface method
    def rule_event(props = {})
      {}
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jets-6.0.5 lib/jets/event/dsl/scheduled_event.rb
jets-6.0.4 lib/jets/event/dsl/scheduled_event.rb
jets-6.0.3 lib/jets/event/dsl/scheduled_event.rb
jets-6.0.2 lib/jets/event/dsl/scheduled_event.rb