lhs 1.2.3 → 1.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: 8d19aca4a6fcb6ae3919253eb5dfc56dd15b9dee
4
- data.tar.gz: 923b15da62737dd1dd0b1f1fa9b326eba4401da9
3
+ metadata.gz: 4d2fe9d241de70e1547f04ecc340becf4758a22e
4
+ data.tar.gz: 9203ee6326411236cf93485beb289862fd3ec060
5
5
  SHA512:
6
- metadata.gz: 96cc284a37e9107fbb5eb86ca6baae8fa97cf23cef4db5dea91b78331d5ee145d03d2d27c8da555eb231ecb6b12595630bf9c10884b768f0c6a3a778db4818c2
7
- data.tar.gz: e99b4c5f0d0f49b99e852e7439515b361c7d566d2bc8a1991d0f96d7fae3aeacd9c5883e180f57e12ad5ac6f6533c8827b56e11f59817502715a00e5debc4d0d
6
+ metadata.gz: 6d5169f5bc32a55a05e0ed1ffbe5e236e79f65714a7f7ae177516517c0dbd3d6f06082dfb5393e3188294db94b9fb958fe9bda6459ef1bfc3da77e13a8fc4c2f
7
+ data.tar.gz: 6d86b6cc756b977d07a991794b91665b82b0e426ff5d0321a1f4dcad0bfdbdfb1ea4bbdce65adf62015675c07d54e1ae25c7736c192da863f9ed7131c4b2e56d
@@ -64,21 +64,34 @@ class LHS::Errors
64
64
 
65
65
  private
66
66
 
67
- def messages_from_response(response)
67
+ def add_error(messages, key, value)
68
+ messages[key] ||= []
69
+ messages[key].push(value)
70
+ end
71
+
72
+ def parse_messages(json)
68
73
  messages = {}
69
- return messages if !response.body.is_a?(String) || response.body.length.zero?
70
- json = JSON.parse(response.body)
71
- return messages unless json['fields']
72
- json['fields'].each do |field|
73
- name = field['name'].to_sym
74
- messages[name] ||= []
75
- field['details'].each do |detail|
76
- messages[name].push(detail['code'])
74
+ if json['fields']
75
+ json['fields'].each do |field|
76
+ field['details'].each do |detail|
77
+ add_error(messages, field['name'].to_sym, detail['code'])
78
+ end
79
+ end
80
+ end
81
+ if json['field_errors']
82
+ json['field_errors'].each do |field_error|
83
+ add_error(messages, field_error['path'].join('.').to_sym, field_error['code'])
77
84
  end
78
85
  end
79
86
  messages
80
87
  end
81
88
 
89
+ def messages_from_response(response)
90
+ return {} if !response.body.is_a?(String) || response.body.length.zero?
91
+ json = JSON.parse(response.body)
92
+ parse_messages(json)
93
+ end
94
+
82
95
  def message_from_response(response)
83
96
  json = JSON.parse(response.body)
84
97
  json['message']
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "1.2.3"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -14,14 +14,14 @@ describe LHS::Item do
14
14
  end
15
15
  end
16
16
 
17
- let(:save_error) do
17
+ let(:error_format_fields) do
18
18
  {
19
19
  "status" => 400,
20
20
  "message" => "ratings must be set when review or name or review_title is set | The property value is required; it cannot be null, empty, or blank.",
21
21
  "fields" => [
22
22
  {
23
23
  "name" => "ratings",
24
- "details" => [{ "code" => "REQUIRED_PROPERTY_VALUE" }]
24
+ "details" => [{ "code" => "REQUIRED_PROPERTY_VALUE" }, { "code" => "UNSUPPORTED_PROPERTY_VALUE" }]
25
25
  },{
26
26
  "name" => "recommended",
27
27
  "details" => [{"code" => "REQUIRED_PROPERTY_VALUE"}]
@@ -30,9 +30,29 @@ describe LHS::Item do
30
30
  }
31
31
  end
32
32
 
33
- it 'provides errors when creation failed' do
33
+ let(:error_format_field_errors) do
34
+ {
35
+ "status" => 400,
36
+ "message" => "Some data in the request body failed validation. Inspect the field errors for details.",
37
+ "field_errors" => [ {
38
+ "code" => "UNSUPPORTED_PROPERTY_VALUE",
39
+ "path" => [ "gender" ],
40
+ "message" => "The property value is unsupported. Supported values are: FEMALE, MALE"
41
+ }, {
42
+ "code" => "INCOMPLETE_PROPERTY_VALUE",
43
+ "path" => [ "gender" ],
44
+ "message" => "The property value is incomplete. It misses some data"
45
+ }, {
46
+ "code" => "INCOMPLETE_PROPERTY_VALUE",
47
+ "path" => [ "contract", "entry_id" ],
48
+ "message" => "The property value is incomplete. It misses some data"
49
+ } ]
50
+ }
51
+ end
52
+
53
+ it 'parses fields correctly when creation failed' do
34
54
  stub_request(:post, "#{datastore}/feedbacks")
35
- .to_return(status: 400, body: save_error.to_json)
55
+ .to_return(status: 400, body: error_format_fields.to_json)
36
56
  record = SomeService.build
37
57
  record.name = 'Steve'
38
58
  result = record.save
@@ -41,8 +61,22 @@ describe LHS::Item do
41
61
  expect(record.name).to eq 'Steve'
42
62
  expect(record.errors.include?(:ratings)).to eq true
43
63
  expect(record.errors.include?(:recommended)).to eq true
44
- expect(record.errors[:ratings]).to eq ['REQUIRED_PROPERTY_VALUE']
64
+ expect(record.errors[:ratings]).to eq ['REQUIRED_PROPERTY_VALUE', 'UNSUPPORTED_PROPERTY_VALUE']
45
65
  expect(record.errors[:recommended]).to eq ['REQUIRED_PROPERTY_VALUE']
46
66
  end
67
+
68
+ it 'parses field errors correctly when creation failed' do
69
+ stub_request(:post, "#{datastore}/feedbacks")
70
+ .to_return(status: 400, body: error_format_field_errors.to_json)
71
+ record = SomeService.build
72
+ record.name = 'Steve'
73
+ result = record.save
74
+ expect(result).to eq false
75
+ expect(record.errors).to be
76
+ expect(record.errors.include?(:gender)).to eq true
77
+ expect(record.errors.include?(:"contract.entry_id")).to eq true
78
+ expect(record.errors[:gender]).to eq ['UNSUPPORTED_PROPERTY_VALUE', 'INCOMPLETE_PROPERTY_VALUE']
79
+ expect(record.errors[:"contract.entry_id"]).to eq ['INCOMPLETE_PROPERTY_VALUE']
80
+ end
47
81
  end
48
82
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - local.ch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-26 00:00:00.000000000 Z
11
+ date: 2015-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc