Class: Chronos::Application::IgnorePolicy

Inherits:
Object
  • Object
show all
Defined in:
lib/chronos/application/ignore_policy.rb

Overview

Stores and evaluates bounded application-owned exception ignore rules.

Examples:

policy.add { |notice| notice.exception_class == "ExpectedError" }

Instance Method Summary collapse

Constructor Details

#initialize(rules, limit, logger) ⇒ IgnorePolicy

Returns a new instance of IgnorePolicy.



16
17
18
19
20
21
# File 'lib/chronos/application/ignore_policy.rb', line 16

def initialize(rules, limit, logger)
  @rules = Array(rules).dup
  @limit = limit
  @logger = logger
  @mutex = Mutex.new
end

Instance Method Details

#add(rule = nil, &block) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/chronos/application/ignore_policy.rb', line 23

def add(rule = nil, &block)
  candidate = rule || block
  return false unless candidate.respond_to?(:call)

  @mutex.synchronize do
    return false if @rules.length >= @limit

    @rules << candidate
  end
  true
rescue StandardError
  false
end

#ignored?(notice) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
# File 'lib/chronos/application/ignore_policy.rb', line 37

def ignored?(notice)
  rules = @mutex.synchronize { @rules.dup }
  rules.any? { |rule| safely_matches?(rule, notice) }
rescue StandardError
  false
end