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