Module: Lev::Routine::ClassMethods

Defined in:
lib/lev/routine.rb

Instance Method Summary collapse

Instance Method Details

#[](*args, &block) ⇒ Object



205
206
207
208
209
# File 'lib/lev/routine.rb', line 205

def [](*args, &block)
  result = call(*args, &block)
  result.errors.raise_exception_if_any!
  result.outputs.send(@express_output)
end

#active_job_queueObject



217
218
219
# File 'lib/lev/routine.rb', line 217

def active_job_queue
  @active_job_queue || :default
end

#call(*args, &block) ⇒ Object



201
202
203
# File 'lib/lev/routine.rb', line 201

def call(*args, &block)
  new.call(*args, &block)
end

#class_to_symbol(klass) ⇒ Object



260
261
262
# File 'lib/lev/routine.rb', line 260

def class_to_symbol(klass)
  klass.name.underscore.gsub('/','_').to_sym
end

#delegates_toObject



247
248
249
# File 'lib/lev/routine.rb', line 247

def delegates_to
  @delegates_to
end

#express_outputObject



243
244
245
# File 'lib/lev/routine.rb', line 243

def express_output
  @express_output
end

#nested_routinesObject



251
252
253
# File 'lib/lev/routine.rb', line 251

def nested_routines
  @nested_routines ||= {}
end

#perform_later(*args, &block) ⇒ Object



212
213
214
215
# File 'lib/lev/routine.rb', line 212

def perform_later(*args, &block)
  # Delegate to a subclass of Lev::Routine::ActiveJob::Base
  Lev::ActiveJob::Base.perform_later(self, *args, &block)
end

#raise_fatal_errors?Boolean

Returns:

  • (Boolean)


255
256
257
258
# File 'lib/lev/routine.rb', line 255

def raise_fatal_errors?
  @raise_fatal_errors ||
    (Lev.configuration.raise_fatal_errors && @raise_fatal_errors.nil?)
end

#transaction_isolationObject



239
240
241
# File 'lib/lev/routine.rb', line 239

def transaction_isolation
  @transaction_isolation ||= TransactionIsolation.mysql_default
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:

  • (Lev.configuration.illegal_argument_error)


225
226
227
228
229
230
231
232
233
234
235
236
237
# File 'lib/lev/routine.rb', line 225

def uses_routine(routine_class, options={})
  symbol = options[:as] || class_to_symbol(routine_class)

  raise Lev.configuration.illegal_argument_error, "Routine #{routine_class} has already been registered" \
    if nested_routines[symbol]

  nested_routines[symbol] = {
    routine_class: routine_class,
    options: options
  }

  transaction_isolation.replace_if_more_isolated(routine_class.transaction_isolation)
end