class Kudzu::Adapter::ActiveRecord::Repository

Public Instance Methods

delete(page) click to toggle source
# File lib/kudzu/adapter/active_record/repository.rb, line 16
def delete(page)
  page.destroy if page
end
find_by_url(url) click to toggle source
# File lib/kudzu/adapter/active_record/repository.rb, line 5
def find_by_url(url)
  Page.find_or_initialize_by(url: url)
end
register(page) click to toggle source
# File lib/kudzu/adapter/active_record/repository.rb, line 9
def register(page)
  ActiveRecord::Base.transaction do
    page.save
    save_chunks(page) if page.body
  end
end

Private Instance Methods

each_chunk(body, size) { |chunked, i| ... } click to toggle source
# File lib/kudzu/adapter/active_record/repository.rb, line 36
def each_chunk(body, size)
  pos = 0
  i = 0
  while (chunked = body.byteslice(pos, size))
    yield chunked, i
    pos += size
    i += 1
  end
end
save_chunks(page) click to toggle source
# File lib/kudzu/adapter/active_record/repository.rb, line 22
def save_chunks(page)
  chunk_num = 0
  each_chunk(page.body, ActiveRecord.chunk_size) do |chunked, i|
    chunk = page.chunks.select_without_data.offset(i).limit(1).first_or_initialize
    chunk.data = chunked
    chunk.save
    chunk_num = i + 1
  end

  if page.chunks.count - chunk_num > 0
    page.chunks.select_without_data.offset(chunk_num).each(&:delete)
  end
end