From 321b39ed51bf0c3411c58552ffc9bced19e9bede Mon Sep 17 00:00:00 2001 From: Yegeun Date: Thu, 19 Mar 2026 13:45:13 +0000 Subject: [PATCH 1/4] add: artefacts now exclude nil to make the pay load smaller --- .ruby-version | 2 +- lib/dvla/atlas/artefacts.rb | 13 +++++++++++++ spec/dvla/atlas/artefacts_spec.rb | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index acf9bf0..1454f6e 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.2.2 \ No newline at end of file +4.0.1 diff --git a/lib/dvla/atlas/artefacts.rb b/lib/dvla/atlas/artefacts.rb index 4721b04..94f08c1 100644 --- a/lib/dvla/atlas/artefacts.rb +++ b/lib/dvla/atlas/artefacts.rb @@ -19,6 +19,19 @@ def define_fields(*vargs, **kwargs) end end + sig { returns(T::Hash[String, T.untyped]) } + def to_hash + instance_variables.each_with_object({}) do |var, hash| + name = var.to_s.delete_prefix('@') + next if name.end_with?('_history') + + value = send(:"#{name}") + next if value.nil? + + hash[name] = value + end + end + private sig { params(name: T.any(String, Symbol)).void } diff --git a/spec/dvla/atlas/artefacts_spec.rb b/spec/dvla/atlas/artefacts_spec.rb index e2f9d6c..8bf6516 100644 --- a/spec/dvla/atlas/artefacts_spec.rb +++ b/spec/dvla/atlas/artefacts_spec.rb @@ -121,4 +121,11 @@ expect(artefacts.first_expected_method_history).to eq(%w[abc]) expect(artefacts.second_expected_method_history).to eq([123]) end + + describe '#to_hash' do + it 'excludes fields that are nil' do + artefacts.define_fields('unset_field', set_field: 'value') + expect(artefacts.to_hash).to eq({ 'set_field' => 'value' }) + end + end end From f8643574ba2c8a10c18ac08fcd8ea6b0a32454ee Mon Sep 17 00:00:00 2001 From: Yegeun Date: Thu, 19 Mar 2026 13:57:08 +0000 Subject: [PATCH 2/4] ref: to_hash to as_json as it will override active support --- lib/dvla/atlas/artefacts.rb | 4 ++-- spec/dvla/atlas/artefacts_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/dvla/atlas/artefacts.rb b/lib/dvla/atlas/artefacts.rb index 94f08c1..a88c468 100644 --- a/lib/dvla/atlas/artefacts.rb +++ b/lib/dvla/atlas/artefacts.rb @@ -19,8 +19,8 @@ def define_fields(*vargs, **kwargs) end end - sig { returns(T::Hash[String, T.untyped]) } - def to_hash + sig { params(_options: T.untyped).returns(T::Hash[String, T.untyped]) } + def as_json(_options = nil) instance_variables.each_with_object({}) do |var, hash| name = var.to_s.delete_prefix('@') next if name.end_with?('_history') diff --git a/spec/dvla/atlas/artefacts_spec.rb b/spec/dvla/atlas/artefacts_spec.rb index 8bf6516..2f514bb 100644 --- a/spec/dvla/atlas/artefacts_spec.rb +++ b/spec/dvla/atlas/artefacts_spec.rb @@ -122,10 +122,10 @@ expect(artefacts.second_expected_method_history).to eq([123]) end - describe '#to_hash' do + describe '#as_json' do it 'excludes fields that are nil' do artefacts.define_fields('unset_field', set_field: 'value') - expect(artefacts.to_hash).to eq({ 'set_field' => 'value' }) + expect(artefacts.as_json).to eq({ 'set_field' => 'value' }) end end end From f62ecfd589412637061cb9b7c2cfe795a1c7baf0 Mon Sep 17 00:00:00 2001 From: Yegeun Date: Thu, 19 Mar 2026 14:21:30 +0000 Subject: [PATCH 3/4] feat: filter history fields --- lib/dvla/atlas/artefacts.rb | 4 ++-- spec/dvla/atlas/artefacts_spec.rb | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/dvla/atlas/artefacts.rb b/lib/dvla/atlas/artefacts.rb index a88c468..81422d8 100644 --- a/lib/dvla/atlas/artefacts.rb +++ b/lib/dvla/atlas/artefacts.rb @@ -23,10 +23,10 @@ def define_fields(*vargs, **kwargs) def as_json(_options = nil) instance_variables.each_with_object({}) do |var, hash| name = var.to_s.delete_prefix('@') - next if name.end_with?('_history') - value = send(:"#{name}") + next if value.nil? + next if name.end_with?('_history') && value.empty? hash[name] = value end diff --git a/spec/dvla/atlas/artefacts_spec.rb b/spec/dvla/atlas/artefacts_spec.rb index 2f514bb..9aa5c03 100644 --- a/spec/dvla/atlas/artefacts_spec.rb +++ b/spec/dvla/atlas/artefacts_spec.rb @@ -127,5 +127,19 @@ artefacts.define_fields('unset_field', set_field: 'value') expect(artefacts.as_json).to eq({ 'set_field' => 'value' }) end + + it 'excludes history fields for fields that have never been changed' do + artefacts.define_fields(username: 'initial') + json = artefacts.as_json + expect(json).to eq({ 'username' => 'initial' }) + expect(json).not_to have_key('username_history') + end + + it 'includes history fields for fields that have been changed' do + artefacts.define_fields(username: 'initial') + artefacts.username = 'updated' + json = artefacts.as_json + expect(json).to eq({ 'username' => 'updated', 'username_history' => ['initial'] }) + end end end From d9de7b9875694eefdbaa9dd35b8ae5fa063183b1 Mon Sep 17 00:00:00 2001 From: Yegeun Date: Fri, 20 Mar 2026 09:33:46 +0000 Subject: [PATCH 4/4] update version --- lib/dvla/atlas/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dvla/atlas/version.rb b/lib/dvla/atlas/version.rb index 2de81ab..b1b314a 100644 --- a/lib/dvla/atlas/version.rb +++ b/lib/dvla/atlas/version.rb @@ -1,5 +1,5 @@ module DVLA module Atlas - VERSION = '1.1.0'.freeze + VERSION = '1.1.1'.freeze end end