module Berater::DSL

Constants

KEYWORDS

Public Instance Methods

eval(&block) click to toggle source
# File lib/berater/dsl.rb, line 24
def eval &block
  @keywords ||= Class.new do
    # create a class where DSL keywords are methods
    KEYWORDS.each do |keyword|
      define_singleton_method(keyword) { keyword }
    end
  end

  install
  @keywords.class_eval &block
ensure
  uninstall
end
new(key, capacity = nil, **opts, &block) click to toggle source
Calls superclass method
# File lib/berater/dsl.rb, line 4
def new(key, capacity = nil, **opts, &block)
  if capacity.nil?
    unless block_given?
      raise ArgumentError, 'expected either capacity or block'
    end

    capacity, more_opts = DSL.eval(&block)
    opts.merge!(more_opts) if more_opts
  else
    if block_given?
      raise ArgumentError, 'expected either capacity or block, not both'
    end
  end

  super(key, capacity, **opts)
end

Private Instance Methods

at_once() click to toggle source
# File lib/berater/dsl.rb, line 51
def at_once
  [ self ]
end
install() click to toggle source
# File lib/berater/dsl.rb, line 44
def install
  Integer.class_eval do
    def per(unit)
      [ self, interval: unit ]
    end
    alias every per

    def at_once
      [ self ]
    end
    alias concurrently at_once
    alias at_a_time at_once
  end
end
per(unit) click to toggle source
# File lib/berater/dsl.rb, line 46
def per(unit)
  [ self, interval: unit ]
end
uninstall() click to toggle source
# File lib/berater/dsl.rb, line 59
def uninstall
  Integer.remove_method :per
  Integer.remove_method :every

  Integer.remove_method :at_once
  Integer.remove_method :concurrently
  Integer.remove_method :at_a_time
end