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