Module: Lev::Routine::ClassMethods

Defined in:
lib/lev/routine.rb

Instance Method Summary collapse

Instance Method Details

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



207
208
209
210
211
# File 'lib/lev/routine.rb', line 207

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

#active_job_enqueue_optionsObject



222
223
224
# File 'lib/lev/routine.rb', line 222

def active_job_enqueue_options
  @active_job_enqueue_options || { queue: :default }
end

#call(*args, &block) ⇒ Object



203
204
205
# File 'lib/lev/routine.rb', line 203

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

#class_to_symbol(klass) ⇒ Object



264
265
266
# File 'lib/lev/routine.rb', line 264

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

#create_statusObject



268
269
270
# File 'lib/lev/routine.rb', line 268

def create_status
  create_status_proc.call
end

#delegates_toObject



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

def delegates_to
  @delegates_to
end

#express_outputObject



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

def express_output
  @express_output
end

#find_status(id) ⇒ Object



272
273
274
# File 'lib/lev/routine.rb', line 272

def find_status(id)
  find_status_proc.call(id)
end

#nested_routinesObject



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

def nested_routines
  @nested_routines ||= {}
end

#perform_later(*args, &block) ⇒ Object



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

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

#raise_fatal_errors?Boolean

Returns:

  • (Boolean)


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

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

#set(options) ⇒ Object



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

def set(options)
  Lev::ActiveJob::ConfiguredJob.new(self, options)
end

#transaction_isolationObject



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

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)


229
230
231
232
233
234
235
236
237
238
239
240
241
# File 'lib/lev/routine.rb', line 229

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