Class: Droonga::Client::Connection::HTTP

Inherits:
Object
  • Object
show all
Defined in:
lib/droonga/client/connection/http.rb

Defined Under Namespace

Classes: InvalidHTTPMethodError, Request

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ HTTP

Returns a new instance of HTTP.



50
51
52
53
54
# File 'lib/droonga/client/connection/http.rb', line 50

def initialize(options={})
  @host    = options[:host] || "127.0.0.1"
  @port    = options[:port] || 80
  @timeout = options[:timeout] || 1
end

Instance Method Details

#closevoid

This method returns an undefined value.

Close the connection. This connection can't be used anymore.



151
152
# File 'lib/droonga/client/connection/http.rb', line 151

def close
end

#request(message, options = {}) ⇒ Object #request(message, options = {}) {|response| ... } ⇒ Request

Sends a request message and receives one or more response messages.

Overloads:

  • #request(message, options = {}) ⇒ Object

    This is synchronously version.

    Parameters:

    • message (Hash)

      Request message.

    • options (Hash) (defaults to: {})

      The options. TODO: WRITE ME

    Returns:

    • (Object)

      The response. TODO: WRITE ME

  • #request(message, options = {}) {|response| ... } ⇒ Request

    This is asynchronously version.

    Parameters:

    • message (Hash)

      Request message.

    • options (Hash) (defaults to: {})

      The options. TODO: WRITE ME

    Yields:

    • (response)

      The block is called when response is received.

    Yield Parameters:

    • response (Object)

      The response.

    Returns:

    • (Request)

      The request object.



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/droonga/client/connection/http.rb', line 80

def request(message, options={}, &block)
  sync = block.nil?
  if sync
    send(message, options) do |response|
      response.body
    end
  else
    thread = Thread.new do
      send(message, options) do |response|
        yield(response.body)
      end
    end
    Request.new(thread)
  end
end

#send(message, options = {}, &block) ⇒ void

This method returns an undefined value.

Sends low level request. Normally, you should use other convenience methods.

Parameters:

  • message (Hash)

    Request message.

  • options (Hash) (defaults to: {})

    The options to send request. TODO: WRITE ME



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/droonga/client/connection/http.rb', line 132

def send(message, options={}, &block)
  http = Net::HTTP.new(@host, @port)
  open_timeout = @timeout
  read_timeout = @timeout
  open_timeout = options[:open_timeout] if options.key?(:open_timeout)
  read_timeout = options[:read_timeout] if options.key?(:read_timeout)
  http.open_timeout = open_timeout
  http.read_timeout = read_timeout
  request = build_request(message)
  http.start do
    http.request(request) do |response|
      yield(response)
    end
  end
end

#subscribe(message, options = {}) {|message| ... } ⇒ Request

Subscribes something and receives zero or more published messages.

This is asynchronously version.

Parameters:

  • message (Hash)

    Subscribe message.

  • options (Hash) (defaults to: {})

    The options. TODO: WRITE ME

Yields:

  • (message)

    The block is called when a published message is received. The block may be called zero or more times.

Yield Parameters:

  • message (Object)

    The published message.

Returns:

  • (Request)

    The request object.



112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/droonga/client/connection/http.rb', line 112

def subscribe(message, options={}, &block)
  thread = Thread.new do
    json_parser = Yajl::Parser.new
    json_parser.on_parse_complete = block
    send(message, options.merge(:read_timeout => nil)) do |response|
      response.read_body do |chunk|
        json_parser << chunk
      end
    end
  end
  Request.new(thread)
end