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

.configurationObject



14
15
16
# File 'lib/safer_initialize.rb', line 14

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



10
11
12
# File 'lib/safer_initialize.rb', line 10

def configure
  yield(configuration)
end

.deferObject

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