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
|
data/lib/api_client/version.rb
CHANGED
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,
|
8
|
-
autoload :Errors,
|
9
|
-
autoload :Scope,
|
10
|
-
autoload :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.
|
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-
|
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
|