Module: Safely::Methods

Included in:
Safely
Defined in:
lib/safely/core.rb

Instance Method Summary collapse

Instance Method Details

#safely(tag: nil, sample: nil, except: nil, only: nil, silence: nil, throttle: false, default: nil) ⇒ Object Also known as: yolo



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/safely/core.rb', line 37

def safely(tag: nil, sample: nil, except: nil, only: nil, silence: nil, throttle: false, default: nil)
  yield
rescue *Array(only || StandardError) => e
  raise e if Array(except).any? { |c| e.is_a?(c) }
  raise e if Safely.raise_envs.include?(Safely.env)
  if sample ? rand < 1.0 / sample : true
    begin
      unless Array(silence).any? { |c| e.is_a?(c) } || Safely.throttled?(e, throttle)
        tag = Safely.tag if tag.nil?
        if tag && e.message
          e = e.dup # leave original exception unmodified
          message = e.message
          e.define_singleton_method(:message) do
            "[#{tag == true ? "safely" : tag}] #{message}"
          end
        end
        Safely.report_exception(e)
      end
    rescue => e2
      $stderr.puts "FAIL-SAFE #{e2.class.name}: #{e2.message}"
    end
  end
  default
end