saddle 0.0.53 → 0.1.0
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.
- 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
|
* [](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=
|