Module: Lev::RoutineNesting::ClassMethods

Defined in:
lib/lev/routine_nesting.rb

Instance Method Summary collapse

Instance Method Details

#default_transaction_isolationObject



64
65
66
# File 'lib/lev/routine_nesting.rb', line 64

def default_transaction_isolation
  TransactionIsolation.no_transaction 
end

#nested_routinesObject



68
69
70
# File 'lib/lev/routine_nesting.rb', line 68

def nested_routines
  @nested_routines ||= {}
end

#transaction_isolationObject



60
61
62
# File 'lib/lev/routine_nesting.rb', line 60

def transaction_isolation
  @transaction_isolation ||= default_transaction_isolation
end

#uses_routine(routine_class, options = {}) ⇒ Object

Called at a routine’s class level to foretell which other routines will be used when this routine executes. Helpful for figuring out ahead of time what kind of transaction isolation level should be used.

Raises:

  • (IllegalArgument)


49
50
51
52
53
54
55
56
57
58
# File 'lib/lev/routine_nesting.rb', line 49

def uses_routine(routine_class, options={})
  symbol = options[:as] || routine_class.name.underscore.gsub('/','_').to_sym

  raise IllegalArgument, "Routine #{routine_class} has already been registered" \
    if nested_routines[symbol]

  nested_routines[symbol] = routine_class

  transaction_isolation.replace_if_more_isolated(routine_class.transaction_isolation)
end