Sha256: ea5bc25ce0a58cf5109da8e664b572b369f400b334ac9c29cfaafc2a2807a454

Contents?: true

Size: 737 Bytes

Versions: 3

Compression:

Stored size: 737 Bytes

Contents

# frozen_string_literal: true

module Wayfarer
  module Middleware
    class Dedup
      extend Base

      def call(task)
        # Was task routed by a previous controller already?
        return yield if task.metadata.action

        return if task.barrier.seen?(task.url)

        begin
          yield if block_given?
        rescue StandardError => e
          task.barrier.unsee(task.url)
          raise e
        end

        staged_urls = task.metadata.staged_urls
        return if staged_urls.none?

        inclusion = task.barrier.peek(staged_urls.to_a)
        unseen = staged_urls.zip(inclusion).reject { |_, seen| seen }.map(&:first)
        task.metadata.staged_urls = SortedSet.new(unseen)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wayfarer-0.4.6 lib/wayfarer/middleware/dedup.rb
wayfarer-0.4.5 lib/wayfarer/middleware/dedup.rb
wayfarer-0.4.4 lib/wayfarer/middleware/dedup.rb