Class: RaceGuard::Configuration
- Inherits:
-
Object
- Object
- RaceGuard::Configuration
- Defined in:
- lib/race_guard/configuration.rb
Overview
Per-process configuration. Mutations are protected by a Mutex.
Constant Summary collapse
- DEFAULT_ENVIRONMENTS =
%i[development test].freeze
- DEFAULT_SEVERITY =
:info
Instance Method Summary collapse
- #active? ⇒ Boolean
- #add_protect_detector(detector) ⇒ Object
- #add_reporter(reporter) ⇒ Object
- #clear_protect_detectors ⇒ Object
- #clear_reporters ⇒ Object
- #current_environment ⇒ Object
-
#db_lock_read_modify_write_models(*klasses) ⇒ Object
Classes (e.g. ActiveRecord models) to audit for read-modify-write patterns (Epic 4.1).
- #db_lock_read_modify_write_tracks?(klass) ⇒ Boolean
- #disable(name) ⇒ Object
- #disable_rule(name) ⇒ Object
- #enable(name) ⇒ Object
- #enable_rule(name) ⇒ Object
- #enabled?(name) ⇒ Boolean
- #enabled_rule?(name) ⇒ Boolean
- #environments(*names) ⇒ Object
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
- #protect_detectors ⇒ Object
- #remove_protect_detector(detector) ⇒ Object
- #remove_reporter(reporter) ⇒ Object
- #reporters ⇒ Object
- #severity(*args) ⇒ Object
- #severity_for(name) ⇒ Object
- #to_h ⇒ Object
- #watch_commit_safety(name, &block) ⇒ Object
Constructor Details
#initialize ⇒ Configuration
Returns a new instance of Configuration.
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/race_guard/configuration.rb', line 14 def initialize @mutex = Mutex.new @enabled = Set.new @enabled_rules = Set.new @default_severity = DEFAULT_SEVERITY @severities = {} @environments = DEFAULT_ENVIRONMENTS.dup @reporters = [] @protect_detectors = [] @db_lock_read_modify_write_classes = Set.new end |
Instance Method Details
#active? ⇒ Boolean
85 86 87 |
# File 'lib/race_guard/configuration.rb', line 85 def active? @mutex.synchronize { @environments.include?(current_environment) } end |
#add_protect_detector(detector) ⇒ Object
108 109 110 111 |
# File 'lib/race_guard/configuration.rb', line 108 def add_protect_detector(detector) @mutex.synchronize { @protect_detectors << detector } self end |
#add_reporter(reporter) ⇒ Object
89 90 91 92 |
# File 'lib/race_guard/configuration.rb', line 89 def add_reporter(reporter) @mutex.synchronize { @reporters << reporter } self end |
#clear_protect_detectors ⇒ Object
118 119 120 121 |
# File 'lib/race_guard/configuration.rb', line 118 def clear_protect_detectors @mutex.synchronize { @protect_detectors.clear } self end |
#clear_reporters ⇒ Object
99 100 101 102 |
# File 'lib/race_guard/configuration.rb', line 99 def clear_reporters @mutex.synchronize { @reporters.clear } self end |
#current_environment ⇒ Object
163 164 165 166 |
# File 'lib/race_guard/configuration.rb', line 163 def current_environment raw = ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development' raw.downcase.to_sym end |
#db_lock_read_modify_write_models(*klasses) ⇒ Object
Classes (e.g. ActiveRecord models) to audit for read-modify-write patterns (Epic 4.1). Empty by default: no read tracking / write correlation.
140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/race_guard/configuration.rb', line 140 def db_lock_read_modify_write_models(*klasses) if klasses.compact.empty? return @mutex.synchronize do @db_lock_read_modify_write_classes.to_a end end flat = klasses.length == 1 && klasses.first.is_a?(Array) ? klasses.first : klasses @mutex.synchronize { @db_lock_read_modify_write_classes = Set.new(flat.compact) } self end |
#db_lock_read_modify_write_tracks?(klass) ⇒ Boolean
152 153 154 155 156 157 |
# File 'lib/race_guard/configuration.rb', line 152 def db_lock_read_modify_write_tracks?(klass) k = klass return false unless k.is_a?(Class) @mutex.synchronize { @db_lock_read_modify_write_classes.include?(k) } end |
#disable(name) ⇒ Object
32 33 34 35 36 |
# File 'lib/race_guard/configuration.rb', line 32 def disable(name) sym = name.to_sym @mutex.synchronize { @enabled.delete(sym) } self end |
#disable_rule(name) ⇒ Object
53 54 55 56 57 |
# File 'lib/race_guard/configuration.rb', line 53 def disable_rule(name) sym = name.to_sym @mutex.synchronize { @enabled_rules.delete(sym) } self end |
#enable(name) ⇒ Object
26 27 28 29 30 |
# File 'lib/race_guard/configuration.rb', line 26 def enable(name) sym = name.to_sym @mutex.synchronize { @enabled.add(sym) } self end |
#enable_rule(name) ⇒ Object
47 48 49 50 51 |
# File 'lib/race_guard/configuration.rb', line 47 def enable_rule(name) sym = name.to_sym @mutex.synchronize { @enabled_rules.add(sym) } self end |
#enabled?(name) ⇒ Boolean
38 39 40 41 42 43 44 45 |
# File 'lib/race_guard/configuration.rb', line 38 def enabled?(name) sym = name.to_sym @mutex.synchronize do return false unless @environments.include?(current_environment) @enabled.include?(sym) end end |
#enabled_rule?(name) ⇒ Boolean
59 60 61 62 63 64 65 66 |
# File 'lib/race_guard/configuration.rb', line 59 def enabled_rule?(name) sym = name.to_sym @mutex.synchronize do return false unless @environments.include?(current_environment) @enabled_rules.include?(sym) end end |
#environments(*names) ⇒ Object
78 79 80 81 82 83 |
# File 'lib/race_guard/configuration.rb', line 78 def environments(*names) return @mutex.synchronize { @environments.dup } if names.empty? @mutex.synchronize { @environments = names.map(&:to_sym).freeze } self end |
#protect_detectors ⇒ Object
123 124 125 |
# File 'lib/race_guard/configuration.rb', line 123 def protect_detectors @mutex.synchronize { @protect_detectors.dup } end |
#remove_protect_detector(detector) ⇒ Object
113 114 115 116 |
# File 'lib/race_guard/configuration.rb', line 113 def remove_protect_detector(detector) @mutex.synchronize { @protect_detectors.delete(detector) } self end |
#remove_reporter(reporter) ⇒ Object
94 95 96 97 |
# File 'lib/race_guard/configuration.rb', line 94 def remove_reporter(reporter) @mutex.synchronize { @reporters.delete(reporter) } self end |
#reporters ⇒ Object
104 105 106 |
# File 'lib/race_guard/configuration.rb', line 104 def reporters @mutex.synchronize { @reporters.dup } end |
#severity(*args) ⇒ Object
68 69 70 71 |
# File 'lib/race_guard/configuration.rb', line 68 def severity(*args) @mutex.synchronize { apply_severity_args(args) } self end |
#severity_for(name) ⇒ Object
73 74 75 76 |
# File 'lib/race_guard/configuration.rb', line 73 def severity_for(name) sym = name.to_sym @mutex.synchronize { @severities[sym] || @default_severity } end |
#to_h ⇒ Object
159 160 161 |
# File 'lib/race_guard/configuration.rb', line 159 def to_h @mutex.synchronize { to_h_unsafe } end |
#watch_commit_safety(name, &block) ⇒ Object
127 128 129 130 131 132 133 134 135 136 |
# File 'lib/race_guard/configuration.rb', line 127 def watch_commit_safety(name, &block) raise ArgumentError, 'watch_commit_safety requires a block' unless block sym = name.to_sym @mutex.synchronize do dsl = CommitSafety::WatcherDSL.new(sym) block.call(dsl) end self end |