saddle 0.1.0 → 0.2.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c6cbc5f3bed08d163ba1f6bb948acb555c16b9034ff6adac036a0f1f4252f872
4
+ data.tar.gz: 6b509a1bdb969e7b54c3c6fd93d742ef3cfd7144de2e8c36014f8a5fdc32484a
5
+ SHA512:
6
+ metadata.gz: c22f775da62289da5111c42fc64373aec52b3c831b828a0b40f9fda5d354d569da0481e8d789422965cd802ea23855816c4d53224ec3507a5a8dd977f7209c0c
7
+ data.tar.gz: 392ebba3e48907a68867ba54125fdccbc26df04659fd84db2aa053823af414da24093eca48bf3b460efaf43bfcbc1792c813b25e04c6a521b221f815ef89503d
@@ -0,0 +1,55 @@
1
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
2
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
3
+
4
+ name: Ruby
5
+
6
+ on: [pull_request, push]
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ ruby-version: [2.6, 2.7, '3.0', 3.1]
17
+ gemfile:
18
+ - activesupport_3.2
19
+ - activesupport_4.0
20
+ - activesupport_4.1
21
+ - activesupport_4.2
22
+ - activesupport_5.0
23
+ - activesupport_5.1
24
+ - activesupport_5.2
25
+ - activesupport_6.0
26
+ - activesupport_6.1
27
+ - activesupport_7.0
28
+ exclude:
29
+ - ruby-version: 2.6
30
+ gemfile: activesupport_7.0
31
+ - ruby-version: '3.0'
32
+ gemfile: activesupport_4.1
33
+ - ruby-version: 3.1
34
+ gemfile: activesupport_4.1
35
+ steps:
36
+ - uses: actions/checkout@v3
37
+
38
+ - name: Set up Ruby
39
+ uses: ruby/setup-ruby@v1
40
+ with:
41
+ ruby-version: ${{ matrix.ruby-version }}
42
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
43
+
44
+ - name: Generate Appraisal gemfiles
45
+ run: bundle exec appraisal generate
46
+
47
+ - name: Install dependencies
48
+ env:
49
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
50
+ run: bundle install
51
+
52
+ - name: Run rspec
53
+ env:
54
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
55
+ run: bundle exec rspec
data/.gitignore CHANGED
@@ -12,6 +12,7 @@
12
12
  # Gems
13
13
  *.gem
14
14
  Gemfile.lock
