lib/picky/sources/couch.rb in picky-0.12.3 vs lib/picky/sources/couch.rb in picky-1.0.0

- old
+ new

@@ -1,22 +1,36 @@ module Sources - # Describes a Couch database - # Give it a databse url and optionally username and password + # Raised when a Couch source is instantiated without a file. # - + # Example: + # Sources::Couch.new(:column1, :column2) # without file option + # class NoCouchDBGiven < StandardError; end - + + # A Couch database source. + # + # Options: + # * url + # and all the options of a <tt>RestClient::Resource</tt>. + # See http://github.com/archiloque/rest-client. + # + # Examples: + # 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 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 end - def check_gem + # 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" exit 1 end @@ -27,18 +41,18 @@ category_name = category.from.to_s get_data do |doc| yield doc['_id'].to_i, doc[category_name] || next end end - - def get_data &block + + 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 + def raise_no_db_given category_names # :nodoc: raise NoCouchDBGiven.new(category_names.join(', ')) end end end