hyperclient 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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