api_client 0.5.24 → 0.6.0

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
- SHA1:
3
- metadata.gz: 385e45c6ce100a69210fe4d2134474aa6e8c546e
4
- data.tar.gz: da024da3eba27eec82941d61ad102f68894fb39a
2
+ SHA256:
3
+ metadata.gz: 65b639c41de486bf27f118c1d6d3860b77e582d1fd03213801744e5e985938af
4
+ data.tar.gz: 7c774f56f8d550c49586ab2a1237db52bf052c0122058393566cc4f36cb8636a
5
5
  SHA512:
6
- metadata.gz: d0452079acaee8c38f138be81345ceb4a6462f0d676b26b382fea91960c3601aa89655ec7abf96e0620e954161be79c026600933030072077c8b996482c60bf9
7
- data.tar.gz: d41eff230b1487ab49b9706f567e03ffd0c1f70f4dc158632358473fda215f9409dd4b25ed53af28d8246c161858cb047fa0e13876ade16bcb9a6ae9028bccef
6
+ metadata.gz: 3f2fb5535e7b62aae77d2947a7e97cf1ea58506ed7348b839864194a6d6ac4aac5222011cedb095fa16a972be3e0835bae5e6269d29f1836f02edc6ffbe3a7be
7
+ data.tar.gz: 1d85041923882d0713a2f065e25484ac4ad8992f68085a9f24296b11b6b92bdc791b3de5b44a5ed6e5dc2be520d5b5a7c9d3c5f441466fc2d082ea3ac6ffeb9f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ # 0.6.0
2
+
3
+ * Add support for faraday gem version >= 1.0.0 and < 2.0.0
4
+ * Drop support for Ruby < 2.3
5
+
6
+ # 0.5.26
7
+
8
+ * Add support for HTTP status code: 412 Precondition Failed
9
+
10
+ # 0.5.25
11
+
12
+ * Fix broken gem build (gemspec files)
13
+
1
14
  # 0.5.23
2
15
 
3
16
  * Add support for HTTP status code: 423 Locked
