class CouchdbRebuildViewIndices::Indexer
Class for describing an indexer of CouchDB design documents.
Attributes
options[W]
Public Class Methods
new(options)
click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 21 def initialize(options) @options = @@default_options.merge!(options) @logger = Logger.new(STDOUT) @logger.level = @options[:log_level] @logger.debug 'Running with options:' @logger.debug @options end
Public Instance Methods
run!()
click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 29 def run! docs = get_design_docs(design_docs_uri) docs.each do |doc| next unless doc['doc'].key?('views') iterate_on_views(doc['id'], doc['doc']['views']) end end
Private Instance Methods
design_docs_uri()
click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 55 def design_docs_uri URI::HTTP.build( scheme: @options[:protocol], host: @options[:host], port: @options[:port], path: "/#{@options[:database]}/_all_docs", query: 'startkey=%22_design/%22&endkey=%22_design0%22&include_docs=true' ) end
get_design_docs(uri)
click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 51 def get_design_docs(uri) JSON.parse(make_request_with_retries(uri).body)['rows'] end
iterate_on_views(document_id, views)
click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 39 def iterate_on_views(document_id, views) views.each do |view| @logger.info "Requesting view: #{document_id}/_view/#{view[0]}" res = make_request_with_retries( view_uri(document_id, view[0]), @options[:retries] ) @logger.info 'OK!' if res.code == '200' @logger.info 'Error!' if res.code != '200' end end
make_request_with_retries(uri, retries = 1)
click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 74 def make_request_with_retries(uri, retries = 1) raise Net::ReadTimeout if retries.negative? req = Net::HTTP::Get.new(uri) if @options[:username] && @options[:password] req.basic_auth @options[:username], @options[:password] end begin Net::HTTP.start(uri.hostname, uri.port) { |http| http.request(req) } rescue Net::ReadTimeout make_request_with_retries(url, retries - 1) end end
view_uri(document_id, view)
click to toggle source
# File lib/couchdb_rebuild_view_indices.rb, line 65 def view_uri(document_id, view) URI::HTTP.build( scheme: @options[:protocol], host: @options[:host], port: @options[:port], path: "/#{@options[:database]}/#{document_id}/_view/#{view}" ) end