class Rummageable::Index
Public Class Methods
new(base_url, index_name, options = {})
click to toggle source
# File lib/rummageable.rb, line 11 def initialize(base_url, index_name, options = {}) @index_url = [base_url, index_name.sub(%r{^/}, '')].join('/') @logger = options[:logger] || NullLogger.instance @batch_size = options.fetch(:batch_size, 20) @retry_delay = options.fetch(:retry_delay, 2) @attempts = options.fetch(:attempts, 3) end
Public Instance Methods
add(entry)
click to toggle source
# File lib/rummageable.rb, line 19 def add(entry) repeatedly do make_request(:post, documents_url, MultiJson.encode([entry])) end end
add_batch(entries)
click to toggle source
# File lib/rummageable.rb, line 25 def add_batch(entries) entries.each_slice(@batch_size) do |batch| repeatedly do make_request(:post, documents_url, MultiJson.encode(batch)) end end end
amend(link, changes)
click to toggle source
# File lib/rummageable.rb, line 33 def amend(link, changes) repeatedly do make_request(:post, documents_url(link: link), changes) end end
commit()
click to toggle source
# File lib/rummageable.rb, line 52 def commit repeatedly do make_request(:post, [@index_url, 'commit'].join('/'), MultiJson.encode({})) end end
delete(id, options = {})
click to toggle source
# File lib/rummageable.rb, line 39 def delete(id, options = {}) type = options[:type] || 'edition' repeatedly do make_request(:delete, documents_url(id: id, type: type)) end end
delete_all()
click to toggle source
# File lib/rummageable.rb, line 46 def delete_all repeatedly do make_request(:delete, documents_url + '?delete_all=1') end end
Private Instance Methods
documents_url(options = {})
click to toggle source
# File lib/rummageable.rb, line 92 def documents_url(options = {}) options[:id] ||= options[:link] parts = [@index_url, 'documents'] parts << CGI.escape(options[:type]) if options[:type] parts << CGI.escape(options[:id]) if options[:id] parts.join('/') end
log_request(method, url, payload = nil)
click to toggle source
# File lib/rummageable.rb, line 72 def log_request(method, url, payload = nil) @logger.info("Rummageable request: #{method.upcase} #{url}") end
log_response(method, url, call_time, response)
click to toggle source
# File lib/rummageable.rb, line 76 def log_response(method, url, call_time, response) time = sprintf('%.03f', call_time) result = response.length > 0 ? JSON.parse(response).fetch('result', 'UNKNOWN') : "UNKNOWN" @logger.info("Rummageable response: #{method.upcase} #{url} - time: #{time}s, result: #{result}") end
make_request(method, *args)
click to toggle source
# File lib/rummageable.rb, line 82 def make_request(method, *args) response = nil log_request(method, *args) call_time = Benchmark.realtime do response = RestClient.send(method, *args, content_type: :json, accept: :json) end log_response(method, args.first, call_time, response) response end
repeatedly() { || ... }
click to toggle source
# File lib/rummageable.rb, line 59 def repeatedly(&block) @attempts.times do |i| begin return yield rescue RestClient::RequestFailed, RestClient::RequestTimeout, RestClient::ServerBrokeConnection => e @logger.warn e.message raise if @attempts == i + 1 @logger.info 'Retrying...' sleep(@retry_delay) if @retry_delay end end end