lib/picky/sources/couch.rb in picky-1.2.0 vs lib/picky/sources/couch.rb in picky-1.2.1

- old
+ new

@@ -33,32 +33,81 @@ # Sources::Couch.new(:title, :author, :isbn, url:'localhost:5984') # Sources::Couch.new(:title, :author, :isbn, url:'localhost:5984', user:'someuser', password:'somepassword') # class Couch < Base + # If your Couch DB uses UUID keys, use + # Sources::Couch.new(:title, keys: Sources::Couch::UUIDKeys.new) + # Do not forget to reconvert the UUID Key from an integer in the client: + # uuid = UUIDTools::UUID.parse_int(id) + # uuid.to_s + # + class UUIDKeys + def initialize + # Tries to require the uuidtools gem. + # + begin + require 'uuidtools' + rescue LoadError + puts_gem_missing 'uuidtools', 'UUID keys in a CouchDB source' + exit 1 + end + end + def to_i id + uuid = UUIDTools::UUID.parse id + uuid.to_i + end + end + + # If your Couch DB uses Hex keys, use + # Sources::Couch.new(:title, keys: Sources::Couch::HexKeys.new) + # Do not forget to reconvert the Hex Key from an integer in the client: + # id.to_s(16) + # + class HexKeys + def to_i id + id.hex + end + end + + # If your Couch DB uses Integer keys, use + # Sources::Couch.new(:title, keys: Sources::Couch::IntegerKeys.new) + # + class IntegerKeys + def to_i id + id + end + 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 + + @to_i_strategy = options.delete(:keys) || HexKeys.new end # Tries to require the rest_client gem. # def check_gem # :nodoc: require 'rest_client' rescue LoadError - puts "Rest-client gem missing!\nTo use the CouchDB source, you need to:\n 1. Add the following line to Gemfile:\n gem 'rest-client'\n 2. Then, run:\n bundle update\n" + puts_gem_missing 'rest-client', 'the CouchDB source' exit 1 end # Harvests the data to index. # # See important note, above. # + @@id_key = '_id' def harvest type, category category_name = category.from.to_s get_data do |doc| - yield doc['_id'].hex, doc[category_name] || next + yield @to_i_strategy.to_i(doc[@@id_key]), doc[category_name] || next end end def get_data &block # :nodoc: resp = @db['_all_docs?include_docs=true'].get