data/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright 2020 Zendesk
189
+ Copyright 2011 Zendesk
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ApiClient [![Build Status](https://travis-ci.org/futuresimple/api_client.svg?branch=master)](https://travis-ci.org/futuresimple/api_client)
1
+ ApiClient ![Tests](https://github.com/zendesk/api_client/workflows/Tests/badge.svg)
2
2
  =========
3
3
 
4
4
  ApiClient is an experimental builder for HTTP API clients. The goal is to provide a easy to use engine for constructing queries and map the responses to instances of Hashie::Mash subclasses.
@@ -154,8 +154,14 @@ ApiClient.logger.level = Logger::INFO
154
154
 
155
155
  ```
156
156
 
157
+ ## Releasing new version of gem
158
+
159
+ 1. Update version in [lib/api_client/version.rb](lib/api_client/version.rb) and push to `master`
160
+ 2. Create new GitHub release with tag name starting with `v` and the version, for example `v1.0.0`
161
+ 3. Gem will be automatically built and pushed to rubygems.org with GitHub Action
162
+
157
163
  ## Copyright and license
158
164
 
159
- Copyright 2020 Zendesk
165
+ Copyright 2011 Zendesk
160
166
 
161
167
  Licensed under the [Apache License, Version 2.0](LICENSE)
@@ -88,7 +88,7 @@ module ApiClient
88
88
  response = @handler.send(method, path, data, headers)
89
89
  request = { :method => method, :path => path, :data => data}
90
90
  handle_response(request, response)
91
- rescue Faraday::Error::ConnectionFailed => e
91
+ rescue Faraday::ConnectionFailed => e
92
92
  raise ApiClient::Errors::ConnectionFailed.new(e.message, request, response)
93
93
  end
94
94
 
@@ -109,6 +109,8 @@ module ApiClient
109
109
  raise ApiClient::Errors::Conflict.new(nil, request, response)
110
110
  when 410
111
111
  raise ApiClient::Errors::Gone.new(nil, request, response)
112
+ when 412
113
+ raise ApiClient::Errors::PreconditionFailed.new(nil, request, response)
112
114
  when 422
113
115
  raise ApiClient::Errors::UnprocessableEntity.new(response.body, request, response)
114
116
  when 423
@@ -24,6 +24,7 @@ module ApiClient
24
24
  class Gone < ApiClientError; end
25
25
  class ServerError < ApiClientError; end
26
26
  class UnprocessableEntity < ApiClientError; end
27
+ class PreconditionFailed < ApiClientError; end
27
28
  class Locked < ApiClientError; end
28
29
  class TooManyRequests < ApiClientError; end
29
30
  end
@@ -1,3 +1,3 @@
1
1
  module ApiClient
2
- VERSION = '0.5.24'
2
+ VERSION = '0.6.0'
3
3
  end
@@ -7,21 +7,21 @@ describe ApiClient::Connection::Basic do
7
7
  instance.inspect.should == '#<ApiClient::Connection::Basic endpoint: "http://google.com">'
8
8
  end
9
9
 
10
+ it "uses correct adapter" do
11
+ instance = ApiClient::Connection::Basic.new("http://google.com")
12
+ expect(instance.handler.builder.adapter.name).to eq("Faraday::Adapter::NetHttp")
13
+ end
14
+
10
15
  it "adds basic middlewares to faraday" do
11
16
  instance = ApiClient::Connection::Basic.new("http://google.com")
12
- instance.handler.builder.handlers.collect(&:name).should == ["Faraday::Request::UrlEncoded", "Faraday::Adapter::NetHttp"]
17
+ expect(instance.handler.builder.handlers.collect(&:name)).to include("Faraday::Request::UrlEncoded")
13
18
  end
14
19
 
15
20
  it "adds the logger middlewares to faraday if ApiClient.logger is available" do
16
21
  logger = double
17
22
  ApiClient.stub(:logger).and_return(logger)
18
23
  instance = ApiClient::Connection::Basic.new("http://google.com")
19
- instance.handler.builder.handlers.collect(&:name).should == [
20
- "ApiClient::Connection::Middlewares::Request::Logger",
21
- "Faraday::Request::UrlEncoded",
22
- "Faraday::Adapter::NetHttp"
23
- ]
24
-
24
+ expect(instance.handler.builder.handlers.collect(&:name)).to include("ApiClient::Connection::Middlewares::Request::Logger", "Faraday::Request::UrlEncoded")
25
25
  end
26
26
 
27
27
  it "creates a Faraday object on initialize" do
@@ -149,6 +149,13 @@ describe ApiClient::Connection::Basic do
149
149
  }.should raise_error(ApiClient::Errors::Gone, "Status code: 410")
150
150
  end
151
151
 
152
+ it "raises an ApiClient::Errors::PreconditionFailed if status is 412" do
153
+ @response.env[:status] = 412
154
+ lambda {
155
+ @instance.send :handle_response, request, @response
156
+ }.should raise_error(ApiClient::Errors::PreconditionFailed, "Status code: 412")
157
+ end
158
+
152
159
  it "raises an ApiClient::Errors::Unsupported if status is 422" do
153
160
  @response.env[:status] = 422
154
161
  lambda {
@@ -2,26 +2,22 @@ require "spec_helper"
2
2
 
3
3
  describe ApiClient::Connection::Oauth do
4
4
 
5
+ it "uses correct adapter" do
6
+ instance = ApiClient::Connection::Oauth.new("http://google.com")
7
+ expect(instance.handler.builder.adapter.name).to eq("Faraday::Adapter::NetHttp")
8
+ end
9
+
5
10
  it "adds basic middlewares to faraday" do
6
11
  instance = ApiClient::Connection::Oauth.new("http://google.com")
7
- instance.handler.builder.handlers.collect(&:name).should == [
8
- "ApiClient::Connection::Middlewares::Request::OAuth",
9
- "Faraday::Request::UrlEncoded",
10
- "Faraday::Adapter::NetHttp"
11
- ]
12
+ expect(instance.handler.builder.handlers.collect(&:name))
13
+ .to include("ApiClient::Connection::Middlewares::Request::OAuth", "Faraday::Request::UrlEncoded")
12
14
  end
13
15
 
14
16
  it "adds the logger middlewares to faraday if ApiClient.logger is available" do
15
17
  logger = double
16
18
  ApiClient.stub(:logger).and_return(logger)
17
19
  instance = ApiClient::Connection::Oauth.new("http://google.com")
18
- instance.handler.builder.handlers.collect(&:name).should == [
19
- "ApiClient::Connection::Middlewares::Request::Logger",
20
- "ApiClient::Connection::Middlewares::Request::OAuth",
21
- "Faraday::Request::UrlEncoded",
22
- "Faraday::Adapter::NetHttp"
23
- ]
24
-
20
+ expect(instance.handler.builder.handlers.collect(&:name))
21
+ .to include("ApiClient::Connection::Middlewares::Request::Logger", "ApiClient::Connection::Middlewares::Request::OAuth", "Faraday::Request::UrlEncoded")
25
22
  end
26
-
27
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.24
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zendesk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-22 00:00:00.000000000 Z
11
+ date: 2022-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -61,7 +61,7 @@ dependencies:
61
61
  version: 0.8.1
62
62
  - - "<"
63
63
  - !ruby/object:Gem::Version
64
- version: 1.0.0
64
+ version: 2.0.0
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,7 +71,7 @@ dependencies:
71
71
  version: 0.8.1
72
72
  - - "<"
73
73
  - !ruby/object:Gem::Version
74
- version: 1.0.0
74
+ version: 2.0.0
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: multi_json
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -93,22 +93,12 @@ executables: []
93
93
  extensions: []
94
94
  extra_rdoc_files: []
95
95
  files:
96
- - ".gitignore"
97
- - ".rspec"
98
- - ".travis.yml"
99
96
  - CHANGELOG.md
100
97
  - Gemfile
101
98
  - LICENSE
102
99
  - Makefile
103
100
  - README.md
104
101
  - Rakefile
105
- - api_client.gemspec
106
- - examples/digg.rb
107
- - examples/flickr.rb
108
- - examples/github.rb
109
- - examples/highrise.rb
110
- - examples/twitter.rb
111
- - examples/twitter_oauth.rb
112
102
  - lib/api_client.rb
113
103
  - lib/api_client/base.rb
114
104
  - lib/api_client/connection/abstract.rb
@@ -164,15 +154,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
154
  requirements:
165
155
  - - ">="
166
156
  - !ruby/object:Gem::Version
167
- version: '0'
157
+ version: 2.3.8
168
158
  required_rubygems_version: !ruby/object:Gem::Requirement
169
159
  requirements:
170
160
  - - ">="
171
161
  - !ruby/object:Gem::Version
172
162
  version: '0'
173
163
  requirements: []
174
- rubyforge_project: api_client
175
- rubygems_version: 2.5.2.3
164
+ rubygems_version: 3.4.0.dev
176
165
  signing_key:
177
166
  specification_version: 3
178
167
  summary: API client builder
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- bin
6
- coverage
7
- examples/config.rb
8
- *.sw[a-z]
9
- .idea/*
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
data/.travis.yml DELETED
@@ -1,13 +0,0 @@
1
- language: ruby
2
- before_install:
3
- - gem install bundler -v 1.11.2
4
- script: bundle exec rspec spec
5
- rvm:
6
- - jruby-1.7.2
7
- - 1.9.3
8
- - 2.1.9
9
- - 2.2.10
10
- - 2.3.8
11
- - 2.4.6
12
- - 2.5.5
13
- - 2.6.3
data/api_client.gemspec DELETED
@@ -1,49 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "api_client/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "api_client"
7
- s.version = ApiClient::VERSION
8
- s.authors = ["Zendesk"]
9
- s.email = ["opensource@zendesk.com"]
10
- s.homepage = "https://github.com/futuresimple/api_client"
11
- s.summary = %q{API client builder}
12
- s.description = %q{API client builder}
13
- s.license = "Apache License Version 2.0"
14
-
15
- s.rubyforge_project = "api_client"
16
-
17
- # Declare runtime dependencies here:
18
- def s.add_runtime_dependencies(method)
19
- if RUBY_PLATFORM == "java"
20
- send method, 'jrjackson'
21
- else
22
- send method, 'yajl-ruby'
23
- end
24
-
25
- send method, 'hashie', [">= 2.0.5"]
26
- send method, 'faraday', [">= 0.8.1", "< 1.0.0"]
27
- send method, 'multi_json', [">= 1.6.1"]
28
- end
29
-
30
- # Declare development dependencies here:
31
- s.add_development_dependency 'rspec', '2.14.1'
32
-
33
- if s.respond_to? :specification_version then
34
- s.specification_version = 3
35
-
36
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
37
- s.add_runtime_dependencies(:add_runtime_dependency)
38
- else
39
- s.add_runtime_dependencies(:add_dependency)
40
- end
41
- else
42
- s.add_runtime_dependencies(:add_dependency)
43
- end
44
-
45
- s.files = `git ls-files`.split("\n")
46
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
47
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
48
- s.require_paths = ["lib"]
49
- end
data/examples/digg.rb DELETED
@@ -1,31 +0,0 @@
1
- require "rubygems"
2
- require "bundler/setup"
3
- require "api_client"
4
-
5
- module Digg
6
-
7
- class Base < ApiClient::Base
8
-
9
- always do
10
- endpoint "http://services.digg.com"
11
- params :type => 'json'
12
- end
13
-
14
- end
15
-
16
- class Collection < Base
17
-
18
- def self.diggs
19
- Digg.build get('/2.0/digg.getAll')['diggs']
20
- end
21
-
22
- end
23
-
24
- class Digg < Base
25
- end
26
-
27
- end
28
-
29
- Digg::Collection.diggs.each do |digg|
30
- puts "#{digg.user.name}: #{digg.item.title}"
31
- end
data/examples/flickr.rb DELETED
@@ -1,37 +0,0 @@
1
- require "rubygems"
2
- require "bundler/setup"
3
- require "./examples/config" if File.exists?('examples/config.rb')
4
- require "api_client"
5
-
6
- module Flickr
7
-
8
- class Base < ApiClient::Base
9
- always do
10
- endpoint "http://api.flickr.com"
11
- params :api_key => FLICKR_API_KEY,
12
- :format => 'json',
13
- :nojsoncallback => 1
14
- end
15
- end
16
-
17
- class Collection < Base
18
-
19
- def self.interesting
20
- build params(:method => 'flickr.interestingness.getList').
21
- get("/services/rest")
22
- end
23
-
24
- def photos
25
- Photo.build self['photos']['photo']
26
- end
27
-
28
- end
29
-
30
- class Photo < Base
31
- end
32
-
33
- end
34
-
35
- Flickr::Collection.interesting.photos.each do |photo|
36
- puts photo.title
37
- end
data/examples/github.rb DELETED
@@ -1,52 +0,0 @@
1
- require "rubygems"
2
- require "bundler/setup"
3
- require "./examples/config" if File.exists?('examples/config.rb')
4
- require "api_client"
5
- require "time"
6
-
7
- module Github
8
-
9
- class Base < ApiClient::Base
10
- namespace false
11
-
12
- always do
13
- endpoint "https://api.github.com"
14
- end
15
- end
16
-
17
- class User < Base
18
-
19
- def self.find(name)
20
- fetch("/users/#{name}")
21
- end
22
-
23
- def events
24
- Github::Event.fetch("/users/#{login}/events")
25
- end
26
-
27
- def received_events
28
- Github::Event.fetch("/users/#{login}/received_events")
29
- end
30
-
31
- end
32
-
33
- class Event < Base
34
-
35
- def created_at
36
- Time.parse self['created_at']
37
- end
38
-
39
- end
40
-
41
- end
42
-
43
- user = Github::User.find("marcinbunsch")
44
-
45
- user.events.each do |event|
46
- case event.type
47
- when "FollowEvent"
48
- puts "#{event.created_at} #{event.payload.target.login}: #{event.type}"
49
- else
50
- puts "#{event.created_at} #{event.repo.name} : #{event.type}"
51
- end
52
- end
data/examples/highrise.rb DELETED
@@ -1,41 +0,0 @@
1
- require "rubygems"
2
- require "bundler/setup"
3
- require "./examples/config" if File.exists?('examples/config.rb')
4
- require "api_client"
5
- require "multi_xml"
6
-
7
- module Highrise
8
-
9
- class Base < ApiClient::Resource::Base
10
- format :xml
11
-
12
- # In this hook we set the basic auth provided in the options
13
- connection do |connection|
14
- connection.handler.basic_auth connection.options[:user], connection.options[:pass]
15
- end
16
-
17
- always do
18
- endpoint HIGHRISE_URL
19
- options(:user => HIGHRISE_TOKEN, :pass => 'X')
20
- end
21
-
22
- end
23
-
24
- class Person < Base
25
- namespace false
26
-
27
- always do
28
- path "people"
29
- end
30
-
31
- def self.build_one(hash)
32
- hash.has_key?('people') ? build_many(hash['people']) : super(hash)
33
- end
34
-
35
- end
36
-
37
- end
38
-
39
- Highrise::Person.find_all.each do |person|
40
- puts "#{person.first_name} #{person.last_name}"
41
- end
data/examples/twitter.rb DELETED
@@ -1,34 +0,0 @@
1
- require "rubygems"
2
- require "bundler/setup"
3
- require "api_client"
4
-
5
- module Twitter
6
-
7
- class Base < ApiClient::Base
8
- always do
9
- endpoint "http://api.twitter.com/"
10
- end
11
- end
12
-
13
- class Tweet < Base
14
- end
15
-
16
- class User < Base
17
-
18
- def self.find_by_username(name)
19
- params(:screen_name => name).fetch("/1/users/show.json")
20
- end
21
-
22
- def tweets
23
- Tweet.params(:screen_name => self.screen_name).fetch("/1/statuses/user_timeline.json")
24
- end
25
-
26
- end
27
-
28
- end
29
-
30
- user = Twitter::User.find_by_username("marcinbunsch")
31
- puts user.name
32
- user.tweets.each do |tweet|
33
- puts " #{tweet.text}"
34
- end
@@ -1,36 +0,0 @@
1
- require "rubygems"
2
- require "bundler/setup"
3
- require "./examples/config" if File.exists?('examples/config.rb')
4
- require "api_client"
5
-
6
- module TwitterOauth
7
-
8
- class Base < ApiClient::Base
9
-
10
- always do
11
- endpoint "https://api.twitter.com/"
12
- adapter :oauth
13
-
14
- options :oauth => {
15
- :consumer_key => TWITTER_CONSUMER_KEY, :consumer_secret => TWITTER_CONSUMER_SECRET
16
- }
17
-
18
- end
19
-
20
- end
21
-
22
- class Tweet < Base
23
-
24
- def self.tweet(message)
25
- build post('/1/statuses/update.json', :status => message)
26
- end
27
-
28
- end
29
-
30
- end
31
-
32
- config = { :token => TWITTER_TOKEN, :token_secret => TWITTER_SECRET }
33
-
34
- message = TwitterOauth::Tweet.options(:oauth => config).tweet("test #{Time.now.to_i}")
35
-
36
- puts message.text