ocean-rails 2.6.2 → 2.7.0
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 +4 -4
- data/lib/ocean/api.rb +69 -57
- data/lib/ocean/version.rb +1 -1
- data/lib/ocean/zeromq_logger.rb +5 -0
- metadata +2 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b145db3805039a6cc1d38e79ca8082fff55b1cf9
|
4
|
+
data.tar.gz: f419dd31a14e6ee523304489213dc61cda381647
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74240a3d708dc16ec24d1da03607f11cbdb1f721f1f49be388bb0ea5c23846e0145b6331bd7f54b8fae088f0b0337460afedec2022748d97466ad65f07e201a8
|
7
|
+
data.tar.gz: 351a73dc913d1570f6beefaafba47060e672369bec796ede8be44c222c5357ae5cd4e2c5f5bbae663193db6bccb8734fad6c6ceab9f4bc01da850c10b611bdf7
|
data/lib/ocean/api.rb
CHANGED
@@ -1,30 +1,3 @@
|
|
1
|
-
#
|
2
|
-
# We need to monkey-patch Faraday to pull off PURGE and BAN
|
3
|
-
#
|
4
|
-
require 'faraday'
|
5
|
-
require 'faraday_middleware'
|
6
|
-
|
7
|
-
module Faraday #:nodoc: all
|
8
|
-
class Connection
|
9
|
-
|
10
|
-
METHODS << :purge
|
11
|
-
METHODS << :ban
|
12
|
-
|
13
|
-
# purge/ban(url, params, headers)
|
14
|
-
%w[purge ban].each do |method|
|
15
|
-
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
16
|
-
def #{method}(url = nil, params = nil, headers = nil)
|
17
|
-
run_request(:#{method}, url, nil, headers) { |request|
|
18
|
-
request.params.update(params) if params
|
19
|
-
yield request if block_given?
|
20
|
-
}
|
21
|
-
end
|
22
|
-
RUBY
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
1
|
require 'typhoeus'
|
29
2
|
|
30
3
|
#
|
@@ -40,6 +13,7 @@ class Api
|
|
40
13
|
API_VERSIONS[resource_name.to_s] || API_VERSIONS['_default']
|
41
14
|
end
|
42
15
|
|
16
|
+
|
43
17
|
#
|
44
18
|
# Given that this service has authenticated successfully with the Auth service,
|
45
19
|
# returns the token returned as part of the authentication response.
|
@@ -84,6 +58,10 @@ class Api
|
|
84
58
|
end
|
85
59
|
|
86
60
|
|
61
|
+
#
|
62
|
+
# Api::Response instances wrap Typhoeus responses as an abstraction layer, but also
|
63
|
+
# in order to provide lazy evaluation of headers and JSON decoding of the body.
|
64
|
+
#
|
87
65
|
class Response
|
88
66
|
|
89
67
|
def initialize(response)
|
@@ -92,10 +70,16 @@ class Api
|
|
92
70
|
@body = nil
|
93
71
|
end
|
94
72
|
|
73
|
+
#
|
74
|
+
# The status code of the HTTP response.
|
75
|
+
#
|
95
76
|
def status
|
96
77
|
@response.response_code
|
97
78
|
end
|
98
79
|
|
80
|
+
#
|
81
|
+
# Returns a hash of HTTP response headers.
|
82
|
+
#
|
99
83
|
def headers
|
100
84
|
@headers ||= (@response.response_headers || "").split("\r\n").inject({}) do |acc, h|
|
101
85
|
k, v = h.split(": ")
|
@@ -104,52 +88,75 @@ class Api
|
|
104
88
|
end
|
105
89
|
end
|
106
90
|
|
91
|
+
#
|
92
|
+
# Returns the HTTP response body parsed from JSON. This is done lazily and only once.
|
93
|
+
#
|
107
94
|
def body
|
108
95
|
@body ||= @response.response_body.blank? ? nil : JSON.parse(@response.response_body)
|
109
96
|
end
|
110
97
|
|
98
|
+
#
|
99
|
+
# Returns true if the HTTP request timed out.
|
100
|
+
#
|
101
|
+
def timed_out?
|
102
|
+
@response.timed_out?
|
103
|
+
end
|
111
104
|
end
|
112
105
|
|
113
106
|
|
114
107
|
#
|
115
|
-
#
|
108
|
+
# Api.request is designed to be the lowest common denominator for making any kind of
|
109
|
+
# HTTP request, except parallel requests which will have a similar method (to which BAN
|
110
|
+
# and PURGE requests to Varnish is a special case).
|
111
|
+
#
|
112
|
+
# In its present form it assumes the request is a JSON one. Eventually, keyword args will
|
113
|
+
# provide abstract control of content type.
|
114
|
+
#
|
115
|
+
# +url+ is the URL to which the request will be made.
|
116
|
+
# +http_method+ is the HTTP method to use (:post, :get, :head, :put, :delete, etc).
|
117
|
+
# +args+, if given, should be a hash of query arguments to add to the URL.
|
118
|
+
# +headers+, if given, is a hash of extra HTTP headers for the request.
|
119
|
+
# +body+, if given, is the body of the request (:post, :put) as a string.
|
120
|
+
#
|
121
|
+
# Api.request won't raise an exception if the request times out or the operation fails.
|
122
|
+
# Instead, all such information is encapsulated in the Api::Response instance returned.
|
123
|
+
#
|
124
|
+
def self.request(url, http_method, args: nil, headers: {}, body: nil)
|
125
|
+
# Set up the request
|
126
|
+
headers['Accept'] = "application/json"
|
127
|
+
headers['Content-Type'] = "application/json"
|
128
|
+
headers['User-Agent'] = "Ocean"
|
129
|
+
request = Typhoeus::Request.new(url, method: http_method, headers: headers,
|
130
|
+
params: args, body: body)
|
131
|
+
# Run it
|
132
|
+
response = request.run
|
133
|
+
# Retries would be done here
|
134
|
+
|
135
|
+
# Return the response
|
136
|
+
Response.new(response)
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
#
|
141
|
+
# Makes an internal HTTP request to +host_url+ using the HTTP method +method+. The +resource_name+
|
116
142
|
# is used to obtain the latest version string of the resource. The arg +path+ is the
|
117
143
|
# local path, +args+ is a hash of query args, and +headers+ a hash of extra HTTP headers.
|
118
144
|
#
|
119
145
|
# Returns the response in its entirety so that the caller can examine its status and body.
|
120
146
|
#
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
response = conn.send(http_method, path, args, headers) do |request|
|
132
|
-
request.headers['Accept'] = 'application/json'
|
133
|
-
request.headers['Content-Type'] = 'application/json'
|
147
|
+
# It is quite probable that this method will become deprecated. The main reason for its existence
|
148
|
+
# is the version computation, nothing more, and separating host and path isn't ideal.
|
149
|
+
#
|
150
|
+
def self.call(host_url, http_method, resource_name, path, args=nil, headers={})
|
151
|
+
if [:post, :put].include? http_method
|
152
|
+
request "#{host_url}/#{version_for resource_name}#{path}", http_method,
|
153
|
+
headers: headers, body: args
|
154
|
+
else
|
155
|
+
request "#{host_url}/#{version_for resource_name}#{path}", http_method,
|
156
|
+
headers: headers, args: args
|
134
157
|
end
|
135
|
-
response
|
136
158
|
end
|
137
159
|
|
138
|
-
# def self.call(host_url, http_method, resource_name, path, args_or_body={}, headers={})
|
139
|
-
# # Set up the request
|
140
|
-
# url = "#{host_url}/#{version_for resource_name}#{path}"
|
141
|
-
# headers['Accept'] = "application/json"
|
142
|
-
# headers['Content-Type'] = "application/json"
|
143
|
-
# headers['User-Agent'] = "Ocean"
|
144
|
-
# request = Typhoeus::Request.new(url, method: http_method, headers: headers,
|
145
|
-
# params: args_or_body.is_a?(String) ? nil : args_or_body,
|
146
|
-
# body: args_or_body.is_a?(String) ? args_or_body : nil
|
147
|
-
# )
|
148
|
-
# # Run it
|
149
|
-
# response = request.run
|
150
|
-
# # Return the response
|
151
|
-
# Response.new(response)
|
152
|
-
# end
|
153
160
|
|
154
161
|
#
|
155
162
|
# Convenience method to make an internal +GET+ request to the Ocean Api. The +resource_name+
|
@@ -191,6 +198,7 @@ class Api
|
|
191
198
|
#
|
192
199
|
def self.delete(*args) call(INTERNAL_OCEAN_API_URL, :delete, *args); end
|
193
200
|
|
201
|
+
|
194
202
|
#
|
195
203
|
# Makes an internal +PURGE+ call to all Varnish instances. The call is made in parallel.
|
196
204
|
# Varnish will only accept +PURGE+ requests coming from the local network.
|
@@ -205,6 +213,7 @@ class Api
|
|
205
213
|
hydra.run
|
206
214
|
end
|
207
215
|
|
216
|
+
|
208
217
|
#
|
209
218
|
# Makes an internal +BAN+ call to all Varnish instances. The call is made in parallel.
|
210
219
|
# Varnish will only accept +BAN+ requests coming from the local network.
|
@@ -265,6 +274,7 @@ class Api
|
|
265
274
|
::Base64.strict_encode64 "#{username}:#{password}"
|
266
275
|
end
|
267
276
|
|
277
|
+
|
268
278
|
#
|
269
279
|
# Takes encoded credentials (e.g. by Api.encode_credentials) and returns a two-element array
|
270
280
|
# where the first element is the username and the second is the password. If the encoded
|
@@ -280,6 +290,7 @@ class Api
|
|
280
290
|
[username || "", password || ""]
|
281
291
|
end
|
282
292
|
|
293
|
+
|
283
294
|
#
|
284
295
|
# Performs authorisation against the Auth service. The +token+ must be a token received as a
|
285
296
|
# result of a prior authentication operation. The args should be in the form
|
@@ -334,6 +345,7 @@ class Api
|
|
334
345
|
'disconnect' => ['connect', 'DELETE']
|
335
346
|
}
|
336
347
|
|
348
|
+
|
337
349
|
#
|
338
350
|
# Returns the hyperlink and HTTP method to use for an +action+ in a certain +controller+.
|
339
351
|
# First, the +DEFAULT_ACTIONS+ are searched, then any extra actions defined for the
|
data/lib/ocean/version.rb
CHANGED
data/lib/ocean/zeromq_logger.rb
CHANGED
@@ -92,22 +92,27 @@ class ZeromqLogger
|
|
92
92
|
|
93
93
|
|
94
94
|
def debug(*args)
|
95
|
+
return if args.blank?
|
95
96
|
add 0, *args
|
96
97
|
end
|
97
98
|
|
98
99
|
def info(*args)
|
100
|
+
return if args.blank?
|
99
101
|
add 1, *args
|
100
102
|
end
|
101
103
|
|
102
104
|
def warn(*args)
|
105
|
+
return if args.blank?
|
103
106
|
add 2, *args
|
104
107
|
end
|
105
108
|
|
106
109
|
def error(*args)
|
110
|
+
return if args.blank?
|
107
111
|
add 3, *args
|
108
112
|
end
|
109
113
|
|
110
114
|
def fatal(*args)
|
115
|
+
return if args.blank?
|
111
116
|
add 4, *args
|
112
117
|
end
|
113
118
|
|
metadata
CHANGED
@@ -1,43 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocean-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Bengtson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: faraday
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: faraday_middleware
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: typhoeus
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|