we-call 0.7.0 → 0.9.1

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
- SHA1:
3
- metadata.gz: 2f6b6c396092e080b179bf2811abd96992fd7e1a
4
- data.tar.gz: f3d35f54e93e60b405e28a732766155d2110d209
2
+ SHA256:
3
+ metadata.gz: 83cdb2541d4d694624f06d63e03dce612db88ce09e0ff7532c4d701424aedb46
4
+ data.tar.gz: a3862e1f9f6f4f1685ab2c7c8077e4a166ab3ebfa8a017fb32aa701d7dc68705
5
5
  SHA512:
6
- metadata.gz: aa4b02af461ee342404ba0bd2ef959cbd1728cc89208fa1574fe6510b8daa85e80aa9111fe04729c57124ad2bae0bdaa736bddb800755affa0b484bfa457efe1
7
- data.tar.gz: b13a9ecdc979fdddc1d1cd3fd3be82eac6288d9be470e54414c46b3e2f7b39c261a0725a91bab51ab74578581fcade181295cb953e1ce6311057e3b6d7aa82a9
6
+ metadata.gz: 1e8f5628d633564aaf0183a89ebebb9e9c4ee82d298d2deee8513b26dd5f8a52326ce57278c3f9782986def685212995f034a3e18d65321a34081689d248ca2a
7
+ data.tar.gz: 3792fa6710c0e4fcca018ad96464772d5776864bea0fc19e2c493bd871a9008eb09f6a675892008df4b9fe8454cdda66eca8a0e09d38dee5018428c8fa985b49
@@ -0,0 +1,42 @@
1
+ version: 2.1
2
+
3
+ x-shared: &x-shared
4
+ docker:
5
+ - image: circleci/ruby:2.6.3-stretch-node
6
+
7
+ jobs:
8
+ build:
9
+ <<: *x-shared
10
+ steps:
11
+ - checkout
12
+ - run:
13
+ name: Build
14
+ command: ./script/cibuild
15
+ - persist_to_workspace:
16
+ root: .
17
+ paths: .
18
+ publish-gem:
19
+ <<: *x-shared
20
+ steps:
21
+ - attach_workspace:
22
+ at: ~/project # circleci default working directory
23
+ - run:
24
+ name: Publish Gem
25
+ command: ./script/publish_gem
26
+ workflows:
27
+ version: 2
28
+ build:
29
+ jobs:
30
+ - build:
31
+ filters:
32
+ tags:
33
+ only: /v[0-9]+(\.[0-9]+)+/
34
+ - publish-gem:
35
+ requires:
36
+ - build
37
+ filters:
38
+ branches:
39
+ ignore:
40
+ - /.*/
41
+ tags:
42
+ only: /v[0-9]+(\.[0-9]+)+/
@@ -1 +1 @@
1
- service_name: travis-ci
1
+ service_name: circleci
@@ -0,0 +1,23 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [ $default-branch ]
6
+ pull_request:
7
+ branches: [ $default-branch ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - name: Set up Ruby
15
+ uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: 2.6
18
+ - name: Install dependencies
19
+ run: bundle install
20
+ - name: Generate gemfiles
21
+ run: bundle exec appraisal install
22
+ - name: Run tests
23
+ run: bundle exec appraisal rspec
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  /spec/reports/
11
11
  /tmp/
12
12
  .byebug_history
13
+ we-call-*.gem
@@ -6,18 +6,21 @@ before_script:
6
6
  script:
7
7
  - bundle exec appraisal rspec
8
8
  gemfiles:
9
- - faraday_0.9.gemfile
10
9
  - faraday_0.10.gemfile
11
10
  - faraday_0.11.gemfile
12
11
  - faraday_0.12.gemfile
13
12
  - faraday_0.13.gemfile
13
+ - faraday_0.15.gemfile
14
+ - faraday_0.14.gemfile
14
15
  - rails_4.2.gemfile
15
16
  - rails_5.0.gemfile
16
17
  - rails_5.1.gemfile
18
+ - rails_5.2.gemfile
17
19
  rvm:
18
- - 2.2.7
19
- - 2.3.4
20
- - 2.4.1
20
+ - 2.2
21
+ - 2.3
22
+ - 2.4
23
+ - 2.5
21
24
  - ruby-head
22
25
  matrix:
23
26
  allow_failures:
data/Appraisals CHANGED
@@ -1,3 +1,11 @@
1
+ appraise "faraday-0.15" do
2
+ gem "faraday", "~> 0.15.0"
3
+ end
4
+
5
+ appraise "faraday-0.14" do
6
+ gem "faraday", "~> 0.14.0"
7
+ end
8
+
1
9
  appraise "faraday-0.13" do
2
10
  gem "faraday", "~> 0.13.0"
3
11
  end
@@ -14,8 +22,8 @@ appraise "faraday-0.10" do
14
22
  gem "faraday", "~> 0.10.0"
15
23
  end
16
24
 
17
- appraise "faraday-0.9" do
18
- gem "faraday", "~> 0.9.0"
25
+ appraise "rails-5.2" do
26
+ gem "rails", "~> 5.2.0"
19
27
  end
20
28
 
21
29
  appraise "rails-5.1" do
@@ -5,6 +5,38 @@ 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
+ ## [v0.9.1] - 2020-11-20
9
+ ### Added
10
+ - Automatically retry on network errors([#31])
11
+
12
+ [activesupport]: https://github.com/rails/rails/tree/master/activesupport
13
+ [#31]: https://github.com/wework/we-call-gem/pull/31
14
+
15
+ ## [v0.9.0] - 2018-09-18
16
+ ### Added
17
+ - Automatically reports deprecations to ActiveSupport if [activesupport] gem exists ([#21])
18
+ - Defaults detect_deprecations to nil instead of :active_support
19
+
20
+ [activesupport]: https://github.com/rails/rails/tree/master/activesupport
21
+ [#21]: https://github.com/wework/we-call-gem/pull/21
22
+
23
+ ## [v0.8.0] - 2018-08-27
24
+ ### Added
25
+ - Support for Ruby v2.5
26
+ - Support for Rails v5.2
27
+ - Support for Faraday v0.14 and v0.15
28
+ - Automatically reports deprecations to Rollbar if [rollbar] gem exists ([#17])
29
+
30
+ [rollbar]: https://github.com/rollbar/rollbar-gem
31
+ [#17]: https://github.com/wework/we-call-gem/pull/17
32
+
33
+ ### Breaking
34
+ - Dropped support for Faraday v0.9 (may still work but its no longer tested or recommended)
35
+
36
+ ## [v0.7.1] - 2018-02-20
37
+ ### Fixed
38
+ - Call the gzip middleware to handle gzipped responses, which have been broken since v0.7 for typhoeus users
39
+
8
40
  ## [v0.7.0] - 2017-10-07
9
41
  ### Breaking Changes
10
42
  - Removed `We::Call::Deprecated` and `We::Call::Annotations`. Deprecation logic is now handled by [rails-sunset] instead. I fully understand the irony of removing deprecation logic without deprecation
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ ruby '~> 2.2'
4
+
3
5
  # Specify your gem's dependencies in we-call.gemspec
4
6
  gemspec
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # We::Call
2
2
 
3
- [![Build Status][travis-image]][travis-url]
3
+ [![Build Status][ci-image]][ci-url]
4
4
  [![Coverage Status][coveralls-image]][coveralls-url]
5
5
  [![MIT License][license-image]][license-url]
6
6
 
@@ -102,6 +102,36 @@ As well as `timeout: num_seconds` which can set the entire open/read (essentiall
102
102
 
103
103
  ### Client
104
104
 
105
+ **Retry**
106
+
107
+ Automatically enabled, the retry middleware will retry the request in case of network errors. By default, the middleware will retry up to 3 times, waiting 1 second between the retries.
108
+
109
+ Disable the middleware:
110
+
111
+ ```ruby
112
+ We::Call.configure do |config|
113
+ config.retry = false
114
+ end
115
+ ```
116
+
117
+ Adjust the middleware:
118
+
119
+ ```ruby
120
+ We::Call.configure do |config|
121
+ config.retry_options = { interval: 0.5 }
122
+ end
123
+ ```
124
+
125
+ The gem smartly merges the options passed, so you can specify your own list of exceptions without being afraid to override the default ones:
126
+
127
+ ```ruby
128
+ We::Call.configure do |config|
129
+ config.retry_options = { exceptions: [Faraday::ResourceNotFound] }
130
+ end
131
+ ```
132
+
133
+ Check [Faraday's Retry Docs](https://github.com/lostisland/faraday/blob/master/docs/middleware/request/retry.md) for a list of available options.
134
+
105
135
  **DetectDeprecations**
106
136
 
107
137
  Automatically enabled, the faraday-sunset middleware will watch for the [Sunset header](https://tools.ietf.org/html/draft-wilde-sunset-header-03) and send warning to `ActiveSupport::Deprecation` if enabled, or to whatever is in `ENV['rake.logger']`.
@@ -122,9 +152,10 @@ Easy! Check your logs for `user_agent=service-name; app_name=service-name;` The
122
152
 
123
153
  ## Requirements
124
154
 
125
- - **Ruby:** v2.2 - v2.4
126
- - **Faraday:** v0.9 - v0.13
155
+ - **Ruby:** v2.2 - v2.5
156
+ - **Faraday:** v0.10 - v0.15
127
157
 
158
+ _**Note:** Other versions of Faraday may work, but we can't test against all of them forever._
128
159
 
129
160
  ## TODO
130
161
 
@@ -154,10 +185,10 @@ Bug reports and pull requests are welcome on GitHub at [wework/we-call](https://
154
185
 
155
186
 
156
187
  [coveralls-image]:https://coveralls.io/repos/github/wework/we-call-gem/badge.svg?branch=master
157
- [coveralls-url]:https://coveralls.io/github/wework/we-call-gem?branch=master
188
+ [coveralls-url]:https://coveralls.io/github/wework/we-call-gem?branch=main
158
189
 
159
- [travis-url]:https://travis-ci.org/wework/we-call-gem
160
- [travis-image]: https://travis-ci.org/wework/we-call-gem.svg?branch=master
190
+ [ci-url]:https://app.circleci.com/pipelines/github/wework/we-call-gem
191
+ [ci-image]:https://circleci.com/gh/wework/we-call-gem.svg?style=shield
161
192
 
162
193
  [license-url]: LICENSE
163
194
  [license-image]: http://img.shields.io/badge/license-MIT-000000.svg?style=flat-square
@@ -1,13 +1,12 @@
1
1
  require 'faraday'
2
+ require 'faraday_middleware'
2
3
  require 'faraday-sunset'
3
4
  require 'typhoeus'
4
5
 
5
6
  module We
6
7
  module Call
7
- autoload :Annotations, "we/call/annotations"
8
8
  autoload :Connection, "we/call/connection"
9
9
  autoload :Configuration, "we/call/configuration"
10
- autoload :Deprecated, "we/call/deprecated"
11
10
  autoload :Middleware, "we/call/middleware"
12
11
  autoload :VERSION, "we/call/version"
13
12
 
@@ -4,12 +4,14 @@ require 'faraday_middleware'
4
4
  module We
5
5
  module Call
6
6
  class Configuration
7
- attr_accessor :app_env, :app_env_header, :app_name, :app_name_header, :detect_deprecations
7
+ attr_accessor :app_env, :app_env_header, :app_name, :app_name_header, :detect_deprecations,
8
+ :retry, :retry_options
8
9
 
9
10
  def initialize
10
11
  @app_env_header = 'X-App-Env'
11
12
  @app_name_header = 'X-App-Name'
12
- @detect_deprecations = :active_support
13
+ @retry = true
14
+ @retry_options = {}
13
15
  end
14
16
  end
15
17
  end
@@ -14,6 +14,12 @@ module We
14
14
  DEFAULT_ADAPTER_CLASS = Faraday::Adapter::Typhoeus
15
15
  DEFAULT_ADAPTER = :typhoeus
16
16
 
17
+ DEFAULT_RETRY_OPTIONS = {
18
+ max: 3,
19
+ interval: 1,
20
+ exceptions: [Faraday::ConnectionFailed, Faraday::TimeoutError]
21
+ }
22
+
17
23
  class MissingApp < ArgumentError; end
18
24
  class MissingEnv < ArgumentError; end
19
25
  class MissingTimeout < ArgumentError; end
@@ -21,12 +27,16 @@ module We
21
27
 
22
28
  QueryableBuilder = Class.new(Faraday::RackBuilder) do
23
29
  def adapter?
24
- @has_adapter || false
30
+ @adapter || false
25
31
  end
26
32
 
27
33
  def adapter(key, *args, &block)
28
34
  super
29
- @has_adapter = true
35
+ @adapter = key
36
+ end
37
+
38
+ def get_adapter
39
+ @adapter || DEFAULT_ADAPTER
30
40
  end
31
41
  end
32
42
 
@@ -68,9 +78,16 @@ module We
68
78
  if config.detect_deprecations
69
79
  faraday.response :sunset, setup_sunset_middleware(faraday)
70
80
  end
81
+ if config.retry
82
+ faraday.request :retry, fetch_retry_options
83
+ end
71
84
 
72
85
  yield faraday if block_given?
73
86
 
87
+ unless adapter_handles_gzip?(faraday.builder.get_adapter)
88
+ faraday.use :gzip
89
+ end
90
+
74
91
  faraday.adapter DEFAULT_ADAPTER unless faraday.builder.adapter?
75
92
  end
76
93
  end
@@ -95,14 +112,28 @@ module We
95
112
  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.'
96
113
  end
97
114
 
98
- def setup_sunset_middleware(faraday)
99
- # In v0.5.0 this was a bool switch, now it takes :active_support or an instance of a Logger
100
- if config.detect_deprecations == true || config.detect_deprecations == :active_support
101
- return { active_support: true }
115
+ # @return [Boolean] Does the adapter handle gzip automatically or not
116
+ # https://github.com/lostisland/faraday_middleware/blob/master/lib/faraday_middleware/gzip.rb#L9
117
+ def adapter_handles_gzip?(adapter)
118
+ [:em_http, :net_http, :net_http_persistent].include?(adapter)
119
+ end
102
120
 
121
+ def setup_sunset_middleware(faraday)
122
+ options = { rollbar: :auto, active_support: :auto }
103
123
  # Pass something that might be a logger or anything with a warn method
104
- elsif config.detect_deprecations.respond_to?(:warn)
105
- return { logger: config.detect_deprecations }
124
+ if config.detect_deprecations.respond_to?(:warn)
125
+ options = options.merge({ logger: config.detect_deprecations })
126
+ end
127
+ options
128
+ end
129
+
130
+ def fetch_retry_options
131
+ DEFAULT_RETRY_OPTIONS.merge(config.retry_options) do |key, default_val, new_val|
132
+ if key == :exceptions
133
+ default_val + Array(new_val)
134
+ else
135
+ new_val
136
+ end
106
137
  end
107
138
  end
108
139
 
@@ -1,5 +1,5 @@
1
1
  module We
2
2
  module Call
3
- VERSION = "0.7.0"
3
+ VERSION = '0.9.1'
4
4
  end
5
5
  end
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -e
3
+ cd "$(dirname "$0")/.."
4
+
5
+ bundle install
6
+ bundle exec appraisal install
7
+ bundle exec appraisal rspec
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+ set -eox pipefail
3
+
4
+ mkdir -p ~/.gem
5
+ echo :rubygems_api_key: $RUBYGEMS_APIKEY > ~/.gem/credentials
6
+ chmod 0600 ~/.gem/credentials
7
+
8
+ VERSION_FILE="lib/we/call/version.rb"
9
+ if [[ -n $CIRCLE_TAG ]]; then
10
+ # Determine the version from the tag; remove the leading v "v3.3.0" -> "3.3.0"
11
+ VERSION=$(echo "${CIRCLE_TAG}" | sed 's/^v//')
12
+ # Replace the version for the gemspec with the tag version
13
+ sed -i.bak -E "s/VERSION = .*/VERSION = '$VERSION'/" $VERSION_FILE
14
+ fi
15
+
16
+ gem build *.gemspec
17
+
18
+ gem push *.gem
@@ -21,17 +21,17 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ["lib"]
22
22
 
23
23
  spec.add_dependency "typhoeus", "~> 1.3"
24
- spec.add_dependency "faraday", ">= 0.9.0", "< 1.0"
25
- spec.add_dependency "faraday_middleware", '~> 0'
26
- spec.add_dependency "faraday-sunset", "~> 0.1.0"
24
+ spec.add_dependency "faraday", ">= 0.9.0", "< 1"
25
+ spec.add_dependency "faraday_middleware", '~> 0.10'
26
+ spec.add_dependency "faraday-sunset", '~> 0.2'
27
27
 
28
- spec.add_development_dependency "appraisal", "~> 2"
29
- spec.add_development_dependency "coveralls", '~> 0.7'
28
+ spec.add_development_dependency "appraisal", "~> 2.0"
29
+ spec.add_development_dependency "coveralls_reborn", '~> 0.13'
30
30
  spec.add_development_dependency "bundler", "~> 1.14"
31
31
  spec.add_development_dependency "rake", "~> 12.0"
32
32
  spec.add_development_dependency "rails", ">= 4.2"
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 "vcr", '~> 3'
36
+ spec.add_development_dependency "vcr", '~> 4.0'
37
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.7.0
4
+ version: 0.9.1
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-07 00:00:00.000000000 Z
11
+ date: 2020-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: 0.9.0
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: '1.0'
36
+ version: '1'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,63 +43,63 @@ dependencies:
43
43
  version: 0.9.0
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
- version: '1.0'
46
+ version: '1'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: faraday_middleware
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0'
53
+ version: '0.10'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '0'
60
+ version: '0.10'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: faraday-sunset
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 0.1.0
67
+ version: '0.2'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 0.1.0
74
+ version: '0.2'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: appraisal
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '2'
81
+ version: '2.0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '2'
88
+ version: '2.0'
89
89
  - !ruby/object:Gem::Dependency
90
- name: coveralls
90
+ name: coveralls_reborn
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '0.7'
95
+ version: '0.13'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '0.7'
102
+ version: '0.13'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: bundler
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -190,14 +190,14 @@ dependencies:
190
190
  requirements:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: '3'
193
+ version: '4.0'
194
194
  type: :development
195
195
  prerelease: false
196
196
  version_requirements: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - "~>"
199
199
  - !ruby/object:Gem::Version
200
- version: '3'
200
+ version: '4.0'
201
201
  description: Handles conventions of making calls to other services, with required
202
202
  metadata for tracking calls between services, deprecations of endpoints, trace IDs,
203
203
  throttling, etc.
@@ -207,7 +207,9 @@ executables: []
207
207
  extensions: []
208
208
  extra_rdoc_files: []
209
209
  files:
210
+ - ".circleci/config.yml"
210
211
  - ".coveralls.yml"
212
+ - ".github/workflows/build.yml"
211
213
  - ".gitignore"
212
214
  - ".rspec"
213
215
  - ".travis.yml"
@@ -227,6 +229,8 @@ files:
227
229
  - lib/we/call/middleware/server.rb
228
230
  - lib/we/call/middleware/server/log_user_agent.rb
229
231
  - lib/we/call/version.rb
232
+ - script/cibuild
233
+ - script/publish_gem
230
234
  - we-call.gemspec
231
235
  homepage: https://github.com/wework/we-call-gem
232
236
  licenses:
@@ -247,8 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
251
  - !ruby/object:Gem::Version
248
252
  version: '0'
249
253
  requirements: []
250
- rubyforge_project:
251
- rubygems_version: 2.6.8
254
+ rubygems_version: 3.0.3
252
255
  signing_key:
253
256
  specification_version: 4
254
257
  summary: Making healthy, happy HTTP calls