apikit 0.0.1 → 0.0.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: c84f9b6c87b4164b1ed4a1f84b3190a9c13e4601
4
- data.tar.gz: 3af85124ca1984034b6aece59a8f1e7a9d291c9b
3
+ metadata.gz: 5d48c6faae790450e338f79a2d082a5651bbe99b
4
+ data.tar.gz: e1f216aec8f006fb59b7ac2cb99619bffa85094c
5
5
  SHA512:
6
- metadata.gz: 0de8aa44d9da0f1028c4033a46f0ae349b19741b245c25c5c99457e7f3acbd5c587814faf9861f06c74d74a26ea317f0d69d84673686c5bda65e5797f7c2f941
7
- data.tar.gz: 0018b83ca1bcb4ad7e2f9b7a2dd27890c0064dda803c39518c310707e4fdecf7e17196278ef5b76acc5ad1644329dde2452de272f6a8be398f7a7b3b25cbd812
6
+ metadata.gz: 61580572c6c92b11c00881b4805bfaf8cc1032c45985f893771b513ec00869813163b8fe0f4303e016c8f45137cd29ed65f3927a032fcf15119b68f256dc561b
7
+ data.tar.gz: 5abab6118e164d2f7811c3d5c180174d6068a391dbceed21637e577eeaa63afdad288891ee8fe14828a12af2cd2b7882b32b1487b4dfe19ae2d53d9f536cee88
data/Rakefile CHANGED
@@ -1,7 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
- #require "rspec/core/rake_task"
2
+ require "rspec/core/rake_task"
3
3
 
4
- #Rspec::Core::RakeTask.new(:spec)
5
-
6
- #task :default => :spec
4
+ RSpec::Core::RakeTask.new(:spec)
7
5
 
6
+ task :default => :spec
data/lib/apikit/client.rb CHANGED
@@ -1,11 +1,15 @@
1
1
  module Apikit
2
2
  class Client
3
- attr_accessor :api_endpoint
3
+ attr_accessor :api_endpoint, :config
4
4
 
5
- def initialize(api_endpoint)
5
+ # options:
6
+ def initialize(api_endpoint, config = Apikit.config )
6
7
  @api_endpoint = api_endpoint
8
+ @config = config
7
9
  end
8
10
 
11
+ # options:
12
+ # query:
9
13
  def get(path, options = {})
10
14
  request :get, path, options
11
15
  end
@@ -30,11 +34,20 @@ module Apikit
30
34
  private
31
35
 
32
36
  def agent
33
- @agent ||= Sawyer::Agent.new(api_endpoint) do |http|
37
+ @agent ||= Sawyer::Agent.new(api_endpoint, sawyer_options) do |http|
34
38
  http.headers[:content_type] = "application/json"
35
39
  end
36
40
  end
37
41
 
42
+ def sawyer_options
43
+ {}.tap do |opts|
44
+ opts[:faraday] = Faraday.new do |conn|
45
+ config.faraday_options.call(conn) if config.faraday_options
46
+ conn.adapter Faraday.default_adapter
47
+ end
48
+ end
49
+ end
50
+
38
51
  end
39
52
  end
40
53
 
@@ -0,0 +1,19 @@
1
+ module Apikit
2
+ class Configuration
3
+ attr_reader :faraday_options
4
+
5
+ def initialize
6
+
7
+ end
8
+
9
+ def config_faraday(&config_block)
10
+ @faraday_options = config_block
11
+ end
12
+
13
+ def self.default
14
+ new
15
+ end
16
+ end
17
+ Config = Configuration
18
+
19
+ end
@@ -1,3 +1,3 @@
1
1
  module Apikit
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/apikit.rb CHANGED
@@ -1,7 +1,26 @@
1
1
  require 'sawyer'
2
2
 
3
3
  require "apikit/version"
4
+ require "apikit/configuration"
4
5
  require 'apikit/client'
5
6
 
6
7
  module Apikit
8
+ class << self
9
+ attr_reader :configuration
10
+
11
+ def configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+ alias config configuration
15
+
16
+ def reset_config
17
+ @configuration = Configuration.new
18
+ end
19
+
20
+ def configure
21
+ yield configuration
22
+ end
23
+
24
+ end
25
+
7
26
  end
