module TheUsual

Constants

MODULES
VERSION

Public Class Methods

include_fn(fn) click to toggle source
# File lib/theusual.rb, line 77
def self.include_fn fn
  @include_fns << fn
end
included(base) click to toggle source
# File lib/theusual.rb, line 82
def self.included base
  @include_fns.each do |name|
    base.send :define_method, name do |*args|
      TheUsual.method(name).send *args
    end
  end
end
load(*modules) click to toggle source
# File lib/theusual.rb, line 25
def self.load *modules
  # some modules need to be explicitly required
  needs_load = [
    'ipaddr',
    'mongoid',
    'net/ssh',
    'sequel',
  ]

  # some of our filenames need to be remapped
  paths = {
    'net/ssh' => 'ssh',
  }

  raise ArgumentError 'did you mean load(:all) ?' if modules.empty?

  modules.map! &:to_s
  to_load = if [:all, 'all', '*'].include? modules.first
    MODULES
  else
    modules
  end

  to_load.flatten.map(&:to_s).map do |_module|
    unless MODULES.include? _module
      raise ArgumentError.new(
        "can not load utils for module: #{_module}"
      )
    end

    begin
      # load standard lib
      require _module if needs_load.include? _module

      # monkey patch
      name = paths[_module] || _module
      require_relative "theusual/#{name}.rb"

      _module
    rescue LoadError
      # underlying gem not installed
      # for :all, just skip monkey patch
      if modules.include? _module
        raise ArgumentError.new(
          "missing library gem: gem install #{_module}"
        )
      end
    end
  end.compact
end
retry(opts = {}) { || ... } click to toggle source
# File lib/theusual/failure.rb, line 3
def self.retry opts = {}
  tries = opts[:tries] || 2

  exceptions = Array(opts[:e])
  exceptions += Array(opts[:exceptions])
  if exceptions.empty?
    exceptions = [ Exception ]
  end

  # callback = opts[:callback]

  res = nil
  tries.times do
    begin
      res = yield
      break
    rescue Exception => e
      raise unless exceptions.any? {|x| e < x }
    end
  end

  res
end