api_client 0.3.1 → 0.3.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.
@@ -0,0 +1,16 @@
1
+ require 'faraday'
2
+
3
+ # Exactly like Basic, but uses JSON encoding for request body
4
+ # if applicable
5
+ module ApiClient
6
+ module Connection
7
+ class Json < Basic
8
+ def finalize_handler
9
+ @handler.use Middlewares::Request::Logger, ApiClient.logger if ApiClient.logger
10
+ @handler.use Middlewares::Request::Json
11
+ @handler.use Faraday::Request::UrlEncoded
12
+ @handler.adapter Faraday.default_adapter
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,37 @@
1
+ require "faraday"
2
+ require "yajl"
3
+
4
+ class ApiClient::Connection::Middlewares::Request::Json < Faraday::Middleware
5
+ CONTENT_TYPE = "Content-Type".freeze
6
+
7
+ class << self
8
+ attr_accessor :mime_type
9
+ end
10
+ self.mime_type = "application/json".freeze
11
+
12
+ def call(env)
13
+ match_content_type(env) do |data|
14
+ params = Faraday::Utils::ParamsHash[data]
15
+ env[:body] = Yajl::Encoder.encode(params)
16
+ end
17
+ @app.call env
18
+ end
19
+
20
+ def match_content_type(env)
21
+ if process_request?(env)
22
+ env[:request_headers][CONTENT_TYPE] ||= self.class.mime_type
23
+ yield env[:body] unless env[:body].respond_to?(:to_str)
24
+ end
25
+ end
26
+
27
+ def process_request?(env)
28
+ type = request_type(env)
29
+ env[:body] and (type.empty? or type == self.class.mime_type)
30
+ end
31
+
32
+ def request_type(env)
33
+ type = env[:request_headers][CONTENT_TYPE].to_s
34
+ type = type.split(";", 2).first if type.index(";")
35
+ type
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module ApiClient
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
data/lib/api_client.rb CHANGED
@@ -4,10 +4,10 @@ module ApiClient
4
4
  attr_accessor :logger
5
5
  end
6
6
 
7
- autoload :Base, "api_client/base"
8
- autoload :Errors, "api_client/errors"
9
- autoload :Scope, "api_client/scope"
10
- autoload :Utils, "api_client/utils"
7
+ autoload :Base, "api_client/base"
8
+ autoload :Errors, "api_client/errors"
9
+ autoload :Scope, "api_client/scope"
10
+ autoload :Utils, "api_client/utils"
11
11
 
12
12
  module Mixins
13
13
  autoload :ConnectionHooks, "api_client/mixins/connection_hooks"
@@ -34,11 +34,13 @@ module ApiClient
34
34
  module Request
35
35
  autoload :OAuth, "api_client/connection/middlewares/request/oauth"
36
36
  autoload :Logger, "api_client/connection/middlewares/request/logger"
37
+ autoload :Json, "api_client/connection/middlewares/request/json"
37
38
  end
38
39
  end
39
40
 
40
41
  autoload :Abstract, "api_client/connection/abstract"
41
42
  autoload :Basic, "api_client/connection/basic"
43
+ autoload :Json, "api_client/connection/json"
42
44
  autoload :Oauth, "api_client/connection/oauth"
43
45
  end
44
46
 
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ describe ApiClient::Connection::Middlewares::Request::Json do
4
+ let(:app) { mock }
5
+ let(:body) { {:some => :data} }
6
+ let(:env) do
7
+ {
8
+ :url => "http://api.twitter.com",
9
+ :request_headers => {},
10
+ :method => "post",
11
+ :body => body
12
+ }
13
+ end
14
+
15
+ subject { ApiClient::Connection::Middlewares::Request::Json.new(app) }
16
+
17
+ it "sets content type to json" do
18
+ app.should_receive(:call).
19
+ with(hash_including(:request_headers => {"Content-Type" => "application/json"}))
20
+
21
+ subject.call(env)
22
+ end
23
+
24
+ it "JSON encodes body" do
25
+ app.should_receive(:call).
26
+ with(hash_including(:body => Yajl::Encoder.encode(body)))
27
+
28
+ subject.call(env)
29
+ end
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-06 00:00:00.000000000 Z
12
+ date: 2012-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -83,6 +83,8 @@ files:
83
83
  - lib/api_client/base.rb
84
84
  - lib/api_client/connection/abstract.rb
85
85
  - lib/api_client/connection/basic.rb
86
+ - lib/api_client/connection/json.rb
87
+ - lib/api_client/connection/middlewares/request/json.rb
86
88
  - lib/api_client/connection/middlewares/request/logger.rb
87
89
  - lib/api_client/connection/middlewares/request/oauth.rb
88
90
  - lib/api_client/connection/oauth.rb
@@ -108,6 +110,7 @@ files:
108
110
  - spec/api_client/connection/abstract_spec.rb
109
111
  - spec/api_client/connection/basic_spec.rb
110
112
  - spec/api_client/connection/oauth_spec.rb
113
+ - spec/api_client/connection/request/json_spec.rb
111
114
  - spec/api_client/connection/request/logger_spec.rb
112
115
  - spec/api_client/connection/request/oauth_spec.rb
113
116
  - spec/api_client/resource/base_spec.rb
@@ -152,6 +155,7 @@ test_files:
152
155
  - spec/api_client/connection/abstract_spec.rb
153
156
  - spec/api_client/connection/basic_spec.rb
154
157
  - spec/api_client/connection/oauth_spec.rb
158
+ - spec/api_client/connection/request/json_spec.rb
155
159
  - spec/api_client/connection/request/logger_spec.rb
156
160
  - spec/api_client/connection/request/oauth_spec.rb
157
161
  - spec/api_client/resource/base_spec.rb