we-call 0.5.0 → 0.5.2
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/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
|

|
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
|