@@ -2,22 +2,66 @@
2
2
  describe Apikit::Client do
3
3
  let(:api_endpoint) { "http://awesome.api"}
4
4
  let(:client) { Apikit::Client.new(api_endpoint) }
5
+ let(:path) { '/ping.json' }
6
+ let(:stub_ping) { stub_request(:get, api_endpoint + path) }
5
7
 
6
8
  describe ".get" do
7
- let(:path) { '/ping.json' }
8
9
 
9
10
  it "get parsed result " do
10
- stub_get = stub_request(:get, api_endpoint + path).to_return(json_response({ok: true}))
11
+ stub_get = stub_ping.to_return(json_response({ok: true}))
11
12
  result = client.get(path)
12
13
  expect(result.ok).to eq(true)
13
14
  end
14
15
 
15
16
  it "get string result (without json response header)" do
16
- stub_get = stub_request(:get, api_endpoint + path).to_return(body: {ok: true}.to_json)
17
+ stub_get = stub_ping.to_return(body: {ok: true}.to_json)
17
18
  result = client.get(path)
18
19
  expect(result).to eq("{\"ok\":true}")
19
20
  end
20
21
 
22
+ it "handle query parameters" do
23
+ stub_get = stub_ping.with(query: {timeout: 5}).to_return(body: {ok: true}.to_json)
24
+ result = client.get(path, query: {timeout: 5})
25
+ expect(result).to eq("{\"ok\":true}")
26
+ end
27
+
28
+ it "handle request fail" do
29
+ stub_get = stub_ping.to_return(json_response({ok: false}, {status: [500, "Internal Server Error"]}))
30
+ result = client.get(path)
31
+ expect(result.ok).to eq(false)
32
+ end
33
+
34
+ it "handle request fail, when invalid json, parsed response is extract what the server returns" do
35
+ stub_get = stub_ping.to_return(json_response("OMG, WTF", {status: [500, "Internal Server Error"]}))
36
+ result = client.get(path)
37
+ expect(result).to eq("OMG, WTF")
38
+ end
39
+
40
+ end
41
+
42
+ describe ".post" do
43
+ it "handle query parameters" do
44
+ stub_get = stub_request(:post, api_endpoint + path).with(query: {timeout: 5}).to_return(body: {ok: true}.to_json)
45
+ result = client.post(path, query: {timeout: 5})
46
+ expect(result).to eq("{\"ok\":true}")
47
+ end
48
+ end
49
+
50
+ describe "options[:config]" do
51
+ let(:config) do
52
+ Apikit::Config.new.tap do |config|
53
+ config.config_faraday do |conn|
54
+ conn.use Faraday::Response::RaiseError
55
+ end
56
+ end
57
+ end
58
+ let(:client) { Apikit::Client.new(api_endpoint, config) }
59
+
60
+ it "should use the raise error middleware" do
61
+ stub_get = stub_ping.to_return(json_response({ok: false}, {status: [500, "Internal Server Error"]}))
62
+ expect { result = client.get(path) }.to raise_error(Faraday::ClientError)
63
+ end
64
+
21
65
  end
22
66
 
23
67
 
data/spec/spec_helper.rb CHANGED
@@ -76,10 +76,10 @@ e Kernel.srand config.seed
76
76
  =end
77
77
  end
78
78
 
79
- def json_response(hash)
79
+ def json_response(hash, options = {})
80
80
  {
81
81
  :body => hash.to_json,
82
82
  :headers => {'Content-Type' => 'application/json' }
83
- }
83
+ }.merge(options)
84
84
 
85
85
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apikit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - niedhui
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-10 00:00:00.000000000 Z
11
+ date: 2014-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sawyer
@@ -68,6 +68,7 @@ files:
68
68
  - apikit.gemspec
69
69
  - lib/apikit.rb
70
70
  - lib/apikit/client.rb
71
+ - lib/apikit/configuration.rb
71
72
  - lib/apikit/version.rb
72
73
  - spec/apikit/client_spec.rb
73
74
  - spec/spec_helper.rb
@@ -98,3 +99,4 @@ summary: try to implement an api consumer
98
99
  test_files:
99
100
  - spec/apikit/client_spec.rb
100
101
  - spec/spec_helper.rb
102
+ has_rdoc: