Sha256: 24512ded724cf02197a9e626bdfa0cbd4bb0337ccc37ad9c5f27aed15adf5fb7
Contents?: true
Size: 1.88 KB
Versions: 5
Compression:
Stored size: 1.88 KB
Contents
module Picky module Sources # A Couch database source. # # Options: # * url # and all the options of a <tt>RestClient::Resource</tt>. # See http://github.com/archiloque/rest-client. # # Examples: # Picky::Sources::Couch.new(:title, :author, :isbn, url:'localhost:5984') # Picky::Sources::Couch.new(:title, :author, :isbn, url:'localhost:5984', user:'someuser', password:'somepassword') # class Couch < Base # Raised when a Couch source is instantiated without a file. # # Example: # Picky::Sources::Couch.new(:column1, :column2) # without file option # class NoDBGiven < StandardError; end # # def initialize *category_names, options check_gem Hash === options && options[:url] || raise_no_db_given(category_names) @db = RestClient::Resource.new options.delete(:url), options key_format = options.delete :key_format @key_format = key_format && key_format.intern || :to_sym end def to_s self.class.name end # Tries to require the rest_client gem. # def check_gem # :nodoc: require 'rest_client' rescue LoadError warn_gem_missing 'rest-client', 'the CouchDB source' exit 1 end # Harvests the data to index. # # See important note, above. # @@id_key = '_id' def harvest category category_name = category.from.to_s get_data do |doc| yield doc[@@id_key], doc[category_name] || next end end def get_data &block # :nodoc: resp = @db['_all_docs?include_docs=true'].get JSON.parse(resp)['rows']. map{|row| row['doc']}. each &block end def raise_no_db_given category_names # :nodoc: raise NoDBGiven.new(category_names.join(', ')) end end end end
Version data entries
5 entries across 5 versions & 1 rubygems