apikit 0.0.1 → 0.0.2

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
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: