Module: RaceGuard::Interceptors

Defined in:
lib/race_guard/interceptors.rb,
lib/race_guard/interceptors/emitter.rb,
lib/race_guard/interceptors/faraday.rb,
lib/race_guard/interceptors/net_http.rb,
lib/race_guard/interceptors/active_job.rb,
lib/race_guard/interceptors/action_mailer.rb

Overview

Optional Epic 3 hooks: emit RaceGuard.report events when common async / side-effect APIs run (see Task 3.2). Install is explicit and idempotent.

Defined Under Namespace

Modules: ActionMailerDeliverLater, ActiveJobPerformLater, Emitter, FaradayRunRequest, NetHttpRequest

Constant Summary collapse

INSTALL_MUTEX =
Mutex.new

Class Method Summary collapse

Class Method Details

.install_action_mailer!Object



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/race_guard/interceptors.rb', line 41

def install_action_mailer!
  INSTALL_MUTEX.synchronize do
    return self if @installed.include?(:action_mailer)

    if defined?(::ActionMailer::MessageDelivery)
      mod = ActionMailerDeliverLater
      delivery = ::ActionMailer::MessageDelivery
      delivery.prepend(mod) unless delivery.ancestors.include?(mod)
      @installed.add(:action_mailer)
    end
  end
  self
end

.install_active_job!Object



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/race_guard/interceptors.rb', line 28

def install_active_job!
  INSTALL_MUTEX.synchronize do
    return self if @installed.include?(:active_job)

    if defined?(::ActiveJob::Base)
      sc = ::ActiveJob::Base.singleton_class
      sc.prepend(ActiveJobPerformLater) unless sc.ancestors.include?(ActiveJobPerformLater)
      @installed.add(:active_job)
    end
  end
  self
end

.install_all!Object



20
21
22
23
24
25
26
# File 'lib/race_guard/interceptors.rb', line 20

def install_all!
  install_active_job!
  install_action_mailer!
  install_net_http!
  install_faraday!
  self
end

.install_faraday!Object



69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/race_guard/interceptors.rb', line 69

def install_faraday!
  INSTALL_MUTEX.synchronize do
    return self if @installed.include?(:faraday)

    if defined?(::Faraday::Connection)
      mod = FaradayRunRequest
      ::Faraday::Connection.prepend(mod) unless ::Faraday::Connection.ancestors.include?(mod)
      @installed.add(:faraday)
    end
  end
  self
end

.install_net_http!Object



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/race_guard/interceptors.rb', line 55

def install_net_http!
  require 'net/http' unless defined?(::Net::HTTP)
  INSTALL_MUTEX.synchronize do
    return self if @installed.include?(:net_http)

    if defined?(::Net::HTTP)
      mod = NetHttpRequest
      ::Net::HTTP.prepend(mod) unless ::Net::HTTP.ancestors.include?(mod)
      @installed.add(:net_http)
    end
  end
  self
end

.reset_install_registry_for_tests!Object



82
83
84
85
# File 'lib/race_guard/interceptors.rb', line 82

def reset_install_registry_for_tests!
  INSTALL_MUTEX.synchronize { @installed.clear }
  nil
end