saddle 0.0.53 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +3 -0
- data/README.md +14 -8
- data/lib/saddle/endpoint.rb +6 -9
- data/lib/saddle/faraday/rack_builder.rb +15 -0
- data/lib/saddle/faraday/request.rb +4 -0
- data/lib/saddle/middleware/authentication/oauth1.rb +6 -6
- data/lib/saddle/middleware/authentication/oauth2.rb +2 -2
- data/lib/saddle/middleware/extra_env.rb +2 -2
- data/lib/saddle/middleware/logging/rails.rb +1 -1
- data/lib/saddle/middleware/logging/statsd.rb +7 -7
- data/lib/saddle/middleware/request/encode_json.rb +1 -1
- data/lib/saddle/middleware/request/path_prefix.rb +2 -2
- data/lib/saddle/middleware/request/retry.rb +8 -4
- data/lib/saddle/middleware/request/url_encoded.rb +1 -1
- data/lib/saddle/middleware/request/user_agent.rb +1 -1
- data/lib/saddle/middleware/response/default_response.rb +1 -1
- data/lib/saddle/middleware/ruby_timeout.rb +1 -1
- data/lib/saddle/requester.rb +26 -27
- data/lib/saddle/version.rb +1 -1
- data/saddle.gemspec +1 -1
- data/spec/requester/get_spec.rb +1 -1
- metadata +17 -7
- checksums.yaml +0 -15
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -41,16 +41,16 @@ Saddle enables you to create beautifully stable and functionaly API clients, in
|
|
41
41
|
[saddle-example](https://github.com/mLewisLogic/saddle-example)
|
42
42
|
|
43
43
|
### client construction
|
44
|
-
0. For the sake of cleanliness, pick a namespace that everything related to your client should live in. For this example, we'll use __SaddleExample__
|
45
|
-
1. Inherit your client class, __SaddleExample::Client__, from __Saddle::Client__
|
46
|
-
2. Create an _endpoints_ directory at the same level as your client class file
|
47
|
-
3. Create endpoint classes in the _endpoints_ directory that inherit from __Saddle::TraversalEndpoint__ and are under the __SaddleExample::Endpoints__ namespace module
|
48
|
-
1. Give these endpoints methods that call
|
49
|
-
2. Their module/class namespace determines how they are accessed in the client's call tree. For example, the
|
44
|
+
0. For the sake of cleanliness, pick a namespace that everything related to your client should live in. For this example, we'll use __SaddleExample__.
|
45
|
+
1. Inherit your client class, __SaddleExample::Client__, from __Saddle::Client__.
|
46
|
+
2. Create an _endpoints_ directory at the same level as your client class file.
|
47
|
+
3. Create endpoint classes in the _endpoints_ directory that inherit from __Saddle::TraversalEndpoint__ and are under the __SaddleExample::Endpoints__ namespace module.
|
48
|
+
1. Give these endpoints methods that call `get` or `post` to perform the actual request
|
49
|
+
2. Their module/class namespace determines how they are accessed in the client's call tree. For example, the `get_all` in __SaddleExample::Endpoints::Fish::Guppy__ would be accessed by:
|
50
50
|
|
51
|
-
|
51
|
+
client.fish.guppy.get_all
|
52
52
|
|
53
|
-
3. If you need REST style endpoints like client.
|
53
|
+
3. If you need REST style endpoints like `client.kitten.by_id('Whiskers').info` then check out __Saddle::ResourceEndpoint__ and how it's used in [saddle-example](https://github.com/mLewisLogic/saddle-example/blob/master/lib/saddle-example/endpoints/kitten.rb)
|
54
54
|
|
55
55
|
4. Initialize an instance of your client. ex:
|
56
56
|
|
@@ -62,6 +62,12 @@ Saddle enables you to create beautifully stable and functionaly API clients, in
|
|
62
62
|
* xml posting/parsing
|
63
63
|
|
64
64
|
|
65
|
+
## version notes
|
66
|
+
|
67
|
+
* Saddle versions 0.1.x are compatible with Faraday versions ~> 0.9.0
|
68
|
+
* Saddle versions 0.0.x are compatible with Faraday versions ~> 0.8.7
|
69
|
+
|
70
|
+
|
65
71
|
## Code Status
|
66
72
|
|
67
73
|
* [![Build Status](https://travis-ci.org/mLewisLogic/saddle.png?branch=master)](https://travis-ci.org/mLewisLogic/saddle)
|
data/lib/saddle/endpoint.rb
CHANGED
@@ -17,18 +17,15 @@ module Saddle
|
|
17
17
|
def initialize(requester, relative_path_override=nil, parent=nil)
|
18
18
|
@requester = requester
|
19
19
|
@parent = parent
|
20
|
-
@relative_path = relative_path_override || _relative_path
|
20
|
+
@relative_path = relative_path_override || _relative_path
|
21
21
|
end
|
22
22
|
|
23
23
|
|
24
24
|
# Generic request wrapper
|
25
25
|
def request(method, action, params={}, options={})
|
26
26
|
# Augment in interesting options
|
27
|
-
options[:
|
28
|
-
options[:
|
29
|
-
:call_chain => _path_array(),
|
30
|
-
:action => action,
|
31
|
-
}
|
27
|
+
options[:call_chain] = _path_array
|
28
|
+
options[:action] = action
|
32
29
|
@requester.send(method, _path(action), params, options)
|
33
30
|
end
|
34
31
|
|
@@ -87,7 +84,7 @@ module Saddle
|
|
87
84
|
if defined?(self.class::ABSOLUTE_PATH)
|
88
85
|
[self.class::ABSOLUTE_PATH]
|
89
86
|
else
|
90
|
-
_path_array
|
87
|
+
_path_array
|
91
88
|
end
|
92
89
|
# Join it with the action
|
93
90
|
paths = pre_action_paths + [action]
|
@@ -97,7 +94,7 @@ module Saddle
|
|
97
94
|
end
|
98
95
|
|
99
96
|
def _path_array
|
100
|
-
_endpoint_chain
|
97
|
+
_endpoint_chain.map(&:relative_path).compact
|
101
98
|
end
|
102
99
|
|
103
100
|
# Get the parent chain that led to this endpoint
|
@@ -108,7 +105,7 @@ module Saddle
|
|
108
105
|
chain << node
|
109
106
|
node = node.parent
|
110
107
|
end
|
111
|
-
chain.reverse
|
108
|
+
chain.reverse
|
112
109
|
end
|
113
110
|
|
114
111
|
# If the parent is not an endpoint, it is a root node
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Saddle
|
2
|
+
# Same as the standard Faraday::RackBuilder, but also allows passing saddle options to the env.
|
3
|
+
class RackBuilder < ::Faraday::RackBuilder
|
4
|
+
def saddle_options
|
5
|
+
@saddle_options ||= {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def build_env(connection, request)
|
9
|
+
env = super
|
10
|
+
env[:saddle] = saddle_options.deep_merge(request.saddle_options)
|
11
|
+
env
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -14,17 +14,17 @@ module Saddle
|
|
14
14
|
TYPE_URLENCODED = 'application/x-www-form-urlencoded'.freeze
|
15
15
|
|
16
16
|
def call(env)
|
17
|
-
if env[:
|
18
|
-
env[:
|
19
|
-
env[:
|
20
|
-
env[:
|
21
|
-
env[:
|
17
|
+
if env[:saddle][:client_options][:oauth1] &&
|
18
|
+
env[:saddle][:client_options][:oauth1][:consumer_key] &&
|
19
|
+
env[:saddle][:client_options][:oauth1][:consumer_secret] &&
|
20
|
+
env[:saddle][:client_options][:oauth1][:token] &&
|
21
|
+
env[:saddle][:client_options][:oauth1][:token_secret]
|
22
22
|
|
23
23
|
env[:request_headers]['Authorization'] ||= SimpleOAuth::Header.new(
|
24
24
|
env[:method],
|
25
25
|
env[:url].to_s,
|
26
26
|
filtered_body_params(env),
|
27
|
-
env[:
|
27
|
+
env[:saddle][:client_options][:oauth1]
|
28
28
|
).to_s
|
29
29
|
end
|
30
30
|
|
@@ -16,10 +16,10 @@ module Saddle
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def call(env)
|
19
|
-
if env[:
|
19
|
+
if env[:saddle][:client_options][@key_name.to_sym]
|
20
20
|
new_query = []
|
21
21
|
new_query << env[:url].query if env[:url].query
|
22
|
-
new_query << "#{@key_name}=#{CGI.escape(env[:
|
22
|
+
new_query << "#{@key_name}=#{CGI.escape(env[:saddle][:client_options][@key_name.to_sym].to_s)}"
|
23
23
|
env[:url].query = new_query.join('&')
|
24
24
|
end
|
25
25
|
|
@@ -9,8 +9,8 @@ module Saddle
|
|
9
9
|
|
10
10
|
class ExtraEnv < Faraday::Middleware
|
11
11
|
def call(env)
|
12
|
-
if env[:
|
13
|
-
env.merge!(env[:
|
12
|
+
if env[:saddle][:client_options][:extra_env]
|
13
|
+
env.merge!(env[:saddle][:client_options][:extra_env])
|
14
14
|
end
|
15
15
|
|
16
16
|
@app.call env
|
@@ -33,16 +33,16 @@ module Saddle
|
|
33
33
|
|
34
34
|
def call(env)
|
35
35
|
# Try to build up a path for the STATSD logging
|
36
|
-
if env[:
|
37
|
-
statsd_path = env[:
|
38
|
-
elsif env[:
|
36
|
+
if env[:saddle][:statsd_path]
|
37
|
+
statsd_path = env[:saddle][:statsd_path]
|
38
|
+
elsif env[:saddle][:client]
|
39
39
|
statsd_path_components = [
|
40
40
|
'saddle',
|
41
|
-
env[:
|
41
|
+
env[:saddle][:client].name.underscore,
|
42
42
|
]
|
43
|
-
if env[:
|
44
|
-
statsd_path_components += env[:
|
45
|
-
statsd_path_components << env[:
|
43
|
+
if env[:saddle][:call_chain] && env[:saddle][:action]
|
44
|
+
statsd_path_components += env[:saddle][:call_chain]
|
45
|
+
statsd_path_components << env[:saddle][:action]
|
46
46
|
else
|
47
47
|
statsd_path_components << 'raw'
|
48
48
|
statsd_path_components << "#{env[:url].host}#{env[:url].path}"
|
@@ -20,7 +20,7 @@ module Saddle
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def call(env)
|
23
|
-
if env[:
|
23
|
+
if env[:saddle][:request_style] == :json
|
24
24
|
# Make sure we're working with a valid body that's not a String
|
25
25
|
if env[:body] and !env[:body].respond_to?(:to_str)
|
26
26
|
env[:request_headers][CONTENT_TYPE] ||= MIME_TYPE
|
@@ -10,8 +10,8 @@ module Saddle
|
|
10
10
|
|
11
11
|
class PathPrefix < Faraday::Middleware
|
12
12
|
def call(env)
|
13
|
-
if env[:
|
14
|
-
env[:url].path = "/#{env[:
|
13
|
+
if env[:saddle][:client_options][:path_prefix]
|
14
|
+
env[:url].path = "/#{env[:saddle][:client_options][:path_prefix]}#{env[:url].path}"
|
15
15
|
end
|
16
16
|
|
17
17
|
@app.call env
|
@@ -17,13 +17,13 @@ module Saddle
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def call(env)
|
20
|
-
retries = env[:
|
21
|
-
backoff = env[:
|
20
|
+
retries = env[:saddle][:num_retries] || 0
|
21
|
+
backoff = env[:saddle][:retry_backoff] || 0.050 # in seconds
|
22
22
|
begin
|
23
23
|
@app.call(self.class.deep_copy(env))
|
24
24
|
rescue => e
|
25
25
|
# Only retry for GET or if the request is marked as idempotent
|
26
|
-
if env[:method] == :get || env[:
|
26
|
+
if env[:method] == :get || env[:saddle][:idempotent]
|
27
27
|
unless @ignored_exceptions.include?(e.class)
|
28
28
|
# Retry a limited number of times
|
29
29
|
if retries > 0
|
@@ -40,7 +40,11 @@ module Saddle
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def self.deep_copy(value)
|
43
|
-
if value.is_a?(
|
43
|
+
if value.is_a?(Struct)
|
44
|
+
result = value.clone
|
45
|
+
value.each{|k, v| result.send("#{k}=", deep_copy(v))}
|
46
|
+
result
|
47
|
+
elsif value.is_a?(Hash)
|
44
48
|
result = value.clone
|
45
49
|
value.each{|k, v| result[k] = deep_copy(v)}
|
46
50
|
result
|
@@ -24,7 +24,7 @@ module Saddle
|
|
24
24
|
|
25
25
|
|
26
26
|
def call(env)
|
27
|
-
if env[:
|
27
|
+
if env[:saddle][:request_style] == :urlencoded
|
28
28
|
# Make sure we're working with a valid body that's not a String
|
29
29
|
if env[:body] and !env[:body].respond_to?(:to_str)
|
30
30
|
if has_multipart?(env[:body])
|
@@ -13,7 +13,7 @@ module Saddle
|
|
13
13
|
user_agent = nil
|
14
14
|
# Build a user agent that looks like 'SaddleExample 0.0.1'
|
15
15
|
begin
|
16
|
-
user_agent = client_name = env[:
|
16
|
+
user_agent = client_name = env[:saddle][:client].name
|
17
17
|
parent_module = client_name.split('::')[0..-2].join('::').constantize
|
18
18
|
if parent_module
|
19
19
|
if defined?(parent_module::VERSION)
|
@@ -13,7 +13,7 @@ module Saddle
|
|
13
13
|
class RubyTimeout < Faraday::Middleware
|
14
14
|
|
15
15
|
def call(env)
|
16
|
-
timeout = env[:
|
16
|
+
timeout = env[:saddle][:hard_timeout] # nil or 0 means no timeout
|
17
17
|
Timeout.timeout(timeout, Saddle::TimeoutError) do
|
18
18
|
@app.call(env)
|
19
19
|
end
|
data/lib/saddle/requester.rb
CHANGED
@@ -2,7 +2,8 @@ require 'active_support/core_ext/hash'
|
|
2
2
|
|
3
3
|
require 'faraday'
|
4
4
|
require 'faraday_middleware'
|
5
|
-
|
5
|
+
require 'saddle/faraday/request'
|
6
|
+
require 'saddle/faraday/rack_builder'
|
6
7
|
|
7
8
|
require 'saddle/middleware/request/encode_json'
|
8
9
|
require 'saddle/middleware/request/path_prefix'
|
@@ -79,7 +80,7 @@ module Saddle
|
|
79
80
|
# Make a GET request
|
80
81
|
def get(url, params={}, options={})
|
81
82
|
response = connection.get do |req|
|
82
|
-
req.options
|
83
|
+
req.saddle_options = options
|
83
84
|
req.body = options[:body] if options.has_key?(:body)
|
84
85
|
req.url(url, params)
|
85
86
|
end
|
@@ -89,7 +90,7 @@ module Saddle
|
|
89
90
|
# Make a POST request
|
90
91
|
def post(url, data={}, options={})
|
91
92
|
response = connection.post do |req|
|
92
|
-
req.options
|
93
|
+
req.saddle_options = options
|
93
94
|
req.url(url)
|
94
95
|
req.body = data
|
95
96
|
end
|
@@ -99,7 +100,7 @@ module Saddle
|
|
99
100
|
# Make a PUT request
|
100
101
|
def put(url, data={}, options={})
|
101
102
|
response = connection.put do |req|
|
102
|
-
req.options
|
103
|
+
req.saddle_options = options
|
103
104
|
req.url(url)
|
104
105
|
req.body = data
|
105
106
|
end
|
@@ -109,7 +110,7 @@ module Saddle
|
|
109
110
|
# Make a DELETE request
|
110
111
|
def delete(url, params={}, options={})
|
111
112
|
response = connection.delete do |req|
|
112
|
-
req.options
|
113
|
+
req.saddle_options = options
|
113
114
|
req.url(url, params)
|
114
115
|
end
|
115
116
|
handle_response(response)
|
@@ -131,61 +132,59 @@ module Saddle
|
|
131
132
|
|
132
133
|
# Build a connection instance, wrapped in the middleware that we want
|
133
134
|
def connection
|
134
|
-
@connection ||= Faraday.new(base_url) do |
|
135
|
+
@connection ||= Faraday.new(base_url, :builder_class => Saddle::RackBuilder) do |connection|
|
135
136
|
# Include the requester level options
|
136
|
-
builder.
|
137
|
+
connection.builder.saddle_options[:client_options] = @options
|
137
138
|
|
138
139
|
# Config options
|
139
|
-
|
140
|
-
builder.
|
141
|
-
builder.
|
142
|
-
builder.
|
143
|
-
:client => @parent_client,
|
144
|
-
}
|
140
|
+
connection.options[:timeout] = @timeout
|
141
|
+
connection.builder.saddle_options[:request_style] = @request_style
|
142
|
+
connection.builder.saddle_options[:num_retries] = @num_retries
|
143
|
+
connection.builder.saddle_options[:client] = @parent_client
|
145
144
|
|
146
145
|
# Support default return values upon exception
|
147
|
-
|
146
|
+
connection.use(Saddle::Middleware::Response::DefaultResponse)
|
148
147
|
|
149
148
|
# Hard timeout on the entire request
|
150
|
-
|
149
|
+
connection.use(Saddle::Middleware::RubyTimeout)
|
151
150
|
|
152
151
|
# Set up a user agent
|
153
|
-
|
152
|
+
connection.use(Saddle::Middleware::Request::UserAgent)
|
154
153
|
|
155
154
|
# Set up the path prefix if needed
|
156
|
-
|
155
|
+
connection.use(Saddle::Middleware::Request::PathPrefix)
|
157
156
|
|
158
157
|
# Apply additional implementation-specific middlewares
|
159
158
|
@additional_middlewares.each do |m|
|
160
|
-
m[:args] ?
|
159
|
+
m[:args] ? connection.use(m[:klass], *m[:args]) : connection.use(m[:klass])
|
161
160
|
end
|
162
161
|
|
163
162
|
# Request encoding
|
164
|
-
|
165
|
-
|
163
|
+
connection.use(Saddle::Middleware::Request::JsonEncoded)
|
164
|
+
connection.use(Saddle::Middleware::Request::UrlEncoded)
|
166
165
|
|
167
166
|
# Automatic retries
|
168
|
-
|
167
|
+
connection.use(Saddle::Middleware::Request::Retry)
|
169
168
|
|
170
169
|
# Raise exceptions on 4xx and 5xx errors
|
171
|
-
|
170
|
+
connection.use(Saddle::Middleware::Response::RaiseError)
|
172
171
|
|
173
172
|
# Handle parsing out the response if it's JSON
|
174
|
-
|
173
|
+
connection.use(Saddle::Middleware::Response::ParseJson)
|
175
174
|
|
176
175
|
# Set up instrumentation around the adapter for extensibility
|
177
|
-
|
176
|
+
connection.use(FaradayMiddleware::Instrumentation)
|
178
177
|
|
179
178
|
# Add in extra env data if needed
|
180
|
-
|
179
|
+
connection.use(Saddle::Middleware::ExtraEnv)
|
181
180
|
|
182
181
|
# Set up our adapter
|
183
182
|
if @stubs.nil?
|
184
183
|
# Use the default adapter
|
185
|
-
|
184
|
+
connection.adapter(@http_adapter[:key], *@http_adapter[:args])
|
186
185
|
else
|
187
186
|
# Use the test adapter
|
188
|
-
|
187
|
+
connection.adapter(:test, @stubs)
|
189
188
|
end
|
190
189
|
end
|
191
190
|
end
|
data/lib/saddle/version.rb
CHANGED
data/saddle.gemspec
CHANGED
data/spec/requester/get_spec.rb
CHANGED
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saddle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Mike Lewis
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2015-07-02 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: activesupport
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,20 +30,23 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: faraday
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
37
|
+
version: 0.9.0
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
45
|
+
version: 0.9.0
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: faraday_middleware
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -87,6 +94,8 @@ files:
|
|
87
94
|
- lib/saddle/client_attributes.rb
|
88
95
|
- lib/saddle/endpoint.rb
|
89
96
|
- lib/saddle/errors.rb
|
97
|
+
- lib/saddle/faraday/rack_builder.rb
|
98
|
+
- lib/saddle/faraday/request.rb
|
90
99
|
- lib/saddle/method_tree_builder.rb
|
91
100
|
- lib/saddle/middleware/authentication/oauth1.rb
|
92
101
|
- lib/saddle/middleware/authentication/oauth2.rb
|
@@ -123,26 +132,27 @@ files:
|
|
123
132
|
homepage: https://github.com/mLewisLogic/saddle
|
124
133
|
licenses:
|
125
134
|
- MIT
|
126
|
-
metadata: {}
|
127
135
|
post_install_message:
|
128
136
|
rdoc_options: []
|
129
137
|
require_paths:
|
130
138
|
- lib
|
131
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
132
141
|
requirements:
|
133
142
|
- - ! '>='
|
134
143
|
- !ruby/object:Gem::Version
|
135
144
|
version: '0'
|
136
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
137
147
|
requirements:
|
138
148
|
- - ! '>='
|
139
149
|
- !ruby/object:Gem::Version
|
140
150
|
version: '0'
|
141
151
|
requirements: []
|
142
152
|
rubyforge_project:
|
143
|
-
rubygems_version:
|
153
|
+
rubygems_version: 1.8.23.2
|
144
154
|
signing_key:
|
145
|
-
specification_version:
|
155
|
+
specification_version: 3
|
146
156
|
summary: A full-featured, generic consumer layer for you to build API client implementations
|
147
157
|
with.
|
148
158
|
test_files:
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ODQ4YmI4OGJiZDRjMjBhNmFkOWI1NGEzZWIyNDA0NWM3NGJjZTdlMQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NGI3MWM5MDgzZWIyYjVkM2RhYzk1YmRjMGY5YjU3MmE2N2MxNGYyMQ==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
M2JkMWY0YTljNmFmOGI3MjA0NjY0MDRkZmU0ODc4MDNlYmYzMTNmNjVkMmJl
|
10
|
-
YmI4ZjBkMzhiOWJhMmFlYjg1MGE1YTJjZDg4MmY5Mjc0N2RmNDBkZjFjZmMy
|
11
|
-
ZjYxZWVjYzZiZjI1MzMwYWJmMjdiYWY3NDJmODNmMDk5ZGY0M2I=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
M2Q3NWU4ODRkZGRkOWI5MDY2NmFkZWY3NDViNmZmYjE2NWJlMjEyYTBhY2Qx
|
14
|
-
ZGY3M2VmYzIwMmFkMjc2M2VlZTRhNTQwZjU1Yjg1MGRlNzMyMTQ0Mzg0NDRj
|
15
|
-
NGViYjZjY2EwMWIwN2VkYzgzNGU0MGI2NjJiODVkNGY5M2ZjZDU=
|