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