lhs 16.1.3 → 16.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 270b2595ca6b508ac80989ba29b598e538b5bed03e2908a815ffb4fc30f3ff00
4
- data.tar.gz: 45ed03b869ec52ff26ec336be5812984cd0707ad0d16d56d77192a9e792fba28
3
+ metadata.gz: e4d0c9693012ec5fe38601976c89443114654f6a59de9a875c5a713ae2e01b0c
4
+ data.tar.gz: c23ed566bdfc10840fc0dfd7e0be0b8475a558669424f44e081da7ed3c38fbc6
5
5
  SHA512:
6
- metadata.gz: f0124060a7c1cf3b67f0bd96eedc8acd5e0098cf4d32474da9affc86c374f8c2a0b6a61b8e3d217a9da066ccd9c4f2fd52edce10d27309f43341c8d86272c526
7
- data.tar.gz: 41247150b9e353a654235e509c32a1e8ae763f4e101754c9cb0fc37aeffa4b030a7541d769d384c96a2293238f2d57be0d47915baaf68781d2e9d200d1420498
6
+ metadata.gz: d67775a51aac4da7cd8024932b7f03b521277f6128bab375673ff464bbd300a294d06c9fc6ef8b6f599f519f2aab92552aefa4bf58497ef22462df3778800d09
7
+ data.tar.gz: b4f7cc36403f8fcfbdb93864f231a40949b74946e1a26a0632fba8d1ccce3a25265093d81ea2ba02840b5ac87d9f15e12376921232ddd2c44d9b33bc28744d8a
@@ -5,9 +5,12 @@ class LHS::Data
5
5
  module Becomes
6
6
  extend ActiveSupport::Concern
7
7
 
8
- def becomes(klass)
8
+ def becomes(klass, options = {})
9
9
  return self if self.class == klass && !is_a?(LHS::Data)
10
- klass.new(LHS::Data.new(_raw, _parent, klass))
10
+ data = LHS::Data.new(_raw, _parent, klass)
11
+ data.errors = options[:errors] if options[:errors]
12
+ data.warnings = options[:warnings] if options[:warnings]
13
+ klass.new(data)
11
14
  end
12
15
  end
13
16
  end
@@ -79,9 +79,11 @@ class LHS::Proxy
79
79
  data.warnings = LHS::Problems::Nested::Warnings.new(warnings, name) if warnings.any?
80
80
  if _record && _record._relations[name]
81
81
  klass = _record._relations[name][:record_class_name].constantize
82
- return cache.compute_if_absent(klass) { data.becomes(klass) }
82
+ return cache.compute_if_absent(klass) do
83
+ data.becomes(klass, errors: data.errors, warnings: data.warnings)
84
+ end
83
85
  elsif record && !value.is_a?(LHS::Record)
84
- return data.becomes(record)
86
+ return data.becomes(record, errors: data.errors, warnings: data.warnings)
85
87
  end
86
88
  data
87
89
  end
data/lib/lhs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = '16.1.3'
2
+ VERSION = '16.1.4'
3
3
  end
@@ -273,4 +273,50 @@ describe LHS::Item do
273
273
  end
274
274
  end
275
275
  end
276
+
277
+ context 'forwards errors to nested data when associations are defined' do
278
+ before do
279
+ class AppointmentProposal < LHS::Record
280
+ endpoint 'http://dataste/appointment_proposals'
281
+ endpoint 'http://dataste/appointment_proposals/{id}'
282
+
283
+ has_many :appointments
284
+ end
285
+
286
+ class Appointment < LHS::Record
287
+ end
288
+
289
+ stub_request(:get, 'http://dataste/appointment_proposals/1')
290
+ .to_return(body: {
291
+ appointments: [
292
+ { 'date_time' => '13.12.2018' },
293
+ { 'date_time' => '18.10.2028' }
294
+ ]
295
+ }.to_json)
296
+
297
+ stub_request(:post, 'http://dataste/appointment_proposals')
298
+ .to_return(
299
+ status: 400,
300
+ body: {
301
+ field_errors: [{
302
+ 'code' => 'DATE_PROPERTY_NOT_IN_FUTURE',
303
+ 'path' => ['appointments', 0, 'date_time']
304
+ }]
305
+ }.to_json
306
+ )
307
+ end
308
+
309
+ it 'translates errors automatically when they are around' do
310
+ appointment_proposal = AppointmentProposal.find(1)
311
+ appointment_proposal.update(
312
+ 'appointments_attributes' => {
313
+ '0' => { 'date_time' => '13.12.2018' },
314
+ '1' => { 'date_time' => '18.10.2028' }
315
+ }
316
+ )
317
+ appointment_proposal.appointments
318
+ appointment = appointment_proposal.appointments[0]
319
+ expect(appointment.errors[:date_time]).to eq ['DATE_PROPERTY_NOT_IN_FUTURE']
320
+ end
321
+ end
276
322
  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: 16.1.3
4
+ version: 16.1.4
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: 2019-01-04 00:00:00.000000000 Z
11
+ date: 2019-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel