Module: Swiftype::Request

Included in:
Client
Defined in:
lib/swiftype/request.rb

Instance Method Summary collapse

Instance Method Details

#delete(path, params = {}) ⇒ Object



25
26
27
# File 'lib/swiftype/request.rb', line 25

def delete(path, params={})
  request(:delete, path, params)
end

#get(path, params = {}) ⇒ Object



13
14
15
# File 'lib/swiftype/request.rb', line 13

def get(path, params={})
  request(:get, path, params)
end

#poll(options = {}) ⇒ Object

Poll a block with backoff until a timeout is reached.

Parameters:

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

    optional arguments

Options Hash (options):

  • :timeout (Numeric) — default: 10

    Number of seconds to wait before timing out

Yield Returns:

  • a truthy value to return from poll

  • (false)

    to continue polling.

Returns:

  • the truthy value returned from the block.

Raises:

  • (Timeout::Error)

    when the timeout expires



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/swiftype/request.rb', line 40

def poll(options={})
  timeout = options[:timeout] || 10
  delay = 0.05
  Timeout.timeout(timeout) do
    while true
      res = yield
      return res if res
      sleep delay *= 2
    end
  end
end

#post(path, params = {}) ⇒ Object



17
18
19
# File 'lib/swiftype/request.rb', line 17

def post(path, params={})
  request(:post, path, params)
end

#put(path, params = {}) ⇒ Object



21
22
23
# File 'lib/swiftype/request.rb', line 21

def put(path, params={})
  request(:put, path, params)
end

#request(method, path, params = {}) ⇒ Object

Construct and send a request to the API.

Raises:

  • (Timeout::Error)

    when the timeout expires



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/swiftype/request.rb', line 55

def request(method, path, params={})
  Timeout.timeout(overall_timeout) do
    uri = URI.parse("#{Swiftype.endpoint}#{path}")

    request = build_request(method, uri, params)

    if proxy
      proxy_parts = URI.parse(proxy)
      http = Net::HTTP.new(uri.host, uri.port, proxy_parts.host, proxy_parts.port, proxy_parts.user, proxy_parts.password)
    else
      http = Net::HTTP.new(uri.host, uri.port)
    end

    http.open_timeout = open_timeout
    http.read_timeout = overall_timeout

    if uri.scheme == 'https'
      http.use_ssl = true
      # st_ssl_verify_none provides a means to disable SSL verification for debugging purposes. An example
      # is Charles, which uses a self-signed certificate in order to inspect https traffic. This will
      # not be part of this client's public API, this is more of a development enablement option
      http.verify_mode = ENV['st_ssl_verify_none'] == 'true' ? OpenSSL::SSL::VERIFY_NONE : OpenSSL::SSL::VERIFY_PEER
      http.ca_file = File.join(File.dirname(__FILE__), '..', 'data', 'ca-bundle.crt')
      http.ssl_timeout = open_timeout
    end

    response = http.request(request)
    handle_errors(response)
    JSON.parse(response.body) if response.body && response.body.strip != ''
  end
end