Sha256: 97baef26fdd5d211531c6c872a15445291fb0c7d555e46410959ea01ad32f4be

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

require 'timeloop/core_ext'
require 'timeloop/version'

module Kernel
  def every(value, opts = {})
    maximum = parse_maximum_value(opts.fetch(:maximum)) if opts.key? :maximum
    frequency = parse_frequency(value)

    if maximum.nil?
      i = 0
      loop do
        yield(i) if block_given?
        sleep frequency
        
        i += 1
      end
    else
      maximum.times do |i|
        yield(i) if block_given?
        sleep frequency
      end
    end
  end

  private

  def parse_frequency(frequency)
    case frequency
    when Numeric
      frequency
    when :second, 'second'
      1.second
    when :minute, 'second'
      1.minute
    when :hour, 'hour'
      1.hour
    when :day, 'day'
      1.day
    when :month, 'month'
      1.month
    when :year, 'year'
      1.year
    else
      fail ArgumentError.new('wrong type of argument (should be a Numeric, Symbol or String)')
    end
  end

  def parse_maximum_value(maximum)
    case maximum
    when Enumerator
      maximum.count
    when Integer
      maximum
    else
      fail ArgumentError.new('wrong type of argument (should be an Enumerator or Integer)')
    end
  end
end

class Object
  include Kernel
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
timeloop-1.0.3 lib/timeloop.rb