elastic_record 0.6.6 → 0.6.8
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.
- data/Gemfile +2 -0
- data/elastic_record.gemspec +2 -2
- data/lib/elastic_record/connection.rb +12 -10
- data/lib/elastic_record/log_subscriber.rb +8 -3
- data/lib/elastic_record/tasks/index.rake +1 -1
- data/test/elastic_record/connection_test.rb +34 -0
- data/test/elastic_record/log_subscriber_test.rb +5 -4
- data/test/helper.rb +6 -0
- metadata +2 -2
data/Gemfile
CHANGED
data/elastic_record.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'elastic_record'
|
5
|
-
s.version = '0.6.
|
5
|
+
s.version = '0.6.8'
|
6
6
|
s.summary = 'Use Elastic Search with your objects'
|
7
7
|
s.description = 'Find your records with elastic search'
|
8
8
|
|
@@ -20,4 +20,4 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.add_dependency 'arelastic'
|
22
22
|
s.add_dependency 'activemodel'
|
23
|
-
end
|
23
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
|
3
3
|
module ElasticRecord
|
4
|
-
class
|
5
|
-
|
6
|
-
# :retries: 2
|
7
|
-
# :auto_discovery: false
|
4
|
+
class ConnectionError < StandardError
|
5
|
+
end
|
8
6
|
|
7
|
+
class Connection
|
9
8
|
attr_accessor :servers, :options
|
10
9
|
attr_accessor :request_count, :current_server
|
10
|
+
attr_accessor :max_request_count
|
11
11
|
def initialize(servers, options = {})
|
12
12
|
if servers.is_a?(Array)
|
13
13
|
self.servers = servers
|
@@ -17,6 +17,7 @@ module ElasticRecord
|
|
17
17
|
|
18
18
|
self.current_server = choose_server
|
19
19
|
self.request_count = 0
|
20
|
+
self.max_request_count = 100
|
20
21
|
self.options = options
|
21
22
|
end
|
22
23
|
|
@@ -45,7 +46,7 @@ module ElasticRecord
|
|
45
46
|
response = http_request(method, path, body)
|
46
47
|
|
47
48
|
json = ActiveSupport::JSON.decode response.body
|
48
|
-
raise json['error'] if json['error']
|
49
|
+
raise ConnectionError.new(json['error']) if json['error']
|
49
50
|
|
50
51
|
json
|
51
52
|
end
|
@@ -61,11 +62,12 @@ module ElasticRecord
|
|
61
62
|
def http_request(method, path, body = nil)
|
62
63
|
request = METHODS[method].new(path)
|
63
64
|
request.body = body
|
65
|
+
http = new_http
|
64
66
|
|
65
67
|
ActiveSupport::Notifications.instrument("request.elastic_record") do |payload|
|
66
|
-
payload[:
|
67
|
-
payload[:
|
68
|
-
payload[:response]
|
68
|
+
payload[:http] = http
|
69
|
+
payload[:request] = request
|
70
|
+
payload[:response] = http.request(request)
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
@@ -74,10 +76,10 @@ module ElasticRecord
|
|
74
76
|
servers.sample
|
75
77
|
end
|
76
78
|
|
77
|
-
def
|
79
|
+
def new_http
|
78
80
|
self.request_count += 1
|
79
81
|
|
80
|
-
if request_count >
|
82
|
+
if request_count > max_request_count{}
|
81
83
|
self.current_server = choose_server
|
82
84
|
self.request_count = 0
|
83
85
|
end
|
@@ -1,9 +1,14 @@
|
|
1
1
|
module ElasticRecord
|
2
2
|
class LogSubscriber < ActiveSupport::LogSubscriber
|
3
3
|
def request(event)
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
payload = event.payload
|
5
|
+
request_log = "#{payload[:request].method} #{payload[:http].address}:#{payload[:http].port}#{payload[:request].path}"
|
6
|
+
|
7
|
+
if payload[:request].body
|
8
|
+
request_log << " '#{payload[:request].body}'"
|
9
|
+
end
|
10
|
+
|
11
|
+
debug "(%.1fms) #{request_log}" % [event.duration]
|
7
12
|
end
|
8
13
|
|
9
14
|
# def logger
|
@@ -5,4 +5,38 @@ class ElasticRecord::ConnectionTest < MiniTest::Spec
|
|
5
5
|
assert_equal ['foo', 'bar'], ElasticRecord::Connection.new('foo,bar').servers
|
6
6
|
assert_equal ['foo', 'bar'], ElasticRecord::Connection.new(['foo', 'bar']).servers
|
7
7
|
end
|
8
|
+
|
9
|
+
def test_head
|
10
|
+
FakeWeb.register_uri(:head, %r[/success], status: ["200", "OK"])
|
11
|
+
assert_equal "200", connection.head("/success")
|
12
|
+
|
13
|
+
FakeWeb.register_uri(:head, %r[/failure], status: ["404", "Not Found"])
|
14
|
+
assert_equal "404", connection.head("/failure")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_json_requests
|
18
|
+
expected = {'foo' => 'bar'}
|
19
|
+
FakeWeb.register_uri(:any, %r[/test], status: ["200", "OK"], body: ActiveSupport::JSON.encode(expected))
|
20
|
+
|
21
|
+
assert_equal expected, connection.json_delete("/test")
|
22
|
+
assert_equal expected, connection.json_get("/test")
|
23
|
+
assert_equal expected, connection.json_post("/test")
|
24
|
+
assert_equal expected, connection.json_put("/test")
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_json_request_with_error
|
28
|
+
response_json = {'error' => 'Doing it wrong'}
|
29
|
+
FakeWeb.register_uri(:get, %r[/error], status: ["404", "Not Found"], body: ActiveSupport::JSON.encode(response_json))
|
30
|
+
|
31
|
+
error = assert_raises ElasticRecord::ConnectionError do
|
32
|
+
connection.json_get("/error")
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_equal 'Doing it wrong', error.message
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
def connection
|
40
|
+
ElasticRecord::Connection.new(ElasticRecord::Config.servers)
|
41
|
+
end
|
8
42
|
end
|
@@ -16,12 +16,13 @@ class ElasticRecord::LogSubscriberTest < ActiveSupport::TestCase
|
|
16
16
|
# end
|
17
17
|
|
18
18
|
def test_request_notification
|
19
|
-
|
19
|
+
FakeWeb.register_uri(:any, %r[/test], status: ["200", "OK"], body: ActiveSupport::JSON.encode('the' => 'response'))
|
20
|
+
Widget.elastic_connection.json_get "/test", {'foo' => 'bar'}
|
20
21
|
|
21
22
|
wait
|
22
23
|
|
23
|
-
assert_equal 1, @logger.logged(:
|
24
|
-
assert_match
|
25
|
-
#
|
24
|
+
assert_equal 1, @logger.logged(:debug).size
|
25
|
+
assert_match /GET (.*)test/, @logger.logged(:debug)[0]
|
26
|
+
assert_match %r['#{ActiveSupport::JSON.encode('foo' => 'bar')}'], @logger.logged(:debug)[0]
|
26
27
|
end
|
27
28
|
end
|
data/test/helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elastic_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: arelastic
|