ecoportal-api 0.3.4 → 0.3.5
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d25d42002423c85609bc9c4e436c614934239e62ae3b086f39c2073c0df925d
|
4
|
+
data.tar.gz: 53574533c9fe73a72c2eb2d8f5dd48f854e143482d3ce30a4acf2b1ebcdad63d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9640f58bc1712869b3b2bacf7f6d3ec61afe439cdcf194ea8dacf29fba676f7828d2e2a636cea1ca919f0bf63a5687a3293c3e5148a8e77e9c32b66f2c0dcec9
|
7
|
+
data.tar.gz: 19059c77e63997094ab84d1b9f2f9ca14784001b37ebba753c7ed9bbad61dfab02e724bd38560add9a8e801f816af6cae0e20030e4a09f11186bf0cd78af4cfd
|
@@ -5,10 +5,11 @@ module Ecoportal
|
|
5
5
|
class BatchOperation
|
6
6
|
include Common::DocHelpers
|
7
7
|
|
8
|
-
def initialize(base_path, wrapper)
|
8
|
+
def initialize(base_path, wrapper, logger: nil)
|
9
9
|
@base_path = base_path
|
10
10
|
@wrapper = wrapper
|
11
11
|
@operations = []
|
12
|
+
@logger = logger
|
12
13
|
end
|
13
14
|
|
14
15
|
def as_json
|
@@ -20,21 +21,27 @@ module Ecoportal
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def process_response(response)
|
23
|
-
|
24
|
+
unless response.success?
|
25
|
+
log(:error) { "Total failure in batch operation." }
|
26
|
+
raise "Total failure in batch operation"
|
27
|
+
end
|
24
28
|
|
25
|
-
|
26
|
-
next unless callback = @operations[idx][:callback]
|
29
|
+
log(:info) { "Processing batch responses" }
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
+
response.body.each.with_index do |subresponse, idx|
|
32
|
+
callback = @operations[idx][:callback]
|
33
|
+
status = subresponse["status"]
|
34
|
+
body = subresponse["response"]
|
35
|
+
method = @operations[idx][:method]
|
31
36
|
|
32
37
|
if status == 200 && method == "GET"
|
33
38
|
batch_response = BatchResponse.new(status, body, @wrapper.new(body))
|
34
|
-
|
39
|
+
log_batch_response(@operations[idx], batch_response)
|
40
|
+
callback && callback.call(batch_response, batch_response.result)
|
35
41
|
else
|
36
42
|
batch_response = BatchResponse.new(status, body)
|
37
|
-
|
43
|
+
log_batch_response(@operations[idx], batch_response)
|
44
|
+
callback && callback.call(batch_response)
|
38
45
|
end
|
39
46
|
end
|
40
47
|
end
|
@@ -88,6 +95,19 @@ module Ecoportal
|
|
88
95
|
callback: block_given? && Proc.new
|
89
96
|
}
|
90
97
|
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def log_batch_response(operation, response)
|
102
|
+
level = response.success?? :debug : :warn
|
103
|
+
log(:info) { "BATCH #{operation[:method]} #{operation[:path]}" }
|
104
|
+
log(:info) { "Status #{response.status}" }
|
105
|
+
log(level) { "Response: #{JSON.pretty_generate(response.body)}" }
|
106
|
+
end
|
107
|
+
|
108
|
+
def log(level, &block)
|
109
|
+
@logger.send(level, &block) if @logger
|
110
|
+
end
|
91
111
|
end
|
92
112
|
end
|
93
113
|
end
|
@@ -4,12 +4,12 @@ module Ecoportal
|
|
4
4
|
class BatchResponse
|
5
5
|
attr_reader :status, :body, :result
|
6
6
|
def initialize(status, body, result = nil)
|
7
|
-
@status = status
|
7
|
+
@status = HTTP::Response::Status.new(status)
|
8
8
|
@body = body
|
9
9
|
@result = result
|
10
10
|
end
|
11
11
|
def success?
|
12
|
-
|
12
|
+
status.success?
|
13
13
|
end
|
14
14
|
def each
|
15
15
|
[*@result].each do |doc|
|
@@ -3,6 +3,8 @@ module Ecoportal
|
|
3
3
|
module API
|
4
4
|
module Common
|
5
5
|
class Client
|
6
|
+
attr_accessor :logger
|
7
|
+
|
6
8
|
def initialize(api_key:, version: "v1", host: "live.ecoportal.com", logger: nil)
|
7
9
|
@version = version
|
8
10
|
@api_key = api_key
|
@@ -13,7 +15,10 @@ module Ecoportal
|
|
13
15
|
@base_uri = "https://#{host}/api/"
|
14
16
|
end
|
15
17
|
log(:info) { "#{version} client initialized pointing at #{host}" }
|
16
|
-
|
18
|
+
if @api_key.nil? || @api_key.match(/\A\W*\z/)
|
19
|
+
log(:error) { "Api-key missing!" }
|
20
|
+
end
|
21
|
+
@response_logging_enabled = true
|
17
22
|
end
|
18
23
|
|
19
24
|
def log(level, &block)
|
@@ -68,6 +73,15 @@ module Ecoportal
|
|
68
73
|
@base_uri+@version+path
|
69
74
|
end
|
70
75
|
|
76
|
+
def without_response_logging(&block)
|
77
|
+
begin
|
78
|
+
@response_logging_enabled = false
|
79
|
+
yield self
|
80
|
+
ensure
|
81
|
+
@response_logging_enabled = true
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
71
85
|
private
|
72
86
|
|
73
87
|
def instrument(method, path, data = nil)
|
@@ -81,7 +95,7 @@ module Ecoportal
|
|
81
95
|
end
|
82
96
|
log(result.success?? :debug : :warn) do
|
83
97
|
"Response: #{JSON.pretty_generate(result.body)}"
|
84
|
-
end
|
98
|
+
end if @response_logging_enabled
|
85
99
|
end
|
86
100
|
end
|
87
101
|
end
|
@@ -53,10 +53,13 @@ module Ecoportal
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def batch
|
56
|
-
operation = Common::BatchOperation.new("/people", person_class)
|
56
|
+
operation = Common::BatchOperation.new("/people", person_class, logger: @client.logger)
|
57
57
|
yield operation
|
58
|
-
|
59
|
-
|
58
|
+
# The batch operation is responsible for logging the output
|
59
|
+
@client.without_response_logging do
|
60
|
+
@client.post("/people/batch", data: operation.as_json).tap do |response|
|
61
|
+
operation.process_response(response)
|
62
|
+
end
|
60
63
|
end
|
61
64
|
end
|
62
65
|
|