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.
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: 2012-12-14 00:00:00.000000000 Z
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
- - !ruby/object:Gem::Dependency
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
- - !ruby/object:Gem::Dependency
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
- none: false
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: '0'
60
- none: false
69
+ version: '1.2'
61
70
  type: :runtime
62
- - !ruby/object:Gem::Dependency
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: 3.4.0
68
- none: false
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
- - !ruby/object:Gem::Dependency
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: '0'
84
- none: false
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
- - !ruby/object:Gem::Dependency
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
- none: false
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: '0'
108
- none: false
117
+ version: '1.8'
109
118
  type: :development
110
- - !ruby/object:Gem::Dependency
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: '0'
116
- none: false
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
- - !ruby/object:Gem::Dependency
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
- name: rack-test
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: -3503842849478118704
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: -3503842849478118704
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:
@@ -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