15
+ gemfiles/*.lock
15
16
 
16
17
  # IDEs
17
18
  .idea
data/Appraisals ADDED
@@ -0,0 +1,39 @@
1
+ appraise "activesupport_3.2" do
2
+ gem "activesupport", "~> 3.2.22"
3
+ end
4
+
5
+ appraise "activesupport_4.0" do
6
+ gem "activesupport", "~> 4.0.13"
7
+ end
8
+
9
+ appraise "activesupport_4.1" do
10
+ gem "activesupport", "~> 4.1.16"
11
+ end
12
+
13
+ appraise "activesupport_4.2" do
14
+ gem "activesupport", "~> 4.2.11"
15
+ end
16
+
17
+ appraise "activesupport_5.0" do
18
+ gem "activesupport", "~> 5.0.7"
19
+ end
20
+
21
+ appraise "activesupport_5.1" do
22
+ gem "activesupport", "~> 5.1.7"
23
+ end
24
+
25
+ appraise "activesupport_5.2" do
26
+ gem "activesupport", "~> 5.2.8"
27
+ end
28
+
29
+ appraise "activesupport_6.0" do
30
+ gem "activesupport", "~> 6.0.6"
31
+ end
32
+
33
+ appraise "activesupport_6.1" do
34
+ gem "activesupport", "~> 6.1.7"
35
+ end
36
+
37
+ appraise "activesupport_7.0" do
38
+ gem "activesupport", "~> 7.0.4"
39
+ end
data/Gemfile CHANGED
@@ -4,8 +4,8 @@ gemspec
4
4
 
5
5
  group :test do
6
6
  gem 'rake'
7
- gem 'rspec', '~> 2.14.1'
8
- gem 'rspec-instafail', '~> 0.2'
7
+ gem 'rspec', '~> 3.12'
8
+ gem 'rspec-instafail', '~> 1'
9
9
 
10
10
  gem 'airbrake'
11
11
  gem 'simple_oauth', '~> 0.2.0' # Optional dependency
data/README.md CHANGED
@@ -64,15 +64,47 @@ Saddle enables you to create beautifully stable and functionaly API clients, in
64
64
 
65
65
  ## version notes
66
66
 
67
+ * Saddle versions 0.2.x supports Ruby 3.x, drops support for 2.6
67
68
  * Saddle versions 0.1.x are compatible with Faraday versions ~> 0.9.0
68
69
  * Saddle versions 0.0.x are compatible with Faraday versions ~> 0.8.7
69
70
 
71
+ ## Appraisal Usage
72
+
73
+ Appraisal is a gem that allows us to test our library against different versions of dependencies in repeatable scenarios called "appraisals". For more information see
74
+ the [Appraisal repository](https://github.com/thoughtbot/appraisal)
75
+
76
+ First make sure appraisal is installed by running
77
+
78
+ ```
79
+ $ bundle install
80
+ ```
81
+
82
+ To update the Appraisal's gemfiles run
83
+
84
+ ```
85
+ $ bundle exec appraisal generate
86
+ ```
87
+
88
+ To test against a specific version of `activesupport` first install the dependencies, ideally we would want to install them by running
89
+ ```
90
+ $ bundle exec appraisal install
91
+ ```
92
+
93
+ However, this isn't posible fot the different constraints these versions have. So instead install the dependencies for the desired version we want to test against by running
94
+
95
+ ```
96
+ $ BUNDLE_GEMFILE=gemfiles/activesupport_6.0.gemfiles bundle install
97
+ ```
98
+
99
+ In this example we want to install the dependencies of `activesupport` version `6.0`. Then to run `rspec` with that constraints we run
100
+
101
+ ```
102
+ $ BUNDLE_GEMFILE=gemfiles/activesupport_6.0.gemfiles bundle exec rspec
103
+ ```
70
104
 
71
105
  ## Code Status
72
106
 
73
- * [![Build Status](https://travis-ci.org/mLewisLogic/saddle.png?branch=master)](https://travis-ci.org/mLewisLogic/saddle)
74
107
  * [![Code Climate](https://codeclimate.com/github/mLewisLogic/saddle.png)](https://codeclimate.com/github/mLewisLogic/saddle)
75
- * [![Dependency Status](https://gemnasium.com/mLewisLogic/saddle.png)](https://gemnasium.com/mLewisLogic/saddle)
76
108
 
77
109
 
78
110
  ## License
@@ -19,7 +19,7 @@ module <%= root_module %>
19
19
  def call(env)
20
20
  begin
21
21
  @app.call(env)
22
- rescue Faraday::Error::ClientError => e
22
+ rescue Faraday::ClientError => e
23
23
  # This is our chance to reinterpret the response into a meaningful, client-specific
24
24
  # exception that a consuming service can handle
25
25
  exception = <%= root_module %>::GenericException
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 3.2.22"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.0.13"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.1.16"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 4.2.11"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.0.7"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.1.7"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.2.8"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 6.0.6"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 6.1.7"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 3.12"
10
+ gem "rspec-instafail", "~> 1"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 7.0.4"
6
+
7
+ group :test do
8
+ gem "rake"
9
+ gem "rspec", "~> 2.14.1"
10
+ gem "rspec-instafail", "~> 0.2"
11
+ gem "airbrake"
12
+ gem "simple_oauth", "~> 0.2.0"
13
+ gem "statsd-ruby", require: ["statsd"]
14
+ end
15
+
16
+ group :development, :test do
17
+ gem "pry"
18
+ end
19
+
20
+ gemspec path: "../"
@@ -1,7 +1,5 @@
1
1
  require 'faraday'
2
2
 
3
-
4
-
5
3
  module Saddle
6
4
  module Middleware
7
5
  module Request
@@ -15,10 +13,6 @@ module Saddle
15
13
  CONTENT_TYPE = 'Content-Type'.freeze
16
14
  MIME_TYPE = 'application/json'.freeze
17
15
 
18
- dependency do
19
- require 'json' unless defined?(::JSON)
20
- end
21
-
22
16
  def call(env)
23
17
  if env[:saddle][:request_style] == :json
24
18
  # Make sure we're working with a valid body that's not a String
@@ -1,7 +1,5 @@
1
1
  require 'faraday'
2
2
 
3
-
4
-
5
3
  module Saddle
6
4
  module Middleware
7
5
  module Response
@@ -12,10 +10,6 @@ module Saddle
12
10
  CONTENT_TYPE = 'Content-Type'.freeze
13
11
  MIME_TYPE = 'application/json'.freeze
14
12
 
15
- dependency do
16
- require 'json' unless defined?(::JSON)
17
- end
18
-
19
13
  def call(env)
20
14
  result = @app.call(env)
21
15
 
@@ -11,9 +11,9 @@ module Saddle
11
11
 
12
12
  case result.status
13
13
  when 404
14
- raise Faraday::Error::ResourceNotFound, response_values(result)
14
+ raise Faraday::ResourceNotFound, response_values(result)
15
15
  when 400...600
16
- raise Faraday::Error::ClientError, response_values(result)
16
+ raise Faraday::ClientError, response_values(result)
17
17
  end
18
18
 
19
19
  result
@@ -19,7 +19,7 @@ module Saddle
19
19
  end
20
20
  # It is possible that faraday will catch the timeout first and throw
21
21
  # this exception, rethrow as a class derived from standard error.
22
- rescue Faraday::Error::TimeoutError
22
+ rescue Faraday::TimeoutError
23
23
  raise Saddle::TimeoutError
24
24
  end
25
25
 
@@ -1,7 +1,7 @@
1
1
  require 'active_support/core_ext/hash'
2
+ require 'active_support/notifications'
2
3
 
3
4
  require 'faraday'
4
- require 'faraday_middleware'
5
5
  require 'saddle/faraday/request'
6
6
  require 'saddle/faraday/rack_builder'
7
7
 
@@ -173,7 +173,7 @@ module Saddle
173
173
  connection.use(Saddle::Middleware::Response::ParseJson)
174
174
 
175
175
  # Set up instrumentation around the adapter for extensibility
176
- connection.use(FaradayMiddleware::Instrumentation)
176
+ connection.request :instrumentation
177
177
 
178
178
  # Add in extra env data if needed
179
179
  connection.use(Saddle::Middleware::ExtraEnv)
@@ -1,3 +1,3 @@
1
1
  module Saddle
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
data/saddle.gemspec CHANGED
@@ -21,13 +21,11 @@ Gem::Specification.new do |s|
21
21
  s.files = `git ls-files`.split($\)
22
22
  s.executables = ['saddle']
23
23
  s.test_files = s.files.grep(%r{^(spec)/})
24
-
25
- if RUBY_VERSION < '1.9'
26
- s.add_dependency 'activesupport', '~> 3.0'
27
- else
28
- s.add_dependency 'activesupport', '>= 3.0'
29
- end
30
24
 
31
- s.add_dependency 'faraday', '~> 0.9.0'
32
- s.add_dependency 'faraday_middleware', '~> 0.9.0'
25
+ s.required_ruby_version = '>= 2.6'
26
+
27
+ s.add_dependency 'activesupport', '>= 3.2'
28
+ s.add_dependency 'faraday', '~> 2.1'
29
+
30
+ s.add_development_dependency 'appraisal'
33
31
  end
@@ -4,11 +4,11 @@ describe Saddle::BaseEndpoint do
4
4
  let(:base_endpoint) { Saddle::BaseEndpoint.new(Saddle::Client.create) }
5
5
 
6
6
  it 'can define singleton methods' do
7
- expect(base_endpoint.respond_to?(:define_singleton_method)).to be_true
7
+ expect(base_endpoint.respond_to?(:define_singleton_method)).to be_truthy
8
8
  end
9
9
 
10
10
  it 'responds to any defined singleton methods' do
11
11
  base_endpoint.define_singleton_method(:my_method) { true }
12
- expect(base_endpoint.my_method).to be_true
12
+ expect(base_endpoint.my_method).to be_truthy
13
13
  end
14
14
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
 
4
- describe 'FaradayMiddleware::Instrumentation' do
4
+ describe 'Faraday::Instrumentation' do
5
5
 
6
6
  context "test integration of instrumentation middleware" do
7
7
 
@@ -72,7 +72,7 @@ describe Saddle::Client do
72
72
  }
73
73
  expect {
74
74
  @default_client.requester.post(url)
75
- }.to raise_error(Faraday::Error::ClientError)
75
+ }.to raise_error(Faraday::ClientError)
76
76
  end
77
77
 
78
78
  it "should retry if it is marked as idempotent" do
metadata CHANGED
@@ -1,64 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saddle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Mike Lewis
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-07-02 00:00:00.000000000 Z
11
+ date: 2023-05-26 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
- version: '3.0'
19
+ version: '3.2'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: '3.0'
26
+ version: '3.2'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: faraday
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
- version: 0.9.0
33
+ version: '2.1'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
- version: 0.9.0
40
+ version: '2.1'
46
41
  - !ruby/object:Gem::Dependency
47
- name: faraday_middleware
42
+ name: appraisal
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
- version: 0.9.0
54
- type: :runtime
47
+ version: '0'
48
+ type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
- version: 0.9.0
54
+ version: '0'
62
55
  description: Makes writing API clients as easy as giving high fives
63
56
  email: mike.lewis@airbnb.com
64
57
  executables:
@@ -66,9 +59,11 @@ executables:
66
59
  extensions: []
67
60
  extra_rdoc_files: []
68
61
  files:
69
- - .gitignore
70
- - .rspec
71
- - .travis.yml
62
+ - ".github/workflows/ci.yml"
63
+ - ".gitignore"
64
+ - ".rspec"
65
+ - ".travis.yml"
66
+ - Appraisals
72
67
  - CHANGELOG.md
73
68
  - Gemfile
74
69
  - LICENSE
@@ -90,6 +85,16 @@ files:
90
85
  - bin/template/spec/middleware/exception_raiser_spec.rb
91
86
  - bin/template/spec/spec_helper.rb
92
87
  - bin/template/spec/stub/stub_spec.rb
88
+ - gemfiles/activesupport_3.2.gemfile
89
+ - gemfiles/activesupport_4.0.gemfile
90
+ - gemfiles/activesupport_4.1.gemfile
91
+ - gemfiles/activesupport_4.2.gemfile
92
+ - gemfiles/activesupport_5.0.gemfile
93
+ - gemfiles/activesupport_5.1.gemfile
94
+ - gemfiles/activesupport_5.2.gemfile
95
+ - gemfiles/activesupport_6.0.gemfile
96
+ - gemfiles/activesupport_6.1.gemfile
97
+ - gemfiles/activesupport_7.0.gemfile
93
98
  - lib/saddle.rb
94
99
  - lib/saddle/client_attributes.rb
95
100
  - lib/saddle/endpoint.rb
@@ -132,27 +137,25 @@ files:
132
137
  homepage: https://github.com/mLewisLogic/saddle
133
138
  licenses:
134
139
  - MIT
140
+ metadata: {}
135
141
  post_install_message:
136
142
  rdoc_options: []
137
143
  require_paths:
138
144
  - lib
139
145
  required_ruby_version: !ruby/object:Gem::Requirement
140
- none: false
141
146
  requirements:
142
- - - ! '>='
147
+ - - ">="
143
148
  - !ruby/object:Gem::Version
144
- version: '0'
149
+ version: '2.6'
145
150
  required_rubygems_version: !ruby/object:Gem::Requirement
146
- none: false
147
151
  requirements:
148
- - - ! '>='
152
+ - - ">="
149
153
  - !ruby/object:Gem::Version
150
154
  version: '0'
151
155
  requirements: []
152
- rubyforge_project:
153
- rubygems_version: 1.8.23.2
156
+ rubygems_version: 3.0.3.1
154
157
  signing_key:
155
- specification_version: 3
158
+ specification_version: 4
156
159
  summary: A full-featured, generic consumer layer for you to build API client implementations
157
160
  with.
158
161
  test_files: