rest-service-client 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ac0a3ad05b3b3b3d9e17840d32c9d8e7844a73c
4
- data.tar.gz: ff5156657486903f275ac4ec8eb531ecc99a9866
3
+ metadata.gz: 52389c1e5a8b0ac92ab10c0fa513ae869f4fe4ed
4
+ data.tar.gz: f04aecbe71a578cea9eb99ded4dd50de9a1761b7
5
5
  SHA512:
6
- metadata.gz: 141e9f10a76baa1d2a4c8e1a14b704fcb3f354b632ef692ba6a8c0639a42dcb348edbc778f09b05a91052466285d2d83bcd5f755c188cdb458819c34967b4f62
7
- data.tar.gz: c53e460873fefdcf7f39077fe8170d64b0290931cc747407a3ce72702a5f30839be2f885b2dd86d1efcaebb4de90d276c60eba0a8174ddbec5a3eb8e760dd3eb
6
+ metadata.gz: 5b808ced71893baec3ea69ee7ff5b0f5567ec3026225bcbcacb8583e00bdb920eb84c870611deb7e6739c1d635d637feb070e0cc25a43a7a126adc697f9e3746
7
+ data.tar.gz: 5805fd955602cd8c0414df5dd2ea0f5ab5d92c7ccc50766dee113567f81fde3a0b3a3aedd0031f1fa82969673c0e71b88ec04c847dd51d3b1c867053a72d3ab1
data/README.md CHANGED
@@ -77,13 +77,13 @@ end
77
77
 
78
78
  service = SimpleService.new
79
79
 
80
- p service.first_photo['id']
80
+ p service.first_photo.result['id']
81
81
  # 1
82
82
 
83
- p service.second_photo['id']
83
+ p service.second_photo.result['id']
84
84
  # 2
85
85
 
86
- p service.photo(id: 10)['id']
86
+ p service.photo(id: 10).result['id']
87
87
  # 10
88
88
 
89
89
  ```
@@ -98,8 +98,8 @@ class SimpleService
98
98
  end
99
99
 
100
100
  service = SimpleService.new
101
- p service.photo['id'] # 1
102
- p service.photo(id: 2)['id'] # 2
101
+ p service.photo.result['id'] # 1
102
+ p service.photo(id: 2).result['id'] # 2
103
103
  ```
104
104
 
105
105
  ```ruby
@@ -112,7 +112,7 @@ end
112
112
  service = SimpleService.new
113
113
  # Sends the request to 'https://jsonplaceholder.typicode.com/photos/1'
114
114
  # includes Headers: { 'Authentication': 'my-token' }
115
- p service.first_photo['albumId'] # 1
115
+ p service.first_photo.result['albumId'] # 1
116
116
 
117
117
  # Sends the request to 'https://jsonplaceholder.typicode.com/photos/1'
118
118
  # includes Headers: {
@@ -120,7 +120,7 @@ p service.first_photo['albumId'] # 1
120
120
  # 'AnotherHeaderKey': 'AnotherHeaderValue'
121
121
  # }
122
122
  another_headers = { AnotherHeaderKey: 'AnotherHeaderValue' }
123
- photo = service.first_photo(headers: another_headers)
123
+ photo = service.first_photo(headers: another_headers).result
124
124
  p photo['albumId'] # 1
125
125
 
126
126
  ```
@@ -134,7 +134,7 @@ class SimpleService
134
134
  end
135
135
 
136
136
  service = SimpleService.new
137
- service.delete_photo id: 1
137
+ service.delete_photo(id: 1).result
138
138
  ```
139
139
 
140
140
  ### POST
@@ -152,7 +152,10 @@ photo = {
152
152
  url: 'http://placehold.it/600/92c952',
153
153
  thumbnailUrl: 'http://placehold.it/150/92c952'
154
154
  }
155
- p service.add_photo payload: photo
155
+ response = service.add_photo(payload: photo)
156
+ p response.status # 201
157
+ p response.headers # {:date=>"...}
158
+ p response.result
156
159
  =begin
157
160
  {
158
161
  "albumId"=>1,
@@ -176,7 +179,7 @@ end
176
179
 
177
180
  service = SimpleService.new
178
181
  updated_photo = service.update_photo_data id: 1, payload: { title: 'new title'}
179
- p updated_photo['title']
182
+ p updated_photo.result['title']
180
183
  # "new title"
181
184
 
182
185
  ```
@@ -199,7 +202,7 @@ class SimpleService
199
202
  end
200
203
 
201
204
  service = SimpleService.new
202
- service.photo
205
+ service.photo.result
203
206
  =begin
204
207
  ______
205
208
  |
@@ -232,6 +235,22 @@ gets the one argument with response body and returns whatever you want.
232
235
  And you need to add your serializer to your service using:
233
236
  `serializer MyAwesomSerializer`
234
237
 
238
+ ## Errors
239
+
240
+ ```ruby
241
+ class SimpleService
242
+ include RestServiceClient
243
+ debug true
244
+ host 'https://jsonplaceholder.typicode.com'
245
+ get :bad_url, '/bad_url'
246
+ end
247
+
248
+ service = SimpleService.new
249
+ response = service.bad_url
250
+ p response.status # 404
251
+ p response.message # "404 Not Found"
252
+
253
+ ```
235
254
  ### Example
