class Kudzu::Adapter::ActiveRecord::Frontier

Public Class Methods

new(uuid, config = {}) click to toggle source
# File lib/kudzu/adapter/active_record/frontier.rb, line 5
def initialize(uuid, config = {})
  @uuid = uuid
  @monitor = Monitor.new
end

Public Instance Methods

clear() click to toggle source
# File lib/kudzu/adapter/active_record/frontier.rb, line 29
def clear
  Link.where(uuid: @uuid).delete_all
end
dequeue(limit: 1) click to toggle source
# File lib/kudzu/adapter/active_record/frontier.rb, line 18
def dequeue(limit: 1)
  @monitor.synchronize do
    links = Link.where(uuid: @uuid, state: 0).order(id: :asc).limit(limit).to_a
    links.each do |link|
      link.state = 1
      link.save
    end
    links
  end
end
enqueue(links, depth: 0) click to toggle source
# File lib/kudzu/adapter/active_record/frontier.rb, line 10
def enqueue(links, depth: 0)
  @monitor.synchronize do
    links = filter_existing_urls(links)
    Link.import(links)
    links
  end
end

Private Instance Methods

filter_existing_urls(links) click to toggle source
# File lib/kudzu/adapter/active_record/frontier.rb, line 35
def filter_existing_urls(links)
  urls = Array(links).map { |link| link.url }
  existed_urls = Link.where(uuid: @uuid, url: urls).pluck(:url)
  links.select { |link| !existed_urls.include?(link.url) }
end