almodovar 1.5.3 → 1.5.4

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: b0070e4a31dadf08f8c1c4419f1cf9adaae3cfb3
4
- data.tar.gz: e7749dc727492f4362a89d9f7e8f374c336b4a28
3
+ metadata.gz: 85aa0a429ca1941cb1cdfb137f9f8955c69b8c9c
4
+ data.tar.gz: ea1145d5b1682a40c5a6371e275386bc3bb3a534
5
5
  SHA512:
6
- metadata.gz: 2d368d1b28e8e011828ccaf01fa735facb74f012323b799c3b24c74baee7b6278606bc3689678b353c732b62d556a43ae1c8b2862eb517190c5019de61f1ed04
7
- data.tar.gz: d8306c513cd1a59226374c935b2a34e4d0df44ca556082fe01963cb683ad7f7be6f257447d4678f3710b9d5d89846f42208e91ec802e5766e04cbdeff33694df
6
+ metadata.gz: ef21d0d38978ea475a591ea75ece12e6144c3fafe1ae2c200c56c34cd5ec0fa00c7dbf7c10797ca624c691eee486752e412dd9fc1cf7fc2a147d2e9d70428e1f
7
+ data.tar.gz: 65d3a7c15e6bb59b33ce3d1d6381d32af237898a6fcfa800fa02442dfb2ce9fb95c19cde5d114c942d8f38724778d7385d1c4a8403cd44e383212ae62e706ab3
@@ -109,10 +109,23 @@ And exactly the same with the _delete_ method:
109
109
  => <job> ... </job>
110
110
  >> job.delete
111
111
 
112
+ == Detailed error messages
113
+
114
+ In case an incorrect _PUT/POST_ request fails with 422 response status, you can access list of errors using _error_messages_ method of Almodovar::UnprocessableEntityError:
115
+
116
+ >> collection_entry = Almodovar::Resource("http://sequence.example.com/api/collection_entries/12345", auth)
117
+ => <collection-entry> ... </collection-entry>
118
+ >> begin
119
+ collection_entry.update(:collection_entry => {:position => 3.2})
120
+ rescue Almodovar::UnprocessableEntityError => e
121
+ e.error_messages
122
+ end
123
+ => ["Position must be an integer"]
124
+
112
125
  ==To-do
113
126
 
114
127
  * Better error management
115
128
  * Write the conventions Almodovar expects in an API
116
129
  * Other authentication methods than digest
117
130
 
118
- Copyright (c) 2010 BeBanjo S.L., released under the MIT license
131
+ Copyright (c) 2010 BeBanjo S.L., released under the MIT license
@@ -2,6 +2,7 @@ module Almodovar
2
2
  class HttpError < StandardError
3
3
  attr_reader :response_status, :response_body
4
4
 
5
+ # Children of this class must not override the initialize method
5
6
  def initialize(response, url)
6
7
  @response_status = response.status
7
8
  @response_body = response.body
@@ -20,4 +21,46 @@ module Almodovar
20
21
 
21
22
  class ConnectTimeoutError < TimeoutError
22
23
  end
24
+
25
+ class UnprocessableEntityError < HttpError
26
+ def errors?
27
+ error_messages.any?
28
+ end
29
+
30
+ # There are some different kind of errors in Almodovar servers
31
+ # "errors" => [{"error" => "wadus"}]
32
+ # "errors" => {"error" => ["wadus", "foo"]
33
+ # "error" => {"message" => "chaflan"}
34
+ #
35
+ # In case we cannot parse the response an empty array is returned
36
+ def error_messages
37
+ @error_messages ||= begin
38
+ if hash.key?('errors')
39
+ Array.wrap(hash['errors']).flat_map do |error|
40
+ error.is_a?(Hash) && error.key?('error') ? error['error'] : error.to_s
41
+ end
42
+ elsif hash.key?('error')
43
+ Array.wrap(hash['error'] && hash['error']['message'])
44
+ else
45
+ []
46
+ end
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def hash
53
+ @hash ||= begin
54
+ Hash.from_xml(@response_body) || {}
55
+ rescue StandardError
56
+ # The expected errors depends on the ActiveSupport::XmlMini_parser used that it's REXML by default but there
57
+ # are other, so just rescue a generic error
58
+ {}
59
+ end
60
+ end
61
+ end
62
+
63
+ HTTP_ERRORS = {
64
+ 422 => UnprocessableEntityError
65
+ }
23
66
  end
@@ -31,7 +31,10 @@ module Almodovar
31
31
  end
32
32
 
33
33
  def check_errors(response, url)
34
- raise(Almodovar::HttpError.new(response, url)) if response.status >= 400
34
+ if response.status >= 400
35
+ http_error_klass = Almodovar::HTTP_ERRORS[response.status] || Almodovar::HttpError
36
+ raise http_error_klass.new(response, url)
37
+ end
35
38
  end
36
39
  end
37
40
  end
@@ -1,3 +1,3 @@
1
1
  module Almodovar
2
- VERSION = '1.5.3'
2
+ VERSION = '1.5.4'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: almodovar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.3
4
+ version: 1.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - BeBanjo S.L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-01 00:00:00.000000000 Z
11
+ date: 2016-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -134,8 +134,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  version: '0'
135
135
  requirements: []
136
136
  rubyforge_project:
137
- rubygems_version: 2.4.5
137
+ rubygems_version: 2.5.1
138
138
  signing_key:
139
139
  specification_version: 4
140
140
  summary: BeBanjo API client
141
141
  test_files: []
142
+ has_rdoc: