lib/wayfarer/base.rb in wayfarer-0.4.3 vs lib/wayfarer/base.rb in wayfarer-0.4.4

- old
+ new

@@ -1,50 +1,60 @@ # frozen_string_literal: true module Wayfarer class Base < ActiveJob::Base - include Wayfarer::Middleware::Worker - extend Forwardable + include Wayfarer::Middleware::Controller - after_enqueue do |_job| + use Wayfarer::Middleware::Stage + use Wayfarer::Middleware::Dedup + use Wayfarer::Middleware::Normalize + use Wayfarer::Middleware::Router + use Wayfarer::Middleware::Fetch + use Wayfarer::Middleware::Dispatch + + ErrorHandler = lambda do |&block| + lambda do |job, error| + task = job.arguments.first + task.barrier.seen?(task.url) + task.gc.run + block.call(job, error) + end + end + + after_enqueue do |job| + task = job.arguments.first task.counter.increment end - after_perform { |job| GC.new(job).run } + after_perform do |job| + task = job.arguments.first + task.gc.run + end - rescue_from(StandardError) { GC.new(self).run } + rescue_from(StandardError) do + task = arguments.first + task.gc.run + end - def self.retry_on(*argv) - super(*argv) do |job, error| - job.task.barrier.seen?(job.task.url) - GC.new(job).run - yield job, error if block_given? - end + def self.retry_on(*argv, &block) + super(*argv, &ErrorHandler.call(&block)) end - def self.discard_on(*argv) - super(*argv) do |job, error| - job.task.barrier.seen?(job.task.url) - GC.new(job).run - yield job, error if block_given? - end + def self.discard_on(*argv, &block) + super(*argv, &ErrorHandler.call(&block)) end - def self.crawl_later(url, batch: SecureRandom.uuid) - perform_later(Task.new(url, batch)) + def self.crawl(url, batch: SecureRandom.uuid) + Task.new(url, batch).tap do |task| + perform_later(task) + end end def retry_job(...) super(...) # increments the counter by re-enqueuing the job + task = arguments.first task.counter.decrement end - def perform(task) - task.job = self - chain.call(task) - end - - def task - arguments.first - end + alias perform call end end