hyperclient 0.2.0 → 0.3.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/.gitignore +0 -1
- data/.rvmrc +1 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +96 -0
- data/Guardfile +7 -0
- data/Rakefile +5 -1
- data/Readme.md +19 -9
- data/features/api_navigation.feature +23 -0
- data/features/default_config.feature +19 -0
- data/features/steps/api_navigation.rb +33 -0
- data/features/steps/default_config.rb +29 -0
- data/features/support/api.rb +24 -0
- data/features/support/env.rb +4 -0
- data/features/support/fixtures.rb +43 -0
- data/hyperclient.gemspec +9 -7
- data/lib/faraday/connection.rb +17 -0
- data/lib/faraday/request/digest_authentication.rb +83 -0
- data/lib/hyperclient/attributes.rb +5 -1
- data/lib/hyperclient/collection.rb +7 -1
- data/lib/hyperclient/entry_point.rb +37 -27
- data/lib/hyperclient/link.rb +41 -16
- data/lib/hyperclient/link_collection.rb +1 -0
- data/lib/hyperclient/resource.rb +8 -3
- data/lib/hyperclient/version.rb +1 -1
- data/lib/hyperclient.rb +11 -3
- data/test/faraday/connection_test.rb +29 -0
- data/test/faraday/digest_authentication_test.rb +41 -0
- data/test/hyperclient/entry_point_test.rb +15 -32
- data/test/hyperclient/link_test.rb +93 -12
- data/test/hyperclient_test.rb +12 -0
- data/test/test_helper.rb +1 -1
- metadata +119 -67
- data/lib/hyperclient/http.rb +0 -165
- data/test/hyperclient/http_test.rb +0 -214
metadata
CHANGED
@@ -1,144 +1,176 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyperclient
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Oriol Gual
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ! '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
none: false
|
21
|
-
prerelease: false
|
22
15
|
name: faraday
|
23
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
24
18
|
requirements:
|
25
|
-
- -
|
19
|
+
- - ~>
|
26
20
|
- !ruby/object:Gem::Version
|
27
|
-
version: '0'
|
28
|
-
none: false
|
21
|
+
version: '0.8'
|
29
22
|
type: :runtime
|
30
|
-
|
23
|
+
prerelease: false
|
31
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
32
26
|
requirements:
|
33
|
-
- -
|
27
|
+
- - ~>
|
34
28
|
- !ruby/object:Gem::Version
|
35
|
-
version: '0'
|
29
|
+
version: '0.8'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: faraday_middleware
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
36
33
|
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0.9'
|
38
|
+
type: :runtime
|
37
39
|
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0.9'
|
46
|
+
- !ruby/object:Gem::Dependency
|
38
47
|
name: uri_template
|
39
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
40
50
|
requirements:
|
41
|
-
- -
|
51
|
+
- - ~>
|
42
52
|
- !ruby/object:Gem::Version
|
43
|
-
version: '0'
|
44
|
-
none: false
|
53
|
+
version: '0.5'
|
45
54
|
type: :runtime
|
46
|
-
|
55
|
+
prerelease: false
|
47
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
48
58
|
requirements:
|
49
|
-
- -
|
59
|
+
- - ~>
|
50
60
|
- !ruby/object:Gem::Version
|
51
|
-
version: '0'
|
52
|
-
|
53
|
-
prerelease: false
|
61
|
+
version: '0.5'
|
62
|
+
- !ruby/object:Gem::Dependency
|
54
63
|
name: net-http-digest_auth
|
55
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
56
66
|
requirements:
|
57
|
-
- -
|
67
|
+
- - ~>
|
58
68
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
60
|
-
none: false
|
69
|
+
version: '1.2'
|
61
70
|
type: :runtime
|
62
|
-
|
71
|
+
prerelease: false
|
63
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
64
74
|
requirements:
|
65
75
|
- - ~>
|
66
76
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
68
|
-
|
69
|
-
prerelease: false
|
77
|
+
version: '1.2'
|
78
|
+
- !ruby/object:Gem::Dependency
|
70
79
|
name: minitest
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: 3.4.0
|
76
|
-
none: false
|
77
86
|
type: :development
|
78
|
-
|
87
|
+
prerelease: false
|
79
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
80
90
|
requirements:
|
81
|
-
- -
|
91
|
+
- - ~>
|
82
92
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
84
|
-
|
85
|
-
prerelease: false
|
93
|
+
version: 3.4.0
|
94
|
+
- !ruby/object:Gem::Dependency
|
86
95
|
name: turn
|
87
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
88
98
|
requirements:
|
89
|
-
- -
|
99
|
+
- - ~>
|
90
100
|
- !ruby/object:Gem::Version
|
91
|
-
version: '0'
|
92
|
-
none: false
|
101
|
+
version: '0.9'
|
93
102
|
type: :development
|
94
|
-
|
103
|
+
prerelease: false
|
95
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
96
106
|
requirements:
|
97
|
-
- -
|
107
|
+
- - ~>
|
98
108
|
- !ruby/object:Gem::Version
|
99
|
-
version: '0'
|
100
|
-
|
101
|
-
prerelease: false
|
109
|
+
version: '0.9'
|
110
|
+
- !ruby/object:Gem::Dependency
|
102
111
|
name: webmock
|
103
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
104
114
|
requirements:
|
105
|
-
- -
|
115
|
+
- - ~>
|
106
116
|
- !ruby/object:Gem::Version
|
107
|
-
version: '
|
108
|
-
none: false
|
117
|
+
version: '1.8'
|
109
118
|
type: :development
|
110
|
-
|
119
|
+
prerelease: false
|
111
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
112
122
|
requirements:
|
113
|
-
- -
|
123
|
+
- - ~>
|
114
124
|
- !ruby/object:Gem::Version
|
115
|
-
version: '
|
116
|
-
|
117
|
-
prerelease: false
|
125
|
+
version: '1.8'
|
126
|
+
- !ruby/object:Gem::Dependency
|
118
127
|
name: mocha
|
119
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
120
130
|
requirements:
|
121
|
-
- -
|
131
|
+
- - ~>
|
122
132
|
- !ruby/object:Gem::Version
|
123
|
-
version: '0'
|
124
|
-
none: false
|
133
|
+
version: '0.13'
|
125
134
|
type: :development
|
126
|
-
|
135
|
+
prerelease: false
|
127
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
128
138
|
requirements:
|
129
|
-
- -
|
139
|
+
- - ~>
|
130
140
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
141
|
+
version: '0.13'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rack-test
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
132
145
|
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0.6'
|
150
|
+
type: :development
|
133
151
|
prerelease: false
|
134
|
-
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0.6'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: spinach
|
135
160
|
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
136
162
|
requirements:
|
137
163
|
- - ! '>='
|
138
164
|
- !ruby/object:Gem::Version
|
139
165
|
version: '0'
|
140
|
-
none: false
|
141
166
|
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
142
174
|
description: HyperClient is a Ruby Hypermedia API client.
|
143
175
|
email:
|
144
176
|
- oriol.gual@gmail.com
|
@@ -151,6 +183,7 @@ files:
|
|
151
183
|
- .travis.yml
|
152
184
|
- .yardopts
|
153
185
|
- Gemfile
|
186
|
+
- Gemfile.lock
|
154
187
|
- Guardfile
|
155
188
|
- LICENSE
|
156
189
|
- MIT-LICENSE
|
@@ -158,28 +191,38 @@ files:
|
|
158
191
|
- Readme.md
|
159
192
|
- examples/cyberscore.rb
|
160
193
|
- examples/hal_shop.rb
|
194
|
+
- features/api_navigation.feature
|
195
|
+
- features/default_config.feature
|
196
|
+
- features/steps/api_navigation.rb
|
197
|
+
- features/steps/default_config.rb
|
198
|
+
- features/support/api.rb
|
199
|
+
- features/support/env.rb
|
200
|
+
- features/support/fixtures.rb
|
161
201
|
- hyperclient.gemspec
|
202
|
+
- lib/faraday/connection.rb
|
203
|
+
- lib/faraday/request/digest_authentication.rb
|
162
204
|
- lib/hyperclient.rb
|
163
205
|
- lib/hyperclient/attributes.rb
|
164
206
|
- lib/hyperclient/collection.rb
|
165
207
|
- lib/hyperclient/entry_point.rb
|
166
|
-
- lib/hyperclient/http.rb
|
167
208
|
- lib/hyperclient/link.rb
|
168
209
|
- lib/hyperclient/link_collection.rb
|
169
210
|
- lib/hyperclient/resource.rb
|
170
211
|
- lib/hyperclient/resource_collection.rb
|
171
212
|
- lib/hyperclient/version.rb
|
213
|
+
- test/faraday/connection_test.rb
|
214
|
+
- test/faraday/digest_authentication_test.rb
|
172
215
|
- test/fixtures/collection.json
|
173
216
|
- test/fixtures/element.json
|
174
217
|
- test/fixtures/root.json
|
175
218
|
- test/hyperclient/attributes_test.rb
|
176
219
|
- test/hyperclient/collection_test.rb
|
177
220
|
- test/hyperclient/entry_point_test.rb
|
178
|
-
- test/hyperclient/http_test.rb
|
179
221
|
- test/hyperclient/link_collection_test.rb
|
180
222
|
- test/hyperclient/link_test.rb
|
181
223
|
- test/hyperclient/resource_collection_test.rb
|
182
224
|
- test/hyperclient/resource_test.rb
|
225
|
+
- test/hyperclient_test.rb
|
183
226
|
- test/test_helper.rb
|
184
227
|
homepage: http://codegram.github.com/hyperclient/
|
185
228
|
licenses: []
|
@@ -188,23 +231,23 @@ rdoc_options: []
|
|
188
231
|
require_paths:
|
189
232
|
- lib
|
190
233
|
required_ruby_version: !ruby/object:Gem::Requirement
|
234
|
+
none: false
|
191
235
|
requirements:
|
192
236
|
- - ! '>='
|
193
237
|
- !ruby/object:Gem::Version
|
194
238
|
version: '0'
|
195
239
|
segments:
|
196
240
|
- 0
|
197
|
-
hash: -
|
198
|
-
none: false
|
241
|
+
hash: -3632989280066104764
|
199
242
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
243
|
+
none: false
|
200
244
|
requirements:
|
201
245
|
- - ! '>='
|
202
246
|
- !ruby/object:Gem::Version
|
203
247
|
version: '0'
|
204
248
|
segments:
|
205
249
|
- 0
|
206
|
-
hash: -
|
207
|
-
none: false
|
250
|
+
hash: -3632989280066104764
|
208
251
|
requirements: []
|
209
252
|
rubyforge_project:
|
210
253
|
rubygems_version: 1.8.24
|
@@ -212,16 +255,25 @@ signing_key:
|
|
212
255
|
specification_version: 3
|
213
256
|
summary: ''
|
214
257
|
test_files:
|
258
|
+
- features/api_navigation.feature
|
259
|
+
- features/default_config.feature
|
260
|
+
- features/steps/api_navigation.rb
|
261
|
+
- features/steps/default_config.rb
|
262
|
+
- features/support/api.rb
|
263
|
+
- features/support/env.rb
|
264
|
+
- features/support/fixtures.rb
|
265
|
+
- test/faraday/connection_test.rb
|
266
|
+
- test/faraday/digest_authentication_test.rb
|
215
267
|
- test/fixtures/collection.json
|
216
268
|
- test/fixtures/element.json
|
217
269
|
- test/fixtures/root.json
|
218
270
|
- test/hyperclient/attributes_test.rb
|
219
271
|
- test/hyperclient/collection_test.rb
|
220
272
|
- test/hyperclient/entry_point_test.rb
|
221
|
-
- test/hyperclient/http_test.rb
|
222
273
|
- test/hyperclient/link_collection_test.rb
|
223
274
|
- test/hyperclient/link_test.rb
|
224
275
|
- test/hyperclient/resource_collection_test.rb
|
225
276
|
- test/hyperclient/resource_test.rb
|
277
|
+
- test/hyperclient_test.rb
|
226
278
|
- test/test_helper.rb
|
227
279
|
has_rdoc:
|
data/lib/hyperclient/http.rb
DELETED
@@ -1,165 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'json'
|
3
|
-
require 'net/http/digest_auth'
|
4
|
-
|
5
|
-
module Hyperclient
|
6
|
-
# Internal: This class wrapps HTTParty and performs the HTTP requests for a
|
7
|
-
# resource.
|
8
|
-
class HTTP
|
9
|
-
attr_writer :faraday
|
10
|
-
# Public: Initializes the HTTP agent.
|
11
|
-
#
|
12
|
-
# url - A String to send the HTTP requests.
|
13
|
-
# config - A Hash with the configuration of the HTTP connection.
|
14
|
-
# :headers - The Hash with the headers of the connection.
|
15
|
-
# :auth - The Hash with the authentication options:
|
16
|
-
# :type - A String or Symbol to set the authentication type.
|
17
|
-
# Allowed values are :digest or :basic.
|
18
|
-
# :user - A String with the user.
|
19
|
-
# :password - A String with the user.
|
20
|
-
# :debug - The flag (true/false) to debug the HTTP connections.
|
21
|
-
# :faraday_options - A Hash that will be passed to Faraday.new (optional).
|
22
|
-
# Can additionally include a :block => <Proc> that is also
|
23
|
-
# passed to Faraday.
|
24
|
-
#
|
25
|
-
def initialize(url, config)
|
26
|
-
@url = url
|
27
|
-
@config = config
|
28
|
-
@base_uri = config.fetch(:base_uri)
|
29
|
-
@faraday_options = (config[:faraday_options] || {}).dup
|
30
|
-
@faraday_block = @faraday_options.delete(:block)
|
31
|
-
|
32
|
-
authenticate!
|
33
|
-
toggle_debug! if @config[:debug]
|
34
|
-
end
|
35
|
-
|
36
|
-
def url
|
37
|
-
begin
|
38
|
-
URI.parse(@base_uri).merge(@url).to_s
|
39
|
-
rescue URI::InvalidURIError
|
40
|
-
@url
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# Public: Sends a GET request the the resource url.
|
45
|
-
#
|
46
|
-
# Returns: The parsed response.
|
47
|
-
def get
|
48
|
-
response = process_request :get
|
49
|
-
|
50
|
-
if body = response.body
|
51
|
-
JSON.parse(body)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
# Public: Sends a POST request the the resource url.
|
56
|
-
#
|
57
|
-
# params - A Hash to send as POST params
|
58
|
-
#
|
59
|
-
# Returns: A HTTParty::Response
|
60
|
-
def post(params)
|
61
|
-
wrap_response process_request(:post, params)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Public: Sends a PUT request the the resource url.
|
65
|
-
#
|
66
|
-
# params - A Hash to send as PUT params
|
67
|
-
#
|
68
|
-
# Returns: A HTTParty::Response
|
69
|
-
def put(params)
|
70
|
-
wrap_response process_request(:put, params)
|
71
|
-
end
|
72
|
-
|
73
|
-
# Public: Sends an OPTIONS request the the resource url.
|
74
|
-
#
|
75
|
-
# Returns: A HTTParty::Response
|
76
|
-
def options
|
77
|
-
wrap_response process_request(:options)
|
78
|
-
end
|
79
|
-
|
80
|
-
# Public: Sends a HEAD request the the resource url.
|
81
|
-
#
|
82
|
-
# Returns: A HTTParty::Response
|
83
|
-
def head
|
84
|
-
wrap_response process_request(:head)
|
85
|
-
end
|
86
|
-
|
87
|
-
# Public: Sends a DELETE request the the resource url.
|
88
|
-
#
|
89
|
-
# Returns: A HTTParty::Response
|
90
|
-
def delete
|
91
|
-
wrap_response process_request(:delete)
|
92
|
-
end
|
93
|
-
|
94
|
-
private
|
95
|
-
|
96
|
-
def faraday
|
97
|
-
default_block = lambda do |faraday|
|
98
|
-
faraday.request :url_encoded
|
99
|
-
faraday.adapter :net_http
|
100
|
-
end
|
101
|
-
@faraday ||= Faraday.new({:url => @base_uri, :headers => @config[:headers] || {}
|
102
|
-
}.merge(@faraday_options), &(@faraday_block || default_block))
|
103
|
-
end
|
104
|
-
|
105
|
-
def wrap_response(faraday_response)
|
106
|
-
def faraday_response.code
|
107
|
-
status
|
108
|
-
end
|
109
|
-
faraday_response
|
110
|
-
end
|
111
|
-
|
112
|
-
def process_request(method, params = nil)
|
113
|
-
response = faraday.run_request method, url, params, faraday.headers
|
114
|
-
if response.status == 401 && @digest_auth
|
115
|
-
response = faraday.run_request method, url, nil, faraday.headers do |request|
|
116
|
-
request.headers['Authorization'] = digest_auth_header(
|
117
|
-
url, response.headers['www-authenticate'], method)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
response
|
121
|
-
end
|
122
|
-
|
123
|
-
# Internal: Sets the authentication method for HTTParty.
|
124
|
-
#
|
125
|
-
# options - An options Hash to set the authentication options.
|
126
|
-
#
|
127
|
-
# Returns nothing.
|
128
|
-
def authenticate!
|
129
|
-
if (options = @config[:auth])
|
130
|
-
auth_method = options.fetch(:type).to_s + '_auth'
|
131
|
-
send auth_method, options
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def basic_auth(options)
|
136
|
-
faraday.basic_auth options[:user], options[:password]
|
137
|
-
end
|
138
|
-
|
139
|
-
def digest_auth(options)
|
140
|
-
@digest_auth = options
|
141
|
-
end
|
142
|
-
|
143
|
-
def digest_auth_header(url, realm, method)
|
144
|
-
uri = URI.parse(url)
|
145
|
-
uri.user = @digest_auth[:user]
|
146
|
-
uri.password = @digest_auth[:password]
|
147
|
-
digest_auth = Net::HTTP::DigestAuth.new
|
148
|
-
digest_auth.auth_header uri, realm, method.upcase
|
149
|
-
end
|
150
|
-
|
151
|
-
# Internal: Enables HTTP debugging.
|
152
|
-
#
|
153
|
-
# stream - An object to stream the HTTP out to or just a truthy value.
|
154
|
-
def toggle_debug!
|
155
|
-
stream = @config[:debug]
|
156
|
-
require 'logger'
|
157
|
-
|
158
|
-
if stream.respond_to?(:<<)
|
159
|
-
faraday.response :logger, ::Logger.new(stream)
|
160
|
-
else
|
161
|
-
faraday.response :logger, ::Logger.new($stderr)
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|