Module: SaferInitialize
- Defined in:
- lib/safer_initialize.rb,
lib/safer_initialize/globals.rb,
lib/safer_initialize/railtie.rb,
lib/safer_initialize/version.rb,
lib/safer_initialize/configuration.rb,
lib/safer_initialize/active_record/extensions.rb
Defined Under Namespace
Modules: ActiveRecord
Classes: Configuration, Error, Globals, Railtie
Constant Summary
collapse
- VERSION =
'0.4.0'
Class Method Summary
collapse
Class Method Details
.configuration ⇒ Object
14
15
16
|
# File 'lib/safer_initialize.rb', line 14
def configuration
@configuration ||= Configuration.new
end
|
10
11
12
|
# File 'lib/safer_initialize.rb', line 10
def configure
yield(configuration)
end
|
.defer ⇒ Object
Defer safer_initialize checks queued inside the block until the block
finishes, so associations preloaded by the enclosed queries are already
resolved by the time the checks run (avoids N+1). Globals must not be
mutated inside the block. On an exception the queue is discarded without
flushing. Cannot be nested.
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/safer_initialize.rb', line 30
def defer
raise Error, 'SaferInitialize.defer cannot be nested' if Globals.deferring?
Globals.__deferring = true
Globals.__deferred_checks = []
result = yield
checks = Globals.__deferred_checks
Globals.__deferring = nil
Globals.__deferred_checks = nil
checks.each(&:call)
result
ensure
Globals.__deferring = nil
Globals.__deferred_checks = nil
end
|
.with_safe(&block) ⇒ Object
21
22
23
|
# File 'lib/safer_initialize.rb', line 21
def with_safe(&block)
Globals.set(__safe: true, &block)
end
|