class ElasticSearch::Transport::Memcached

Constants

DEFAULTS
Response

Public Class Methods

new(server, options={}) click to toggle source
Calls superclass method ElasticSearch::Transport::Base::new
# File lib/elasticsearch/transport/memcached.rb, line 16
def initialize(server, options={})
  super
  @options = DEFAULTS.merge(@options)
end

Public Instance Methods

all_nodes() click to toggle source
# File lib/elasticsearch/transport/memcached.rb, line 29
def all_nodes
  memcached_addresses = nodes_info([])["nodes"].collect { |id, node| node["memcached_address"] }
  memcached_addresses.collect! do |a|
    if a =~ /inet\[.*\/([\d.:]+)\]/
      $1
    end
  end.compact!
  memcached_addresses
end
close() click to toggle source
# File lib/elasticsearch/transport/memcached.rb, line 25
def close
  @memcached.quit
end
connect!() click to toggle source
# File lib/elasticsearch/transport/memcached.rb, line 21
def connect!
  @memcached = ::Memcached.new(@server, :timeout => @options[:timeout]) #TODO allow passing other options?
end

Private Instance Methods

request(method, operation, params={}, body=nil, headers={}) click to toggle source
# File lib/elasticsearch/transport/memcached.rb, line 41
def request(method, operation, params={}, body=nil, headers={})
  begin
    uri = generate_uri(operation)
    query = generate_query_string(params)
    path = [uri, query].join("?")
    #puts "request: #{method} #{@server} #{path} #{body}"
    response = case method
    when :get
      @memcached.get(path, false)
    when :put, :post
      #TODO put vs post?
      @memcached.set(path, body, 0, false)
    when :delete
      @memcached.delete(path)
    end
    #puts "response: #{response}"
    response = Response.new(200, {}, response) #TODO
    handle_error(response) if response.status >= 500
    response
  rescue Exception => e
    case e
    when TimeoutError
      raise TimeoutError
    else
      raise e
    end
  end
end