ocean-rails 2.5.0 → 2.6.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 +95 -54
- data/lib/ocean/version.rb +1 -1
- 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: abf28d724166e842023309df785a57664db29c84
|
4
|
+
data.tar.gz: e36c67e240cfbecd146858221ba21ab8dfd3a950
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a07c6ee6bb67c43f9f75a2ea7a8414e3455433b0925656478d271543782e32a0339217bc67a3af3f1dab3e3edae1f18857ebf325024ed2200309ce5227abf644
|
7
|
+
data.tar.gz: c2c2e990a31207d2919192c014f0408a89053f8da01ed49e344d1df0318329002f81ad38f607f48ceb6dced67f2857c28430f9bc51b96970e7f77bfc7f2b019f
|
data/lib/ocean/api.rb
CHANGED
@@ -1,30 +1,29 @@
|
|
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
|
1
|
+
# #
|
2
|
+
# # We need to monkey-patch Faraday to pull off PURGE and BAN
|
3
|
+
# #
|
4
|
+
# require 'faraday'
|
5
|
+
# require 'faraday_middleware'
|
24
6
|
|
25
|
-
|
26
|
-
|
7
|
+
# module Faraday #:nodoc: all
|
8
|
+
# class Connection
|
9
|
+
|
10
|
+
# METHODS << :purge
|
11
|
+
# METHODS << :ban
|
27
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
|
28
27
|
|
29
28
|
#
|
30
29
|
# This class encapsulates all logic for calling other API services.
|
@@ -83,6 +82,33 @@ class Api
|
|
83
82
|
end
|
84
83
|
|
85
84
|
|
85
|
+
class Response
|
86
|
+
|
87
|
+
def initialize(response)
|
88
|
+
@response = response
|
89
|
+
@headers = nil
|
90
|
+
@body = nil
|
91
|
+
end
|
92
|
+
|
93
|
+
def status
|
94
|
+
@response.response_code
|
95
|
+
end
|
96
|
+
|
97
|
+
def headers
|
98
|
+
@headers ||= (@response.response_headers || "").split("\r\n").inject({}) do |acc, h|
|
99
|
+
k, v = h.split(": ")
|
100
|
+
acc[k] = v
|
101
|
+
acc
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def body
|
106
|
+
@body ||= @response.response_body.blank? ? nil : JSON.parse(@response.response_body)
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
|
86
112
|
#
|
87
113
|
# Makes a HTTP request to +host_url+ using the HTTP method +method+. The +resource_name+
|
88
114
|
# is used to obtain the latest version string of the resource. The arg +path+ is the
|
@@ -90,22 +116,39 @@ class Api
|
|
90
116
|
#
|
91
117
|
# Returns the response in its entirety so that the caller can examine its status and body.
|
92
118
|
#
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
119
|
+
|
120
|
+
# def self.call(host_url, http_method, resource_name, path, args={}, headers={})
|
121
|
+
# # Set up the connection parameters
|
122
|
+
# conn = Faraday.new(host_url) do |c|
|
123
|
+
# c.response :json, :content_type => /\bjson$/ # Convert the response body to JSON
|
124
|
+
# c.adapter Faraday.default_adapter # Use net-http
|
125
|
+
# end
|
126
|
+
# api_version = version_for resource_name
|
127
|
+
# path = "/#{api_version}#{path}"
|
128
|
+
# # Make the call. TODO: retries?
|
129
|
+
# response = conn.send(http_method, path, args, headers) do |request|
|
130
|
+
# request.headers['Accept'] = 'application/json'
|
131
|
+
# request.headers['Content-Type'] = 'application/json'
|
132
|
+
# end
|
133
|
+
# response
|
134
|
+
# end
|
135
|
+
|
136
|
+
def self.call(host_url, http_method, resource_name, path, args_or_body={}, headers={})
|
137
|
+
# Set up the request
|
138
|
+
url = "#{host_url}/#{version_for resource_name}#{path}"
|
139
|
+
headers['Accept'] = "application/json"
|
140
|
+
headers['Content-Type'] = "application/json"
|
141
|
+
headers['User-Agent'] = "Ocean"
|
142
|
+
request = Typhoeus::Request.new(url, method: http_method, headers: headers,
|
143
|
+
params: args_or_body.is_a?(String) ? nil : args_or_body,
|
144
|
+
body: args_or_body.is_a?(String) ? args_or_body : nil
|
145
|
+
)
|
146
|
+
# Run it
|
147
|
+
response = request.run
|
148
|
+
# Return the response
|
149
|
+
Response.new(response)
|
150
|
+
end
|
151
|
+
|
109
152
|
#
|
110
153
|
# Convenience method to make an internal +GET+ request to the Ocean Api. The +resource_name+
|
111
154
|
# is used to obtain the latest version string of the resource. The arg +path+ is the
|
@@ -146,25 +189,18 @@ class Api
|
|
146
189
|
#
|
147
190
|
def self.delete(*args) call(INTERNAL_OCEAN_API_URL, :delete, *args); end
|
148
191
|
|
149
|
-
|
150
|
-
#
|
151
|
-
# Like Api.call, but makes the requests in parallel. (Parallel calls not implemented yet.)
|
152
|
-
#
|
153
|
-
def self.call_p(url, http_method, path, args={}, headers={})
|
154
|
-
conn = Faraday.new(url) do |c|
|
155
|
-
c.adapter Faraday.default_adapter # Use net-http
|
156
|
-
end
|
157
|
-
conn.send(http_method, path, args, headers)
|
158
|
-
end
|
159
|
-
|
160
192
|
#
|
161
193
|
# Makes an internal +PURGE+ call to all Varnish instances. The call is made in parallel.
|
162
194
|
# Varnish will only accept +PURGE+ requests coming from the local network.
|
163
195
|
#
|
164
196
|
def self.purge(*args)
|
197
|
+
hydra = Typhoeus::Hydra.hydra
|
165
198
|
LOAD_BALANCERS.each do |host|
|
166
|
-
|
199
|
+
url = "http://#{host}#{path}"
|
200
|
+
request = Typhoeus::Request.new(url, method: :purge, headers: {})
|
201
|
+
hydra.queue request
|
167
202
|
end
|
203
|
+
hydra.run
|
168
204
|
end
|
169
205
|
|
170
206
|
#
|
@@ -172,9 +208,14 @@ class Api
|
|
172
208
|
# Varnish will only accept +BAN+ requests coming from the local network.
|
173
209
|
#
|
174
210
|
def self.ban(path)
|
211
|
+
hydra = Typhoeus::Hydra.hydra
|
212
|
+
escaped_path = escape(path)
|
175
213
|
LOAD_BALANCERS.each do |host|
|
176
|
-
|
214
|
+
url = "http://#{host}#{escaped_path}"
|
215
|
+
request = Typhoeus::Request.new(url, method: :ban, headers: {})
|
216
|
+
hydra.queue request
|
177
217
|
end
|
218
|
+
hydra.run
|
178
219
|
end
|
179
220
|
|
180
221
|
|
data/lib/ocean/version.rb
CHANGED
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.6.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-14 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
|