Module: TheUsual

Defined in:
lib/theusual.rb,
lib/theusual/failure.rb,
lib/theusual/version.rb

Constant Summary collapse

MODULES =
[
  'array',
  'failure',
  'hash',
  'ipaddr',
  'mongoid',
  'net/ssh',
  'nil',
  'numeric',
  'sequel',
  'string',
  'time',
]
VERSION =
'0.1.1'

Class Method Summary collapse

Class Method Details

.include_fn(fn) ⇒ Object



77
78
79
# File 'lib/theusual.rb', line 77

def self.include_fn fn
  @include_fns << fn
end

.included(base) ⇒ Object



82
83
84
85
86
87
88
# 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) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 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 = {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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