api_client 0.3.1 → 0.3.2

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