236
255
  ```ruby
237
256
  class Photo
@@ -293,12 +312,58 @@ And you need to add your serializer to your service using:
293
312
 
294
313
  service = MyService.new
295
314
 
296
- p service.find_photo(id: 1).album_id # 1
297
- p service.photos.find { |p| p.id == 3 }.id # 1
298
- p service.find_post(id: 1).user_id # 1
315
+ p service.find_photo(id: 1).result.album_id # 1
316
+ p service.photos.result.find { |p| p.id == 3 }.id # 1
317
+ p service.find_post(id: 1).result.user_id # 1
299
318
 
300
319
  ```
301
320
 
321
+
322
+ ## Response Object
323
+
324
+ #### Response
325
+ If request was completely sent, the class of response be `RestServiceClient::Response`
326
+ This object has `:status`, `:headers`, `:body` and `:result` fields.
327
+
328
+ `:status` contains the number(integer) of http status code.
329
+
330
+ `:headers` contains the http headers from response.
331
+
332
+ `:body` will be a http body as plain text.
333
+
334
+ `:result` will contain deserialized http body.
335
+
336
+ #### ResponseWithError
337
+ If the request failed, the class of response will be RestServiceClient::ResponseWithError
338
+ This object has `:status`, `:headers`, `:body`, `:result` and `:message`
339
+ All fields except of `:message` are equals to `RestServiceClient::Response` fields.
340
+
341
+ `:message` will contain the string with error message
342
+
343
+ You are able to check the response before trying to use result to avoid exceptions:
344
+ ```ruby
345
+ class SimpleService
346
+ include RestServiceClient
347
+ host 'https://jsonplaceholder.typicode.com'
348
+ get :get_photo, '/photos/:id'
349
+ get :bad_url, '/bad_url'
350
+ end
351
+
352
+ service = SimpleService.new
353
+
354
+ response = service.get_photo id: 1
355
+ if response.status == 200
356
+ p "Photo with name: #{response.result['name']} has been loaded"
357
+ end
358
+
359
+ response = service.bad_url
360
+ if response.status != 200
361
+ p "Something was wrong. Reason: #{response.message}"
362
+ # "Something was wrong. Reason: 404 Not Found"
363
+ end
364
+
365
+ ```
366
+
302
367
  ## Development
303
368
 
304
369
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -115,18 +115,36 @@ module RestServiceClient
115
115
  puts "| Payload: #{payload}"
116
116
  end
117
117
 
118
- response = make_request http_method, endpoint, payload, headers
118
+ begin
119
+ result = make_request http_method, endpoint, payload, headers
120
+ response = RestServiceClient::Response.new(
121
+ result.code,
122
+ result.headers,
123
+ result.body,
124
+ serializer.deserialize(result.body)
125
+ )
126
+ rescue RestClient::Exception => e
127
+ response = RestServiceClient::ResponseWithError.new(
128
+ e.http_code,
129
+ e.http_headers,
130
+ e.http_body,
131
+ e.http_body,
132
+ e.message
133
+ )
134
+ end
119
135
 
120
136
  if @debug
121
137
  puts '|'
122
138
  puts "| #{self.class.name} is processing the response on #{http_method.upcase} request to #{endpoint}"
123
- puts "| Status: #{response.code}"
124
- puts "| Body: #{response.body}"
139
+ puts "| Status: #{response.status}"
140
+ puts "| Headers: #{response.headers}"
141
+ puts "| Result: #{response.result}"
142
+ puts "| Error message: #{response.message}" if response.is_a?(RestServiceClient::ResponseWithError)
125
143
  puts '|______'
126
144
  puts
127
145
  end
128
146
 
129
- serializer.deserialize(response.body)
147
+ response
130
148
  end
131
149
  end
132
150
  end
@@ -136,4 +154,23 @@ module RestServiceClient
136
154
  JSON.parse(data)
137
155
  end
138
156
  end
157
+
158
+ class Response
159
+ attr_reader :status, :headers, :body, :result
160
+
161
+ def initialize(status, headers, body, result)
162
+ @status = status
163
+ @headers = headers
164
+ @body = body
165
+ @result = result
166
+ end
167
+ end
168
+
169
+ class ResponseWithError < Response
170
+ attr_reader :message
171
+ def initialize(status, headers, body, result, message)
172
+ super(status, headers, body, result)
173
+ @message = message
174
+ end
175
+ end
139
176
  end
@@ -1,5 +1,5 @@
1
1
  module RestServiceClient
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -26,8 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rake', '~> 10.0'
27
27
  spec.add_development_dependency 'minitest', '~> 5.0'
28
28
 
29
- spec.add_dependency 'rest-client'
30
- spec.add_dependency 'json'
29
+ spec.add_dependency 'rest-client', '~> 2.0'
30
+ spec.add_dependency 'json', '~> 2.1'
31
31
 
32
32
  spec.required_ruby_version = '>= 2.0.0'
33
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-service-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Bespalov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-19 00:00:00.000000000 Z
11
+ date: 2017-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,30 +56,30 @@ dependencies:
56
56
  name: rest-client
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '2.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '2.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: json
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '2.1'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '2.1'
83
83
  description:
84
84
  email:
85
85
  - gravisbesya@list.ru