shutl_resource 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,3 @@
1
- require 'httparty'
2
1
  require 'active_support/core_ext/string'
3
2
  require 'active_support/core_ext/hash'
4
3
  require 'active_support/inflector'
@@ -8,10 +7,9 @@ require 'active_model'
8
7
 
9
8
  module Shutl::Resource
10
9
  module Rest
11
- extend HTTParty
12
10
  include ActiveModel::Serialization
13
11
 
14
- attr_reader :response
12
+ attr_accessor :pagination, :errors
15
13
 
16
14
  def self.included(base)
17
15
  base.send :extend, Shutl::Resource::RestClassMethods
@@ -20,9 +18,8 @@ module Shutl::Resource
20
18
  base.send :resource_id, :id
21
19
  end
22
20
 
23
- def initialize(args = {}, response=nil)
21
+ def initialize(args = {})
24
22
  update_attributes args
25
- @response = response
26
23
  end
27
24
 
28
25
  def as_json(_)
@@ -64,28 +61,15 @@ module Shutl::Resource
64
61
  self.instance_variables.include?(:"@#{method}") ? true : super
65
62
  end
66
63
 
67
- def parsed
68
- @parsed ||= response.body.with_indifferent_access
69
- end
70
-
71
- def status
72
- response.code
73
- end
74
-
75
- def pagination
76
- parsed[:pagination]
77
- end
78
64
 
79
65
  def next_resource
80
- pagination[:next_resource] if pagination
66
+ pagination["next_resource"] if pagination
81
67
  end
82
68
 
83
69
  def previous_resource
84
- pagination[:previous_resource] if pagination
70
+ pagination["previous_resource"] if pagination
85
71
  end
86
72
 
87
- attr_accessor :errors
88
-
89
73
  def valid?
90
74
  errors.blank?
91
75
  end
@@ -95,17 +79,11 @@ module Shutl::Resource
95
79
  end
96
80
 
97
81
  def attributes
98
- (instance_variables - [:@response]).inject({}.with_indifferent_access) do |h, var|
82
+ (instance_variables).inject({}.with_indifferent_access) do |h, var|
99
83
  h.merge( { var.to_s.gsub('@','').to_sym => instance_variable_get(var)})
100
84
  end
101
85
  end
102
86
 
103
- private
104
-
105
- def check_fail *args
106
- self.class.send :check_fail, *args
107
- end
108
-
109
87
  protected
110
88
 
111
89
  def prefix
@@ -47,7 +47,7 @@ module Shutl::Resource
47
47
  check_fail response, "Failed to find #{name}! args: #{args}, params: #{params}"
48
48
 
49
49
  including_parent_attributes = response.body[@resource_name].merge args
50
- new_object including_parent_attributes, response
50
+ new_object including_parent_attributes, response.body
51
51
  end
52
52
 
53
53
  def create attributes = {}, options = {}
@@ -61,10 +61,10 @@ module Shutl::Resource
61
61
 
62
62
  check_fail response, "Create failed"
63
63
 
64
- parsed = response.body || {}
65
- attributes = parsed[@resource_name] || {}
64
+ body = response.body || {}
65
+ attributes = body[@resource_name] || {}
66
66
 
67
- new_object attributes, response
67
+ new_object attributes, body
68
68
  end
69
69
 
70
70
  def destroy instance, options = {}
@@ -113,7 +113,7 @@ module Shutl::Resource
113
113
  check_fail response, "Failed to find all #{name.downcase.pluralize}"
114
114
 
115
115
  response_object = response.body[@resource_name.pluralize].map do |h|
116
- new_object(args.merge(h), response)
116
+ new_object(args.merge(h), response.body)
117
117
  end
118
118
  if order_collection?
119
119
  response_object.sort! do |a,b|
@@ -240,6 +240,7 @@ module Shutl::Resource
240
240
  attributes.delete "response" #used in debugging requests/responses
241
241
 
242
242
  url = member_url attributes
243
+
243
244
  response = connection.send(verb, url) do |req|
244
245
  req.headers = headers
245
246
  req.body = body
@@ -250,57 +251,56 @@ module Shutl::Resource
250
251
  response
251
252
  end
252
253
 
253
- def new_object(args={}, response=nil)
254
- instance = new add_resource_id_to(args), response
254
+ def new_object(args={}, body)
255
+ instance = new add_resource_id_to(args)
255
256
 
256
257
  instance.tap do |i|
257
- parsed_response = response.body
258
-
259
- if errors = (parsed_response and parsed_response["errors"])
260
- i.errors = errors
261
- end
258
+ i.errors = body["errors"]
259
+ i.pagination = body["pagination"]
262
260
  end
263
261
  end
264
262
 
265
263
  def check_fail response, message
