Class: Procrastinator::Environment
- Inherits:
-
Object
- Object
- Procrastinator::Environment
- Defined in:
- lib/procrastinator/environment.rb
Instance Attribute Summary collapse
-
#persister ⇒ Object
readonly
Returns the value of attribute persister.
-
#processes ⇒ Object
readonly
Returns the value of attribute processes.
-
#queues ⇒ Object
readonly
Returns the value of attribute queues.
Instance Method Summary collapse
- #define_queue(name, properties = {}) ⇒ Object
- #delay(queue: nil, run_at: Time.now.to_i, expire_at: nil, task:) ⇒ Object
-
#initialize(persister) ⇒ Environment
constructor
A new instance of Environment.
- #spawn_workers ⇒ Object
Constructor Details
#initialize(persister) ⇒ Environment
Returns a new instance of Environment.
5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/procrastinator/environment.rb', line 5 def initialize(persister) raise ArgumentError.new('persister cannot be nil') if persister.nil? [:read_tasks, :create_task, :update_task, :delete_task].each do |method| raise MalformedPersisterError.new("persister must repond to ##{method}") unless persister.respond_to? method end @persister = persister @queues = {} @processes = [] end |
Instance Attribute Details
#persister ⇒ Object (readonly)
Returns the value of attribute persister.
3 4 5 |
# File 'lib/procrastinator/environment.rb', line 3 def persister @persister end |
#processes ⇒ Object (readonly)
Returns the value of attribute processes.
3 4 5 |
# File 'lib/procrastinator/environment.rb', line 3 def processes @processes end |
#queues ⇒ Object (readonly)
Returns the value of attribute queues.
3 4 5 |
# File 'lib/procrastinator/environment.rb', line 3 def queues @queues end |
Instance Method Details
#define_queue(name, properties = {}) ⇒ Object
17 18 19 20 21 |
# File 'lib/procrastinator/environment.rb', line 17 def define_queue(name, properties={}) raise ArgumentError.new('queue name cannot be nil') if name.nil? @queues[name] = properties end |
#delay(queue: nil, run_at: Time.now.to_i, expire_at: nil, task:) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/procrastinator/environment.rb', line 40 def delay(queue: nil, run_at: Time.now.to_i, expire_at: nil, task:) raise ArgumentError.new('task may not be nil') if task.nil? raise MalformedTaskError.new('given task does not support #run method') unless task.respond_to? :run if queue.nil? && @queues.size > 1 raise ArgumentError.new('queue must be specified when more than one is registered') else queue ||= @queues.keys.first raise ArgumentError.new(%Q{there is no "#{queue}" queue registered in this environment}) if @queues[queue].nil? end @persister.create_task(queue: queue, run_at: run_at.to_i, initial_run_at: run_at.to_i, expire_at: expire_at.nil? ? nil : expire_at.to_i, task: YAML.dump(task)) end |
#spawn_workers ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/procrastinator/environment.rb', line 23 def spawn_workers @queues.each do |name, props| pid = fork do Process.setproctitle("#{name}-queue-worker") worker = QueueWorker.new(props.merge(name: name, persister: @persister)) monitor_parent worker.work end Process.detach(pid) unless pid.nil? @processes << pid end end |