 
Build structured, flexible and reusable jobs.
Share them and let non-technical people know how things are done.
Manage errors, retries and manual human tasks.
Lightweight, Simple, Intuitive.
LevelUp lets you build different kinds of tasks and compose them to create a runnable job. Define task graphs where each task contains its own business logic implemented in ruby. Jobs can be performed synchronously or asynchronously by background workers.
# app/models/hard_job.rb
class HardJob < LevelUp::Job
  job do
    task: :start, transitions: first_task
    task: :first_task, transitions: :second_task
    task: :second_task, transitions: :end
  end
end
      
# app/models/hard_job/first_task.rb
module HardJob
  class FirstTask < LevelUp::Task
    def run
      puts "Doing hard work"
    end
  end
end
      # create a new job instance job = HardJob.create(key: 'job-key') # execute the job synchronously job.boot # or asynchronously job.boot_async!