we-call 0.5.0 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +16 -1
- data/README.md +9 -5
- data/lib/we/call/annotations.rb +2 -0
- data/lib/we/call/configuration.rb +1 -1
- data/lib/we/call/connection.rb +14 -9
- data/lib/we/call/deprecated.rb +7 -7
- data/lib/we/call/middleware.rb +0 -1
- data/lib/we/call/version.rb +1 -1
- data/we-call.gemspec +2 -4
- metadata +18 -35
- data/lib/we/call/middleware/client/detect_deprecations.rb +0 -58
- data/lib/we/call/middleware/client.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f216ee9568b578d28b28ed06cdb66026434ac417
|
4
|
+
data.tar.gz: b5f3d4649b197e500418a9c2c944d32034349967
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 790f8208d3af59d25eec530ef10569404203bc130075eed55aa9cae5e41981a417b4f8d30c6c67d9134d66fbc0c645524b0d6db088c266a6d8a44d45384b0449
|
7
|
+
data.tar.gz: fe36b03580abac7af2cfc9461bb22a36b183a39696394032daae47e4a09a5deb039fd0bf4380ea2bfd8a21c88da49afb1966be77994e1879a46e926f7e698272
|
data/CHANGELOG
CHANGED
@@ -5,7 +5,22 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
7
7
|
|
8
|
-
##
|
8
|
+
## v0.5.2
|
9
|
+
|
10
|
+
### Fixed
|
11
|
+
|
12
|
+
- Made Annotations require "ruby_decorators"
|
13
|
+
|
14
|
+
## v0.5.1
|
15
|
+
|
16
|
+
### Changed
|
17
|
+
|
18
|
+
- Switched `config.detect_deprecations` from bool to expect `:active_support` or logger instance
|
19
|
+
- Moved `We::Call::Middleware::Client::DetectDeprecations` into its own [faraday-sunset] gem (no BC breaks)
|
20
|
+
|
21
|
+
[faraday-sunset]: https://github.com/philsturgeon/faraday-sunset
|
22
|
+
|
23
|
+
## v0.5.0
|
9
24
|
|
10
25
|
### Added
|
11
26
|
- Configurable `We::Call.configure` which accepts a config block
|
data/README.md
CHANGED
@@ -6,7 +6,9 @@
|
|
6
6
|
|
7
7
|
![Call me Maybe](https://cloud.githubusercontent.com/assets/67381/25590846/0c3145ea-2e80-11e7-9166-76448e0134a8.jpeg)
|
8
8
|
|
9
|
-
Requires metadata and offers client/server middleware
|
9
|
+
Requires metadata and offers client/server middleware to help debug HTTP calls, raise warnings for deprecations, supporting trace IDs, etc.
|
10
|
+
|
11
|
+
It aims to arm API developers and users with tools to make their calls more robust, and enforces Good Ideas™ with sane defaults whenever possible.
|
10
12
|
|
11
13
|
## Goals
|
12
14
|
|
@@ -146,7 +148,7 @@ Easy! Check your logs for `user_agent=service-name; app_name=service-name;` The
|
|
146
148
|
|
147
149
|
- **Ruby:** v2.2 - v2.4
|
148
150
|
- **Rails:** v4.2 - v5.1
|
149
|
-
- **Faraday:** v0.
|
151
|
+
- **Faraday:** v0.9 - v0.13
|
150
152
|
|
151
153
|
_For now this gem requires Rails 4.2+ due to some ActiveController functionality we are taking advantage of. Future work will include making this purely rack based._
|
152
154
|
|
@@ -154,10 +156,12 @@ _For now this gem requires Rails 4.2+ due to some ActiveController functionality
|
|
154
156
|
|
155
157
|
- [ ] Support adding href to Deprecate to make a `Link` with rel=sunset as per Sunset RFC draft 03
|
156
158
|
- [ ] Remove Rails as a dependency (soft requirement on `ActiveSupport::Deprecated` is fine)
|
157
|
-
- [
|
159
|
+
- [x] Split DetectDeprecations into standalone [faraday-sunset] gem
|
158
160
|
- [ ] Pass Trace IDs along
|
159
161
|
- [ ] Work on sane defaults for retries and error raising
|
160
162
|
|
163
|
+
[faraday-sunset]: https://github.com/philsturgeon/faraday-sunset
|
164
|
+
|
161
165
|
## Testing
|
162
166
|
|
163
167
|
To run tests and modify locally, you'll want to `bundle install` in this directory.
|
@@ -182,8 +186,8 @@ Bug reports and pull requests are welcome on GitHub at [wework/we-call](https://
|
|
182
186
|
[coveralls-image]:https://coveralls.io/repos/github/wework/we-call/badge.svg?branch=master
|
183
187
|
[coveralls-url]:https://coveralls.io/github/wework/we-call?branch=master
|
184
188
|
|
185
|
-
[travis-url]:https://travis-ci.org/wework/we-
|
186
|
-
[travis-image]: https://travis-ci.org/wework/we-
|
189
|
+
[travis-url]:https://travis-ci.org/wework/we-call
|
190
|
+
[travis-image]: https://travis-ci.org/wework/we-call.svg?branch=master
|
187
191
|
|
188
192
|
[license-url]: LICENSE
|
189
193
|
[license-image]: http://img.shields.io/badge/license-MIT-000000.svg?style=flat-square
|
data/lib/we/call/annotations.rb
CHANGED
data/lib/we/call/connection.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
require 'faraday'
|
2
|
-
require '
|
2
|
+
require 'faraday-sunset'
|
3
3
|
|
4
4
|
module We
|
5
5
|
module Call
|
6
6
|
module Connection
|
7
|
-
Faraday::Response.register_middleware detect_deprecations: We::Call::Middleware::Client::DetectDeprecations
|
8
|
-
|
9
7
|
extend self
|
10
8
|
|
11
9
|
OPEN_TIMEOUT = 2
|
@@ -51,7 +49,7 @@ module We
|
|
51
49
|
def create
|
52
50
|
builder = QueryableBuilder.new(&Proc.new { |_| })
|
53
51
|
|
54
|
-
|
52
|
+
Faraday.new(url: host, builder: builder) do |faraday|
|
55
53
|
faraday.headers['User-Agent'] = app
|
56
54
|
faraday.headers[config.app_name_header] = app
|
57
55
|
faraday.headers[config.app_env_header] = env
|
@@ -59,11 +57,7 @@ module We
|
|
59
57
|
faraday.options[:open_timeout] = open_timeout
|
60
58
|
|
61
59
|
if config.detect_deprecations
|
62
|
-
|
63
|
-
faraday.response :detect_deprecations, active_support: true
|
64
|
-
else
|
65
|
-
faraday.response :detect_deprecations, logger: ENV['rack.logger']
|
66
|
-
end
|
60
|
+
faraday.response :sunset, setup_sunset_middleware(faraday)
|
67
61
|
end
|
68
62
|
|
69
63
|
yield faraday if block_given?
|
@@ -92,6 +86,17 @@ module We
|
|
92
86
|
raise MissingOpenTimeout, 'open_timeout must be set, and defaults to 1 second. This is the time until a connection is established with another server, and after 1 sec it\'s probably not there.'
|
93
87
|
end
|
94
88
|
|
89
|
+
def setup_sunset_middleware(faraday)
|
90
|
+
# In v0.5.0 this was a bool switch, now it takes :active_support or an instance of a Logger
|
91
|
+
if config.detect_deprecations == true || config.detect_deprecations == :active_support
|
92
|
+
return { active_support: true }
|
93
|
+
|
94
|
+
# Pass something that might be a logger or anything with a warn method
|
95
|
+
elsif config.detect_deprecations.respond_to?(:warn)
|
96
|
+
return { logger: config.detect_deprecations }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
95
100
|
# @return [String] Environment (usually 'development', 'staging', 'production', etc.)
|
96
101
|
def guess_env
|
97
102
|
return config.app_env if config.app_env
|
data/lib/we/call/deprecated.rb
CHANGED
@@ -3,22 +3,22 @@ require "ruby_decorators"
|
|
3
3
|
module We
|
4
4
|
module Call
|
5
5
|
class Deprecated < RubyDecorator
|
6
|
-
|
6
|
+
class << self
|
7
|
+
private def methods
|
8
|
+
@methods ||= {}
|
9
|
+
end
|
10
|
+
end
|
7
11
|
|
8
12
|
def initialize(date:)
|
9
13
|
@date = date
|
10
14
|
end
|
11
15
|
|
12
16
|
def set(method, value)
|
13
|
-
|
17
|
+
self.class.methods[method] = value
|
14
18
|
end
|
15
19
|
|
16
20
|
def self.get(method)
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.methods
|
21
|
-
@@methods
|
21
|
+
methods[method]
|
22
22
|
end
|
23
23
|
|
24
24
|
# Called when annotation is used
|
data/lib/we/call/middleware.rb
CHANGED
data/lib/we/call/version.rb
CHANGED
data/we-call.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["WeWork Engineering"]
|
10
10
|
spec.email = ["engineering@wework.com"]
|
11
11
|
|
12
|
-
spec.summary = "Making healthy happy HTTP calls"
|
12
|
+
spec.summary = "Making healthy, happy HTTP calls"
|
13
13
|
spec.description = "Handles conventions of making calls to other services, with required metadata for tracking calls between services, deprecations of endpoints, trace IDs, throttling, etc."
|
14
14
|
spec.homepage = "https://github.com/wework/we-call-gem"
|
15
15
|
spec.licenses = ['MIT']
|
@@ -19,10 +19,10 @@ Gem::Specification.new do |spec|
|
|
19
19
|
end
|
20
20
|
spec.bindir = "bin"
|
21
21
|
spec.require_paths = ["lib"]
|
22
|
-
spec.metadata["yard.run"] = "yri"
|
23
22
|
|
24
23
|
spec.add_dependency "faraday", ">= 0.9.0", "< 0.14"
|
25
24
|
spec.add_dependency "faraday_middleware", '~> 0'
|
25
|
+
spec.add_dependency "faraday-sunset", "~> 0.1.0"
|
26
26
|
spec.add_dependency "ruby_decorators", '~> 0.0'
|
27
27
|
spec.add_dependency "rails", ">= 4.2"
|
28
28
|
|
@@ -33,7 +33,5 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_development_dependency "rspec", "~> 3.5"
|
34
34
|
spec.add_development_dependency "simplecov", '~> 0.15'
|
35
35
|
spec.add_development_dependency "hashie", "~> 3.5"
|
36
|
-
spec.add_development_dependency "pry"
|
37
|
-
spec.add_development_dependency "yard"
|
38
36
|
spec.add_development_dependency "vcr", '~> 3'
|
39
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: we-call
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WeWork Engineering
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: faraday-sunset
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.1.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.1.0
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: ruby_decorators
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,34 +184,6 @@ dependencies:
|
|
170
184
|
- - "~>"
|
171
185
|
- !ruby/object:Gem::Version
|
172
186
|
version: '3.5'
|
173
|
-
- !ruby/object:Gem::Dependency
|
174
|
-
name: pry
|
175
|
-
requirement: !ruby/object:Gem::Requirement
|
176
|
-
requirements:
|
177
|
-
- - ">="
|
178
|
-
- !ruby/object:Gem::Version
|
179
|
-
version: '0'
|
180
|
-
type: :development
|
181
|
-
prerelease: false
|
182
|
-
version_requirements: !ruby/object:Gem::Requirement
|
183
|
-
requirements:
|
184
|
-
- - ">="
|
185
|
-
- !ruby/object:Gem::Version
|
186
|
-
version: '0'
|
187
|
-
- !ruby/object:Gem::Dependency
|
188
|
-
name: yard
|
189
|
-
requirement: !ruby/object:Gem::Requirement
|
190
|
-
requirements:
|
191
|
-
- - ">="
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
version: '0'
|
194
|
-
type: :development
|
195
|
-
prerelease: false
|
196
|
-
version_requirements: !ruby/object:Gem::Requirement
|
197
|
-
requirements:
|
198
|
-
- - ">="
|
199
|
-
- !ruby/object:Gem::Version
|
200
|
-
version: '0'
|
201
187
|
- !ruby/object:Gem::Dependency
|
202
188
|
name: vcr
|
203
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,8 +226,6 @@ files:
|
|
240
226
|
- lib/we/call/connection.rb
|
241
227
|
- lib/we/call/deprecated.rb
|
242
228
|
- lib/we/call/middleware.rb
|
243
|
-
- lib/we/call/middleware/client.rb
|
244
|
-
- lib/we/call/middleware/client/detect_deprecations.rb
|
245
229
|
- lib/we/call/middleware/server.rb
|
246
230
|
- lib/we/call/middleware/server/log_user_agent.rb
|
247
231
|
- lib/we/call/version.rb
|
@@ -249,8 +233,7 @@ files:
|
|
249
233
|
homepage: https://github.com/wework/we-call-gem
|
250
234
|
licenses:
|
251
235
|
- MIT
|
252
|
-
metadata:
|
253
|
-
yard.run: yri
|
236
|
+
metadata: {}
|
254
237
|
post_install_message:
|
255
238
|
rdoc_options: []
|
256
239
|
require_paths:
|
@@ -270,5 +253,5 @@ rubyforge_project:
|
|
270
253
|
rubygems_version: 2.6.8
|
271
254
|
signing_key:
|
272
255
|
specification_version: 4
|
273
|
-
summary: Making healthy happy HTTP calls
|
256
|
+
summary: Making healthy, happy HTTP calls
|
274
257
|
test_files: []
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# This class is going to be split into its own faraday-sunset soon, but I want to get the functionality nailed first
|
2
|
-
module We
|
3
|
-
module Call
|
4
|
-
module Middleware
|
5
|
-
module Client
|
6
|
-
class DetectDeprecations < Faraday::Middleware
|
7
|
-
class NoOutputForWarning < StandardError; end
|
8
|
-
|
9
|
-
# Initialize the middleware
|
10
|
-
#
|
11
|
-
# @param [Type] app describe app
|
12
|
-
# @param [Hash] options = {}
|
13
|
-
# @return void
|
14
|
-
def initialize(app, options = {})
|
15
|
-
super(app)
|
16
|
-
@options = options
|
17
|
-
end
|
18
|
-
|
19
|
-
# @param [Faraday::Env] no idea what this does
|
20
|
-
# @return [Faraday::Response] response from the middleware
|
21
|
-
def call(env)
|
22
|
-
@app.call(env).on_complete do |response_env|
|
23
|
-
datetime = sunset_header(response_env.response_headers)
|
24
|
-
report_deprecated_usage(env, datetime) unless datetime.nil?
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
|
30
|
-
# Check to see if there is a Sunset header, which contains deprecation date
|
31
|
-
#
|
32
|
-
# @param [Faraday::Response] response object with headers and whatnot
|
33
|
-
# @return [DateTime|nil] date time object of the expected deprecation date
|
34
|
-
def sunset_header(headers)
|
35
|
-
return if headers[:sunset].nil?
|
36
|
-
DateTime.parse(headers[:sunset])
|
37
|
-
end
|
38
|
-
|
39
|
-
def report_deprecated_usage(env, datetime)
|
40
|
-
if datetime > DateTime.now
|
41
|
-
warning = "Endpoint #{env.url} is deprecated for removal on #{datetime.iso8601}"
|
42
|
-
else
|
43
|
-
warning = "Endpoint #{env.url} was deprecated for removal on #{datetime.iso8601} and could be removed AT ANY TIME"
|
44
|
-
end
|
45
|
-
|
46
|
-
if @options[:active_support]
|
47
|
-
ActiveSupport::Deprecation.warn(warning)
|
48
|
-
elsif @options[:logger] && @options[:logger].respond_to?(:warn)
|
49
|
-
@options[:logger].warn(warning)
|
50
|
-
else
|
51
|
-
raise NoOutputForWarning, "Pass active_support: true or logger: SomeLoggerWithWriteMethod when registering middleware"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|