266
- failure_klass = case response.status
267
- when 299
268
- if Shutl::Resource.raise_exceptions_on_no_quotes_generated
269
- Shutl::NoQuotesGenerated
270
- else
271
- nil
272
- end
273
-
274
- when 400 then Shutl::BadRequest
275
- when 401 then Shutl::UnauthorizedAccess
276
- when 403 then Shutl::ForbiddenAccess
277
- when 404 then Shutl::ResourceNotFound
278
- when 409 then Shutl::ResourceConflict
279
- when 410 then Shutl::ResourceGone
280
- when 422
281
- if Shutl::Resource.raise_exceptions_on_validation
282
- Shutl::ResourceInvalid
283
- else
284
- nil #handled as validation failure
285
- end
286
-
287
- when 411..499
288
- Shutl::BadRequest
289
- when 500 then Shutl::ServerError
290
- when 503 then Shutl::ServiceUnavailable
291
- when 501..Float::INFINITY
292
- Shutl::ServerError
293
- end
294
-
295
- if failure_klass
296
- body = if response.headers["content-type"] == "application/json"
264
+ if klass = failure_klass(response.status)
265
+ body = if response.headers["content-type"] =~ %r{application/json}
297
266
  response.body
298
267
  else
299
268
  {debug_info: response.body}
300
269
  end
301
270
 
302
271
 
303
- raise failure_klass.new body, response.status
272
+ raise klass.new body, response.status
273
+ end
274
+ end
275
+
276
+ def failure_klass(status)
277
+ case status
278
+ when 299
279
+ if Shutl::Resource.raise_exceptions_on_no_quotes_generated
280
+ Shutl::NoQuotesGenerated
281
+ else
282
+ nil
283
+ end
284
+
285
+ when 400 then Shutl::BadRequest
286
+ when 401 then Shutl::UnauthorizedAccess
287
+ when 403 then Shutl::ForbiddenAccess
288
+ when 404 then Shutl::ResourceNotFound
289
+ when 409 then Shutl::ResourceConflict
290
+ when 410 then Shutl::ResourceGone
291
+ when 422
292
+ if Shutl::Resource.raise_exceptions_on_validation
293
+ Shutl::ResourceInvalid
294
+ else
295
+ nil #handled as validation failure
296
+ end
297
+
298
+ when 411..499
299
+ Shutl::BadRequest
300
+ when 500 then Shutl::ServerError
301
+ when 503 then Shutl::ServiceUnavailable
302
+ when 501..Float::INFINITY
303
+ Shutl::ServerError
304
304
  end
305
305
  end
306
306
 
@@ -1,5 +1,5 @@
1
1
  module Shutl
2
2
  module Resource
3
- VERSION = '1.3.0'
3
+ VERSION = '1.3.1'
4
4
  end
5
5
  end
@@ -18,7 +18,6 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
  gem.version = Shutl::Resource::VERSION
20
20
 
21
- gem.add_dependency 'httparty', '~> 0.10.0'
22
21
  gem.add_dependency 'shutl_auth', '0.8.0'
23
22
  gem.add_dependency 'activemodel'
24
23
  gem.add_dependency 'faraday'
@@ -55,7 +55,7 @@ describe Shutl::Resource::Rest do
55
55
 
56
56
  before do
57
57
  @request = stub_request(:get, 'http://host/test_rests/a').
58
- to_return(:status => 200, :body => body, :headers => headers)
58
+ to_return(status: 200, body: body, headers: headers)
59
59
  end
60
60
 
61
61
  context 'both present' do
@@ -311,6 +311,7 @@ describe Shutl::Resource::Rest do
311
311
  after do
312
312
  Shutl::Resource.raise_exceptions_on_validation = true
313
313
  end
314
+
314
315
  specify do
315
316
  errors = { "base" => "invalid", "some_field" => "some field is invalid" }
316
317
  body = { "errors" => errors }.to_json
@@ -337,7 +338,7 @@ describe Shutl::Resource::Rest do
337
338
 
338
339
  def stub_post status
339
340
  stub_request(:post, 'http://host/test_rests').
340
- to_return(:status => status, :body => '', :headers => headers)
341
+ to_return(:status => status, :body => '{}', :headers => headers)
341
342
  end
342
343
 
343
344
  it 'should raise error if the remote server returns an error' do
@@ -350,7 +351,7 @@ describe Shutl::Resource::Rest do
350
351
 
351
352
  it 'should post the header content-type: json' do
352
353
  request = stub_request(:post, 'http://host/test_rests').
353
- with(:body => "{\"test_rest\":{}}", :headers => headers)
354
+ with(:body => '{"test_rest":{}}', :headers => headers)
354
355
 
355
356
  TestRest.create
356
357
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shutl_resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,22 +13,6 @@ bindir: bin
13
13
  cert_chain: []
14
14
  date: 2013-08-30 00:00:00.000000000 Z
15
15
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: httparty
18
- requirement: !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ~>
22
- - !ruby/object:Gem::Version
23
- version: 0.10.0
24
- type: :runtime
25
- prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
27
- none: false
28
- requirements:
29
- - - ~>
30
- - !ruby/object:Gem::Version
31
- version: 0.10.0
32
16
  - !ruby/object:Gem::Dependency
33
17
  name: shutl_auth
34
18
  requirement: !ruby/object:Gem::Requirement