Sha256: 4b31072eaa448c16b8deb7b06a0df6e0d4419ff77424a5d1b2f186a5a66fbe86

Contents?: true

Size: 1.28 KB

Versions: 2

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

module Miteru
  class Orchestrator < Service
    def call
      logger.info("#{non_cached_websites.length} websites loaded in total.") if verbose?
      array_of_args = non_cached_websites.map { |website| [website.url, website.source] }
      Jobs::CrawleJob.perform_bulk(array_of_args, batch_size: Miteru.config.sidekiq_batch_size)
    end

    #
    # @return [Array<Miteru::Website>]
    #
    def websites
      @websites ||= [].tap do |out|
        feeds.each do |feed|
          result = feed.result
          if result.success?
            websites = result.value!
            logger.info("Feed:#{feed.source} has #{websites.length} websites.") if verbose?
            out << websites
          else
            logger.warn("Feed:#{feed.source} failed - #{result.failure}")
          end
        end
      end.flatten.uniq(&:url)
    end

    #
    # @return [Array<Miteru::Website>]
    #
    def non_cached_websites
      @non_cached_websites ||= [].tap do |out|
        out << if cache?
          websites.reject { |website| cache.cached?(website.url) }
        else
          websites
        end
      end.flatten.uniq(&:url)
    end

    #
    # @return [Array<Miteru::Feeds::Base>]
    #
    def feeds
      @feeds ||= Miteru.feeds.map(&:new)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
miteru-3.0.1 lib/miteru/orchestrator.rb
miteru-3.0.0 lib/miteru/orchestrator.rb