lhs 6.8.1 → 6.8.2

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: a903adf673e0a9c79c2e060986a78bbfd50ff519
4
- data.tar.gz: 2be897ab11167c15ab24413e0a3121d3152ddf51
3
+ metadata.gz: f5393d4f50916acb89d04bb7aa7e5576c44d3663
4
+ data.tar.gz: ff323966be871eda309fef270baf401bb66c8b59
5
5
  SHA512:
6
- metadata.gz: 6155cbf30df50413a5339643d4bfda0126ea7e7c87ae20a21fa7dfc7cd9793448b971c139625d0ec508baa15bee59f318acf8d1c467b64d32479482fa333eddd
7
- data.tar.gz: bc9c6bebdab8cbf5c915474e3837b7b6c649b25fc46e5eec1706a515a457e1b4ff28147b814ac1073a59d47f5e475f451d4543588d99f5c0fd87e05dcff683cf
6
+ metadata.gz: 80e80735fb752b92f5f4e3f3545148283a396a322e24f583ce3e1504d106b40b9b89c8b4dfccdac4c6ef3045df6e700a41342827005d3e6659009bb96467e12f
7
+ data.tar.gz: ff0c3bec571ca7772222b66cee22d652be6927a1c62083959487cb94be1a989024b8296919fd1ef859b96c82625c2a6175f85e97f37bfe3d46c084ea5c7a5f8b
@@ -8,7 +8,8 @@ class LHS::Errors
8
8
  @messages = messages_from_response(response)
9
9
  @message = message_from_response(response)
10
10
  @raw = response.body if response
11
- rescue JSON::ParserError # rubocop:disable Lint/HandleExceptions
11
+ rescue JSON::ParserError
12
+ add_error(messages, 'body', 'parse error')
12
13
  end
13
14
 
14
15
  def include?(attribute)
@@ -65,25 +66,41 @@ class LHS::Errors
65
66
  private
66
67
 
67
68
  def add_error(messages, key, value)
69
+ key = key.to_sym
68
70
  messages[key] ||= []
69
71
  messages[key].push(value)
70
72
  end
71
73
 
72
74
  def parse_messages(json)
73
75
  messages = {}
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
76
+ fields_to_errors(json, messages) if json['fields']
77
+ field_errors_to_errors(json, messages) if json['field_errors']
78
+ fallback_errors(json, messages) if messages.empty?
79
+ messages
80
+ end
81
+
82
+ def fallback_errors(json, messages)
83
+ if json.present?
84
+ json.each do |key, value|
85
+ add_error(messages, key, value)
79
86
  end
87
+ else
88
+ add_error(messages, 'unknown', 'error')
80
89
  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'])
90
+ end
91
+
92
+ def field_errors_to_errors(json, messages)
93
+ json['field_errors'].each do |field_error|
94
+ add_error(messages, field_error['path'].join('.').to_sym, field_error['code'])
95
+ end
96
+ end
97
+
98
+ def fields_to_errors(json, messages)
99
+ json['fields'].each do |field|
100
+ field['details'].each do |detail|
101
+ add_error(messages, field['name'].to_sym, detail['code'])
84
102
  end
85
103
  end
86
- messages
87
104
  end
88
105
 
89
106
  def messages_from_response(response = nil)
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "6.8.1"
2
+ VERSION = "6.8.2"
3
3
  end
@@ -39,6 +39,13 @@ describe LHS::Item do
39
39
  }
40
40
  end
41
41
 
42
+ let(:not_defined_error_format) do
43
+ {
44
+ 'error' => 'missing_token',
45
+ 'error_description' => 'Bearer token is missing'
46
+ }
47
+ end
48
+
42
49
  before(:each) do
43
50
  LHC.config.placeholder(:datastore, datastore)
44
51
  class Record < LHS::Record
@@ -56,6 +63,7 @@ describe LHS::Item do
56
63
  result = record.save
57
64
  expect(result).to eq false
58
65
  expect(record.errors).to be
66
+ expect(record.errors.any?).to eq true
59
67
  expect(record.name).to eq 'Steve'
60
68
  expect(record.errors.include?(:ratings)).to eq true
61
69
  expect(record.errors.include?(:recommended)).to eq true
@@ -71,6 +79,7 @@ describe LHS::Item do
71
79
  result = record.save
72
80
  expect(result).to eq false
73
81
  expect(record.errors).to be
82
+ expect(record.errors.any?).to eq true
74
83
  expect(record.errors.include?(:gender)).to eq true
75
84
  expect(record.errors.include?(:"contract.entry_id")).to eq true
76
85
  expect(record.errors[:gender]).to eq ['UNSUPPORTED_PROPERTY_VALUE', 'INCOMPLETE_PROPERTY_VALUE']
@@ -85,10 +94,39 @@ describe LHS::Item do
85
94
  record = Record.build
86
95
  record.save
87
96
  expect(record.errors.raw).to be
97
+ expect(record.errors.any?).to eq true
88
98
  json = JSON.parse(record.errors.raw)
89
99
  expect(json['status']).to be
90
100
  expect(json['message']).to be
91
101
  expect(json['field_errors']).to be
92
102
  end
93
103
  end
104
+
105
+ context 'request fails with unformated error message' do
106
+ it 'still tells us that there is an error' do
107
+ stub_request(:post, "#{datastore}/feedbacks")
108
+ .to_return(status: 400, body: not_defined_error_format.to_json)
109
+ record = Record.build
110
+ record.name = 'Steve'
111
+ result = record.save
112
+ expect(result).to eq false
113
+ expect(record.errors).to be
114
+ expect(record.errors.any?).to eq true
115
+ expect(record.errors['error']).to eq ['missing_token']
116
+ expect(record.errors['error_description']).to eq ['Bearer token is missing']
117
+ end
118
+ end
119
+
120
+ context 'empty error response body' do
121
+ it 'still tells us that there is an error' do
122
+ stub_request(:post, "#{datastore}/feedbacks").to_return(status: 400)
123
+ record = Record.build
124
+ record.name = 'Steve'
125
+ result = record.save
126
+ expect(result).to eq false
127
+ expect(record.errors).to be
128
+ expect(record.errors.any?).to eq true
129
+ expect(record.errors['body']).to eq ['parse error']
130
+ end
131
+ end
94
132
  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: 6.8.1
4
+ version: 6.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/local-ch/lhs/graphs/contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-09 00:00:00.000000000 Z
11
+ date: 2016-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc