Sha256: 4dde210acaa47db8a3487e0f7c889f691ed060e1602b296044ef713d9552bd8a
Contents?: true
Size: 1.92 KB
Versions: 3
Compression:
Stored size: 1.92 KB
Contents
module Cul module Fedora class Solr attr_reader :url def initialize(config = {}) @url = config[:url] || raise(ArgumentError, "must provide url") end def item_exists?(item) !rsolr.find(:filters => {:id => item.pid_escaped})["response"]["docs"].empty? end def rsolr @rsolr ||= RSolr.connect(:url => @url) end def ingest(options = {}) format = options.delete(:format) || raise(ArgumentError, "needs format") items = options.delete(:items) || [] items = [items] unless items.kind_of?(Array) collections = options.delete(:collections) || [] collections = [collections] unless collections.kind_of?(Array) overwrite = options.delete(:overwrite) || false process = options.delete(:process) || nil skip = options.delete(:skip) || nil collections.each do |collection| items |= collection.listMembers end items.sort! to_add = [] results = Hash.new { |h,k| h[k] = [] } errors = {} items.each do |i| if process && skip && skip > 0 skip -= 1 next end if item_exists?(i) unless overwrite results[:skipped] << i.pid next end end result_hash = i.send("index_for_#{format}", options) results[result_hash[:status]] << i.pid case result_hash[:status] when :success to_add << result_hash[:results] when :error errors[i.pid] = result_hash[:error_message] end if process process -= 1 break if process <= 0 end end rsolr.add(to_add) rsolr.commit return {:results => results, :errors => errors} end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
cul-fedora-0.7.0 | lib/cul-fedora/solr.rb |
cul-fedora-0.6.0.pre | lib/cul-fedora/solr.rb |
cul-fedora-0.5.2 | lib/cul-fedora/solr.rb |