etzetera 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b906687f396131b310efde4ea7de4bd162bcf4f
4
- data.tar.gz: 391ea748349c13765056bef8b778bfb6930ec3f7
3
+ metadata.gz: 8b4e2c26fd128ba900ac46cd4164bf0ff33cc860
4
+ data.tar.gz: 941f5e9dc5e869aa0ee375c9f855ddc258afbe8e
5
5
  SHA512:
6
- metadata.gz: 54341e3866f703c11c54bbb27c26a15fcf8d6c81c6c0a388541b91be09eecbe1e28dd5e783c6cabee551080b716ad2ca13a7bbe3a1f189221833db7febc55680
7
- data.tar.gz: 0227b6cb5ac9ccf9344877070586b620bcb1cb9ed44534b639488379b497843d7cb7b30bde0bd697cb0d10aa0248df61132e4197a9e0dbf4ac754ba341c9372e
6
+ metadata.gz: 9279230c0f3162832c37bd85e08c9a8867094cb63f10624d015e5a98c01d81e3f67e1f4fe0683325eab64a2d27c79046292afee851107e74d264eb9962f18185
7
+ data.tar.gz: 8493e5af5b0bb162ef7c640e75ce5e727f85b41323be08b66524cb9eb1ee1d3adee46f6485eb8dd521dbff9bc8235562304ffc37355b818935c1f1a9ebbed013
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,32 +1,27 @@
1
1
  require 'celluloid/io'
2
- require 'http'
3
2
  require 'multi_json'
4
3
 
5
4
  module Etzetera
6
5
  class Client
7
6
  include Celluloid::IO
8
-
9
7
  API_ENDPOINT = 'v2'.freeze
10
8
 
11
- execute_block_on_receiver :wait
12
-
13
- attr_accessor :servers, :consistent
9
+ attr_accessor :servers
14
10
 
15
- def initialize(servers = ['http://127.0.0.1:4001'],
16
- consistent = true,
17
- default_options = {})
11
+ def initialize(servers = ['http://127.0.0.1:4001'], default_options = {})
18
12
 
19
- self.servers = servers
20
- self.consistent = consistent
13
+ self.servers = servers
21
14
 
22
15
  opts = {}
23
- opts[:follow] = true
24
- opts[:headers] = {:accept => 'application/json'}
25
- opts[:response] = :object
26
- opts[:socket_class] = Celluloid::IO::TCPSocket
27
- opts[:ssl_socket_class] = Celluloid::IO::SSLSocket
16
+ opts[:follow] = true
17
+ opts[:headers] = {:accept => 'application/json'}
18
+ opts[:response] = :object
19
+ opts[:election_timeout] = 200
20
+ opts[:heartbeat_interval] = 50
21
+ opts[:socket_class] = Celluloid::IO::TCPSocket
22
+ opts[:ssl_socket_class] = Celluloid::IO::SSLSocket
28
23
 
29
- @default_options = ::HTTP::Options.new(default_options.merge(opts))
24
+ @default_options = ::HTTP::Options.new(opts.merge(default_options))
30
25
  end
31
26
 
32
27
  def get(key, params = {})
@@ -47,8 +42,9 @@ module Etzetera
47
42
  if block_given?
48
43
  yield response
49
44
  elsif callback
50
- sleep 0.5
51
- callback.call(response)
45
+ after(@default_options[:heartbeat_interval] / 1000.0) do
46
+ callback.call(response)
47
+ end
52
48
  else
53
49
  parse_response(response)
54
50
  end
@@ -137,6 +133,11 @@ module Etzetera
137
133
 
138
134
  begin
139
135
  request = client.request(verb, "#{server}#{path}")
136
+ response = MultiJson.load(request.body)
137
+ if response['errorCode']
138
+ abort Error::CODES[response['errorCode']].new(response['message'])
139
+ end
140
+ parse_response(response)
140
141
  rescue IOError => e
141
142
  abort e if retries < 1
142
143
 
@@ -151,27 +152,16 @@ module Etzetera
151
152
 
152
153
  retries -= 1
153
154
 
154
- sleep 0.5
155
- retry
156
- else
157
- response = {}
158
- begin
159
- response = MultiJson.load(request.body)
160
- if response['errorCode']
161
- abort Error::CODES[response['errorCode']].new(response['message'])
162
- end
163
- # Have to rescue here, etcd sends error codes in the 200-399 Range
164
- # and even json responses with Content-Type: text/html
165
- rescue MultiJson::LoadError => e
166
- if request.code.between?(400, 499)
167
- abort Error::HttpClientError.new("#{request.reason}\n#{request.body.to_s}")
168
- elsif request.code.between?(500, 599)
169
- abort Error::HttpServerError.new("#{request.reason}\n#{request.body.to_s}")
170
- else
171
- abort Error::EtzeteraError.new(e)
172
- end
155
+ after(@default_options[:election_timeout] / 1000.0) do
156
+ retry
157
+ end
158
+ rescue MultiJson::LoadError => e
159
+ if request.code.between?(400, 499)
160
+ abort Error::HttpClientError.new("#{request.reason}\n#{request.body.to_s}")
161
+ elsif request.code.between?(500, 599)
162
+ abort Error::HttpServerError.new("#{request.reason}\n#{request.body.to_s}")
173
163
  else
174
- parse_response(response)
164
+ abort Error::EtzeteraError.new(e)
175
165
  end
176
166
  end
177
167
  end
@@ -1,6 +1,52 @@
1
+ require 'http'
2
+
1
3
  class Array
2
4
  def swap!(a,b)
3
5
  self[a], self[b] = self[b], self[a]
4
6
  self
5
7
  end
6
8
  end
9
+
10
+ if HTTP::VERSION == '0.5.0'
11
+ module HTTP
12
+ class Client
13
+ # Make an HTTP request
14
+ def request(method, uri, options = {})
15
+ opts = @default_options.merge(options)
16
+ host = URI.parse(uri).host
17
+ opts.headers["Host"] = host
18
+ headers = opts.headers
19
+ proxy = opts.proxy
20
+
21
+ method_body = body(opts, headers)
22
+ if opts.params && !opts.params.empty?
23
+ uri="#{uri}?#{URI.encode_www_form(opts.params)}"
24
+ end
25
+
26
+ request = HTTP::Request.new method, uri, headers, proxy, method_body
27
+ if opts.follow
28
+ code = 302
29
+ while code == 302 or code == 301
30
+ # if the uri isn't fully formed complete it
31
+ if not uri.match(/\./)
32
+ uri = "#{method}://#{host}#{uri}"
33
+ end
34
+ host = URI.parse(uri).host
35
+ opts.headers["Host"] = host
36
+ method_body = body(opts, headers)
37
+ request = HTTP::Request.new method, uri, headers, proxy, method_body
38
+ response = perform request, opts
39
+ code = response.code
40
+ uri = response.headers["Location"]
41
+ end
42
+ end
43
+
44
+ opts.callbacks[:request].each { |c| c.call(request) }
45
+ response = perform request, opts
46
+ opts.callbacks[:response].each { |c| c.call(response) }
47
+
48
+ format_response method, response, opts.response
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,3 +1,3 @@
1
1
  module Etzetera
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: etzetera
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hendrik
@@ -31,7 +31,7 @@ cert_chain:
31
31
  fESaRa24pr3CGd0AyltcRbKGfNpZfj1zfqWXrDUJj0Y1sOASd8+UZPmBFS2feJqy
32
32
  het/fGFD7akMwHXIlNxNsg==
33
33
  -----END CERTIFICATE-----
34
- date: 2014-03-03 00:00:00.000000000 Z
34
+ date: 2014-03-04 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: celluloid-io
metadata.gz.sig CHANGED
Binary file