saddle 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: