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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b5f8847896e17a2fec34ca12c0f3de5ac7a3462
4
- data.tar.gz: 40f62ebf46c1096cdbb427e9b59314c5cc9b108b
3
+ metadata.gz: f216ee9568b578d28b28ed06cdb66026434ac417
4
+ data.tar.gz: b5f3d4649b197e500418a9c2c944d32034349967
5
5
  SHA512:
6
- metadata.gz: 5b3df1717cb053439ce90d57ce8087014959a47a65ac7b8ea42edf0dc15cbd672f60d0487076a0d3f5c2f30cbfe17711fc53d9e23946ac7a911f0886ec5edb9c
7
- data.tar.gz: 28867ed3ab8fc0c9583ce732b288d81fcc50f9e1c802190da690f3ac9727b7074f18e337f3bb890c9cf82736da1e6183b8c45d3c76650e58703c3b42caf9a312
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
- ## Unreleased
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 for making HTTP requests, tracking calls, raising deprecations, supporting trace IDs, throttling, etc.
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.8 - v0.13
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
- - [ ] Split DetectDeprecations into standalone `faraday-sunset` gem
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-js-logger
186
- [travis-image]: https://travis-ci.org/wework/we-js-logger.svg?branch=master
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
@@ -1,3 +1,5 @@
1
+ require "ruby_decorators"
2
+
1
3
  module We
2
4
  module Call
3
5
  module Annotations
@@ -9,7 +9,7 @@ module We
9
9
  def initialize
10
10
  @app_env_header = 'X-App-Env'
11
11
  @app_name_header = 'X-App-Name'
12
- @detect_deprecations = true
12
+ @detect_deprecations = :active_support
13
13
  end
14
14
  end
15
15
  end
@@ -1,11 +1,9 @@
1
1
  require 'faraday'
2
- require 'faraday_middleware'
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
- ::Faraday.new(url: host, builder: builder) do |faraday|
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
- if defined? ActiveSupport::Deprecation
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
@@ -3,22 +3,22 @@ require "ruby_decorators"
3
3
  module We
4
4
  module Call
5
5
  class Deprecated < RubyDecorator
6
- @@methods = {}
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
- @@methods[method] = value
17
+ self.class.methods[method] = value
14
18
  end
15
19
 
16
20
  def self.get(method)
17
- @@methods[method]
18
- end
19
-
20
- def self.methods
21
- @@methods
21
+ methods[method]
22
22
  end
23
23
 
24
24
  # Called when annotation is used
@@ -1,7 +1,6 @@
1
1
  module We
2
2
  module Call
3
3
  module Middleware
4
- autoload :Client, 'we/call/middleware/client'
5
4
  autoload :Server, 'we/call/middleware/server'
6
5
  end
7
6
  end
@@ -1,5 +1,5 @@
1
1
  module We
2
2
  module Call
3
- VERSION = "0.5.0"
3
+ VERSION = "0.5.2"
4
4
  end
5
5
  end
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.0
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-08-28 00:00:00.000000000 Z
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
@@ -1,9 +0,0 @@
1
- module We
2
- module Call
3
- module Middleware
4
- module Client
5
- autoload :DetectDeprecations, "we/call/middleware/client/detect_deprecations"
6
- end
7
- end
8
- end
9
- end