From d7ea979868d9b5cf2bde792e08c142467030cf97 Mon Sep 17 00:00:00 2001 From: Nathan Lucas Date: Mon, 8 Dec 2025 22:09:42 -0500 Subject: [PATCH] CASTKIT-4: Fix DataObject attribute inheritance --- .rspec_status | 233 ++++++++++++++++--------------- lib/castkit/core/attributes.rb | 7 + spec/castkit/data_object_spec.rb | 18 +++ 3 files changed, 142 insertions(+), 116 deletions(-) diff --git a/.rspec_status b/.rspec_status index f5ab6d0..311674a 100644 --- a/.rspec_status +++ b/.rspec_status @@ -1,204 +1,205 @@ example_id | status | run_time | ------------------------------------------------------------- | ------ | --------------- | -./spec/castkit/attribute_spec.rb[1:1:1] | passed | 0.0005 seconds | +./spec/castkit/attribute_spec.rb[1:1:1] | passed | 0.00062 seconds | ./spec/castkit/attribute_spec.rb[1:1:2] | passed | 0.00005 seconds | ./spec/castkit/attribute_spec.rb[1:1:3] | passed | 0.00004 seconds | -./spec/castkit/attribute_spec.rb[1:1:4] | passed | 0.00003 seconds | -./spec/castkit/attribute_spec.rb[1:2:1] | passed | 0.00107 seconds | +./spec/castkit/attribute_spec.rb[1:1:4] | passed | 0.00004 seconds | +./spec/castkit/attribute_spec.rb[1:2:1] | passed | 0.00133 seconds | ./spec/castkit/attribute_spec.rb[1:3:1] | passed | 0.00005 seconds | -./spec/castkit/attribute_spec.rb[1:3:2] | passed | 0.00004 seconds | +./spec/castkit/attribute_spec.rb[1:3:2] | passed | 0.00005 seconds | ./spec/castkit/attribute_spec.rb[1:3:3] | passed | 0.00003 seconds | -./spec/castkit/attribute_spec.rb[1:3:4] | passed | 0.00078 seconds | -./spec/castkit/contract/validator_spec.rb[1:1:1:1] | passed | 0.0001 seconds | -./spec/castkit/contract/validator_spec.rb[1:1:2:1] | passed | 0.00058 seconds | -./spec/castkit/contract/validator_spec.rb[1:1:3:1] | passed | 0.00008 seconds | -./spec/castkit/contract/validator_spec.rb[1:1:4:1] | passed | 0.00011 seconds | -./spec/castkit/contract/validator_spec.rb[1:1:5:1] | passed | 0.00008 seconds | -./spec/castkit/contract_spec.rb[1:1:1] | passed | 0.00048 seconds | -./spec/castkit/contract_spec.rb[1:1:2] | passed | 0.001 seconds | -./spec/castkit/contract_spec.rb[1:1:3] | passed | 0.00012 seconds | -./spec/castkit/contract_spec.rb[1:1:4] | passed | 0.00006 seconds | -./spec/castkit/contract_spec.rb[1:1:5] | passed | 0.00008 seconds | +./spec/castkit/attribute_spec.rb[1:3:4] | passed | 0.00074 seconds | +./spec/castkit/contract/validator_spec.rb[1:1:1:1] | passed | 0.00009 seconds | +./spec/castkit/contract/validator_spec.rb[1:1:2:1] | passed | 0.0006 seconds | +./spec/castkit/contract/validator_spec.rb[1:1:3:1] | passed | 0.00011 seconds | +./spec/castkit/contract/validator_spec.rb[1:1:4:1] | passed | 0.00013 seconds | +./spec/castkit/contract/validator_spec.rb[1:1:5:1] | passed | 0.00009 seconds | +./spec/castkit/contract_spec.rb[1:1:1] | passed | 0.00046 seconds | +./spec/castkit/contract_spec.rb[1:1:2] | passed | 0.00099 seconds | +./spec/castkit/contract_spec.rb[1:1:3] | passed | 0.0001 seconds | +./spec/castkit/contract_spec.rb[1:1:4] | passed | 0.00007 seconds | +./spec/castkit/contract_spec.rb[1:1:5] | passed | 0.00006 seconds | ./spec/castkit/contract_spec.rb[1:1:6] | passed | 0.00006 seconds | -./spec/castkit/core/attribute_types_spec.rb[1:1:1] | passed | 0.00005 seconds | -./spec/castkit/core/attribute_types_spec.rb[1:1:2] | passed | 0.00004 seconds | -./spec/castkit/core/attribute_types_spec.rb[1:1:3] | passed | 0.00003 seconds | +./spec/castkit/core/attribute_types_spec.rb[1:1:1] | passed | 0.00004 seconds | +./spec/castkit/core/attribute_types_spec.rb[1:1:2] | passed | 0.00003 seconds | +./spec/castkit/core/attribute_types_spec.rb[1:1:3] | passed | 0.00004 seconds | ./spec/castkit/core/attribute_types_spec.rb[1:1:4] | passed | 0.00003 seconds | ./spec/castkit/core/attribute_types_spec.rb[1:1:5] | passed | 0.00004 seconds | -./spec/castkit/core/attribute_types_spec.rb[1:1:6] | passed | 0.00003 seconds | +./spec/castkit/core/attribute_types_spec.rb[1:1:6] | passed | 0.00004 seconds | ./spec/castkit/core/attribute_types_spec.rb[1:1:7] | passed | 0.00003 seconds | -./spec/castkit/core/attribute_types_spec.rb[1:1:8] | passed | 0.00004 seconds | +./spec/castkit/core/attribute_types_spec.rb[1:1:8] | passed | 0.00003 seconds | ./spec/castkit/core/attribute_types_spec.rb[1:1:9] | passed | 0.00004 seconds | -./spec/castkit/core/attribute_types_spec.rb[1:1:10] | passed | 0.00005 seconds | +./spec/castkit/core/attribute_types_spec.rb[1:1:10] | passed | 0.00004 seconds | ./spec/castkit/core/attribute_types_spec.rb[1:1:11] | passed | 0.00004 seconds | -./spec/castkit/core/attribute_types_spec.rb[1:1:12] | passed | 0.00003 seconds | +./spec/castkit/core/attribute_types_spec.rb[1:1:12] | passed | 0.00004 seconds | ./spec/castkit/core/attributes_spec.rb[1:1:1] | passed | 0.00006 seconds | -./spec/castkit/core/attributes_spec.rb[1:1:2] | passed | 0.00006 seconds | +./spec/castkit/core/attributes_spec.rb[1:1:2] | passed | 0.00005 seconds | ./spec/castkit/core/attributes_spec.rb[1:1:3] | passed | 0.00006 seconds | -./spec/castkit/core/attributes_spec.rb[1:2:1] | passed | 0.00006 seconds | +./spec/castkit/core/attributes_spec.rb[1:2:1] | passed | 0.00004 seconds | ./spec/castkit/core/attributes_spec.rb[1:3:1] | passed | 0.00006 seconds | -./spec/castkit/core/attributes_spec.rb[1:4:1] | passed | 0.0007 seconds | -./spec/castkit/core/attributes_spec.rb[1:5:1] | passed | 0.00008 seconds | -./spec/castkit/core/attributes_spec.rb[1:6:1] | passed | 0.0004 seconds | +./spec/castkit/core/attributes_spec.rb[1:4:1] | passed | 0.0006 seconds | +./spec/castkit/core/attributes_spec.rb[1:5:1] | passed | 0.00007 seconds | +./spec/castkit/core/attributes_spec.rb[1:6:1] | passed | 0.00032 seconds | ./spec/castkit/core/attributes_spec.rb[1:7:1] | passed | 0.00006 seconds | ./spec/castkit/core/config_spec.rb[1:1:1] | passed | 0.00004 seconds | ./spec/castkit/core/config_spec.rb[1:1:2] | passed | 0.00003 seconds | ./spec/castkit/core/config_spec.rb[1:2:1] | passed | 0.00003 seconds | ./spec/castkit/core/config_spec.rb[1:3:1] | passed | 0.00004 seconds | -./spec/castkit/core/config_spec.rb[1:3:2] | passed | 0.00004 seconds | +./spec/castkit/core/config_spec.rb[1:3:2] | passed | 0.00003 seconds | ./spec/castkit/core/config_spec.rb[1:4:1] | passed | 0.00003 seconds | ./spec/castkit/core/config_spec.rb[1:4:2] | passed | 0.00003 seconds | -./spec/castkit/core/config_spec.rb[1:5:1] | passed | 0.00004 seconds | +./spec/castkit/core/config_spec.rb[1:5:1] | passed | 0.00005 seconds | ./spec/castkit/core/config_spec.rb[1:5:2] | passed | 0.00003 seconds | -./spec/castkit/data_object_spec.rb[1:1:1] | passed | 0.00532 seconds | -./spec/castkit/data_object_spec.rb[1:1:2] | passed | 0.00028 seconds | -./spec/castkit/data_object_spec.rb[1:2:1] | passed | 0.00016 seconds | +./spec/castkit/data_object_spec.rb[1:1:1] | passed | 0.00494 seconds | +./spec/castkit/data_object_spec.rb[1:1:2] | passed | 0.00023 seconds | +./spec/castkit/data_object_spec.rb[1:2:1] | passed | 0.00015 seconds | ./spec/castkit/data_object_spec.rb[1:2:2] | passed | 0.00012 seconds | -./spec/castkit/data_object_spec.rb[1:2:3] | passed | 0.00009 seconds | +./spec/castkit/data_object_spec.rb[1:2:3] | passed | 0.0001 seconds | ./spec/castkit/data_object_spec.rb[1:3:1] | passed | 0.00009 seconds | -./spec/castkit/data_object_spec.rb[1:3:2] | passed | 0.00011 seconds | +./spec/castkit/data_object_spec.rb[1:3:2] | passed | 0.0001 seconds | ./spec/castkit/data_object_spec.rb[1:4:1] | passed | 0.00016 seconds | ./spec/castkit/data_object_spec.rb[1:5:1] | passed | 0.00012 seconds | -./spec/castkit/data_object_spec.rb[1:5:2] | passed | 0.00011 seconds | -./spec/castkit/data_object_spec.rb[1:5:3] | passed | 0.00011 seconds | -./spec/castkit/data_object_spec.rb[1:5:4] | passed | 0.0001 seconds | -./spec/castkit/data_object_spec.rb[1:5:5] | passed | 0.00076 seconds | -./spec/castkit/data_object_spec.rb[1:5:6] | passed | 0.00024 seconds | -./spec/castkit/data_object_spec.rb[1:5:7] | passed | 0.00016 seconds | -./spec/castkit/data_object_spec.rb[1:6:1] | passed | 0.00013 seconds | +./spec/castkit/data_object_spec.rb[1:5:2] | passed | 0.00012 seconds | +./spec/castkit/data_object_spec.rb[1:5:3] | passed | 0.00012 seconds | +./spec/castkit/data_object_spec.rb[1:5:4] | passed | 0.00011 seconds | +./spec/castkit/data_object_spec.rb[1:5:5] | passed | 0.00073 seconds | +./spec/castkit/data_object_spec.rb[1:5:6] | passed | 0.0002 seconds | +./spec/castkit/data_object_spec.rb[1:5:7] | passed | 0.00014 seconds | +./spec/castkit/data_object_spec.rb[1:5:8] | passed | 0.00012 seconds | +./spec/castkit/data_object_spec.rb[1:6:1] | passed | 0.00011 seconds | ./spec/castkit/data_object_spec.rb[1:7:1] | passed | 0.00013 seconds | -./spec/castkit/data_object_spec.rb[1:8:1] | passed | 0.00015 seconds | +./spec/castkit/data_object_spec.rb[1:8:1] | passed | 0.00014 seconds | ./spec/castkit/data_object_spec.rb[1:8:2] | passed | 0.00014 seconds | -./spec/castkit/data_object_spec.rb[1:9:1] | passed | 0.00014 seconds | -./spec/castkit/default_serializer_spec.rb[1:1:1] | passed | 0.00017 seconds | -./spec/castkit/default_serializer_spec.rb[1:2:1] | passed | 0.00022 seconds | -./spec/castkit/default_serializer_spec.rb[1:2:2] | passed | 0.00012 seconds | -./spec/castkit/default_serializer_spec.rb[1:2:3] | passed | 0.00043 seconds | -./spec/castkit/default_serializer_spec.rb[1:3:1] | passed | 0.00018 seconds | -./spec/castkit/default_serializer_spec.rb[1:3:2] | passed | 0.00022 seconds | -./spec/castkit/default_serializer_spec.rb[1:3:3] | passed | 0.00022 seconds | +./spec/castkit/data_object_spec.rb[1:9:1] | passed | 0.00013 seconds | +./spec/castkit/default_serializer_spec.rb[1:1:1] | passed | 0.00016 seconds | +./spec/castkit/default_serializer_spec.rb[1:2:1] | passed | 0.0002 seconds | +./spec/castkit/default_serializer_spec.rb[1:2:2] | passed | 0.00011 seconds | +./spec/castkit/default_serializer_spec.rb[1:2:3] | passed | 0.00022 seconds | +./spec/castkit/default_serializer_spec.rb[1:3:1] | passed | 0.00013 seconds | +./spec/castkit/default_serializer_spec.rb[1:3:2] | passed | 0.0002 seconds | +./spec/castkit/default_serializer_spec.rb[1:3:3] | passed | 0.0002 seconds | ./spec/castkit/default_serializer_spec.rb[1:3:4] | passed | 0.00016 seconds | ./spec/castkit/default_serializer_spec.rb[1:4:1] | passed | 0.00011 seconds | ./spec/castkit/default_serializer_spec.rb[1:5:1] | passed | 0.0001 seconds | -./spec/castkit/default_serializer_spec.rb[1:5:2] | passed | 0.00009 seconds | +./spec/castkit/default_serializer_spec.rb[1:5:2] | passed | 0.00008 seconds | ./spec/castkit/default_serializer_spec.rb[1:5:3] | passed | 0.00009 seconds | -./spec/castkit/definition_spec.rb[1:1:1] | passed | 0.00005 seconds | -./spec/castkit/definition_spec.rb[1:2:1] | passed | 0.00017 seconds | -./spec/castkit/definition_spec.rb[1:3:1] | passed | 0.00008 seconds | -./spec/castkit/definition_spec.rb[1:3:2] | passed | 0.00008 seconds | -./spec/castkit/definition_spec.rb[1:4:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:1:1] | passed | 0.00005 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:1:2:1] | passed | 0.00005 seconds | +./spec/castkit/definition_spec.rb[1:1:1] | passed | 0.00004 seconds | +./spec/castkit/definition_spec.rb[1:2:1] | passed | 0.00016 seconds | +./spec/castkit/definition_spec.rb[1:3:1] | passed | 0.00007 seconds | +./spec/castkit/definition_spec.rb[1:3:2] | passed | 0.00006 seconds | +./spec/castkit/definition_spec.rb[1:4:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:1:1] | passed | 0.00004 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:1:2:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:1:3:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:1:4:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:2:1:1] | passed | 0.00006 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:2:2:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:2:3:1] | passed | 0.00004 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:2:3:1] | passed | 0.00005 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:3:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:3:2] | passed | 0.00003 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:3:2] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:3:3] | passed | 0.00003 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:3:4] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:3:5] | passed | 0.00003 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:4:1:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:3:5] | passed | 0.00004 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:4:1:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:4:2:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:4:3:1] | passed | 0.00004 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:4:3:1] | passed | 0.00005 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:5:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:5:2] | passed | 0.00003 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:5:2] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:5:3] | passed | 0.00003 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:6:1:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:6:2:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:6:3:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/access_spec.rb[1:7:1:1] | passed | 0.00003 seconds | +./spec/castkit/ext/attribute/access_spec.rb[1:7:1:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/access_spec.rb[1:7:2:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:1:1:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:1:1:1] | passed | 0.00006 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:1:2:1] | passed | 0.00005 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:2:1:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:2:1:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:2:2:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:3:1:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:3:2:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:3:3:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:4:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:3:2:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:3:3:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:4:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:5:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:5:2:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:6:1] | passed | 0.0001 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:5:2:1] | passed | 0.00295 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:6:1] | passed | 0.00005 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:7:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:7:2:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:7:2:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:8:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:8:2:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:8:2:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:9:1:1] | passed | 0.00006 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:9:2:1] | passed | 0.00014 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:9:3:1] | passed | 0.00004 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:9:2:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:9:3:1] | passed | 0.00005 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:10:1:1] | passed | 0.00005 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:10:2:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:11:1:1] | passed | 0.00005 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:11:2:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/options_spec.rb[1:12:1:1] | passed | 0.00011 seconds | +./spec/castkit/ext/attribute/options_spec.rb[1:12:1:1] | passed | 0.00004 seconds | ./spec/castkit/ext/attribute/options_spec.rb[1:12:2:1] | passed | 0.00004 seconds | -./spec/castkit/ext/attribute/validation_spec.rb[1:1:1:1] | passed | 0.00035 seconds | -./spec/castkit/ext/attribute/validation_spec.rb[1:1:2:1:1] | passed | 0.00018 seconds | -./spec/castkit/ext/attribute/validation_spec.rb[1:1:2:2:1] | passed | 0.00033 seconds | -./spec/castkit/ext/attribute/validation_spec.rb[1:1:3:1] | passed | 0.0001 seconds | -./spec/castkit/ext/attribute/validation_spec.rb[1:1:4:1:1] | passed | 0.00012 seconds | -./spec/castkit/ext/attribute/validation_spec.rb[1:1:4:2:1] | passed | 0.00016 seconds | -./spec/castkit/ext/attribute/validation_spec.rb[1:1:5:1:1] | passed | 0.00012 seconds | -./spec/castkit/ext/attribute/validation_spec.rb[1:1:5:2:1] | passed | 0.00015 seconds | -./spec/castkit/ext/data_object/deserialization_spec.rb[1:1:1] | passed | 0.00014 seconds | -./spec/castkit/ext/data_object/deserialization_spec.rb[1:2:1] | passed | 0.00015 seconds | -./spec/castkit/ext/data_object/deserialization_spec.rb[1:2:2] | passed | 0.00009 seconds | -./spec/castkit/ext/data_object/deserialization_spec.rb[1:3:1] | passed | 0.00033 seconds | -./spec/castkit/ext/data_object/deserialization_spec.rb[1:4:1] | passed | 0.00011 seconds | -./spec/castkit/ext/data_object/serialization_spec.rb[1:1:1] | passed | 0.00005 seconds | +./spec/castkit/ext/attribute/validation_spec.rb[1:1:1:1] | passed | 0.00016 seconds | +./spec/castkit/ext/attribute/validation_spec.rb[1:1:2:1:1] | passed | 0.00011 seconds | +./spec/castkit/ext/attribute/validation_spec.rb[1:1:2:2:1] | passed | 0.00026 seconds | +./spec/castkit/ext/attribute/validation_spec.rb[1:1:3:1] | passed | 0.00009 seconds | +./spec/castkit/ext/attribute/validation_spec.rb[1:1:4:1:1] | passed | 0.0001 seconds | +./spec/castkit/ext/attribute/validation_spec.rb[1:1:4:2:1] | passed | 0.0002 seconds | +./spec/castkit/ext/attribute/validation_spec.rb[1:1:5:1:1] | passed | 0.0001 seconds | +./spec/castkit/ext/attribute/validation_spec.rb[1:1:5:2:1] | passed | 0.00014 seconds | +./spec/castkit/ext/data_object/deserialization_spec.rb[1:1:1] | passed | 0.00013 seconds | +./spec/castkit/ext/data_object/deserialization_spec.rb[1:2:1] | passed | 0.00006 seconds | +./spec/castkit/ext/data_object/deserialization_spec.rb[1:2:2] | passed | 0.00006 seconds | +./spec/castkit/ext/data_object/deserialization_spec.rb[1:3:1] | passed | 0.00018 seconds | +./spec/castkit/ext/data_object/deserialization_spec.rb[1:4:1] | passed | 0.00008 seconds | +./spec/castkit/ext/data_object/serialization_spec.rb[1:1:1] | passed | 0.00004 seconds | ./spec/castkit/ext/data_object/serialization_spec.rb[1:1:2] | passed | 0.00004 seconds | -./spec/castkit/ext/data_object/serialization_spec.rb[1:2:1] | passed | 0.00007 seconds | +./spec/castkit/ext/data_object/serialization_spec.rb[1:2:1] | passed | 0.00003 seconds | ./spec/castkit/ext/data_object/serialization_spec.rb[1:2:2] | passed | 0.00004 seconds | ./spec/castkit/ext/data_object/serialization_spec.rb[1:3:1] | passed | 0.00004 seconds | ./spec/castkit/ext/data_object/serialization_spec.rb[1:4:1] | passed | 0.00004 seconds | ./spec/castkit/ext/data_object/serialization_spec.rb[1:4:2] | passed | 0.00004 seconds | -./spec/castkit/plugins_spec.rb[1:1] | passed | 0.00005 seconds | -./spec/castkit/plugins_spec.rb[1:2] | passed | 0.0001 seconds | -./spec/castkit/plugins_spec.rb[1:3] | passed | 0.00006 seconds | -./spec/castkit/types/base_spec.rb[1:1:1] | passed | 0.0001 seconds | +./spec/castkit/plugins_spec.rb[1:1] | passed | 0.00004 seconds | +./spec/castkit/plugins_spec.rb[1:2] | passed | 0.00007 seconds | +./spec/castkit/plugins_spec.rb[1:3] | passed | 0.00005 seconds | +./spec/castkit/types/base_spec.rb[1:1:1] | passed | 0.00007 seconds | ./spec/castkit/types/base_spec.rb[1:1:2] | passed | 0.00005 seconds | -./spec/castkit/validators/boolean_validator_spec.rb[1:1:1] | passed | 0.00003 seconds | +./spec/castkit/validators/boolean_validator_spec.rb[1:1:1] | passed | 0.00004 seconds | ./spec/castkit/validators/boolean_validator_spec.rb[1:1:2] | passed | 0.00003 seconds | ./spec/castkit/validators/boolean_validator_spec.rb[1:1:3] | passed | 0.00003 seconds | ./spec/castkit/validators/boolean_validator_spec.rb[1:1:4] | passed | 0.00004 seconds | -./spec/castkit/validators/boolean_validator_spec.rb[1:2:1] | passed | 0.00009 seconds | +./spec/castkit/validators/boolean_validator_spec.rb[1:2:1] | passed | 0.00003 seconds | ./spec/castkit/validators/numeric_validator_spec.rb[1:1:1:1] | passed | 0.00005 seconds | ./spec/castkit/validators/numeric_validator_spec.rb[1:1:2:1] | passed | 0.00004 seconds | -./spec/castkit/validators/numeric_validator_spec.rb[1:1:3:1] | passed | 0.00004 seconds | -./spec/castkit/validators/numeric_validator_spec.rb[1:1:4:1] | passed | 0.00003 seconds | +./spec/castkit/validators/numeric_validator_spec.rb[1:1:3:1] | passed | 0.00015 seconds | +./spec/castkit/validators/numeric_validator_spec.rb[1:1:4:1] | passed | 0.00007 seconds | ./spec/castkit/validators/string_validator_spec.rb[1:1:1:1:1] | passed | 0.00004 seconds | -./spec/castkit/validators/string_validator_spec.rb[1:1:2:1] | passed | 0.00005 seconds | -./spec/castkit/validators/string_validator_spec.rb[1:1:2:2] | passed | 0.00003 seconds | -./spec/castkit/validators/string_validator_spec.rb[1:1:3:1] | passed | 0.00004 seconds | +./spec/castkit/validators/string_validator_spec.rb[1:1:2:1] | passed | 0.00006 seconds | +./spec/castkit/validators/string_validator_spec.rb[1:1:2:2] | passed | 0.00004 seconds | +./spec/castkit/validators/string_validator_spec.rb[1:1:3:1] | passed | 0.00005 seconds | ./spec/castkit/validators/string_validator_spec.rb[1:1:3:2] | passed | 0.00003 seconds | ./spec/castkit/validators/string_validator_spec.rb[1:1:4:1] | passed | 0.00004 seconds | -./spec/castkit/validators/validator_spec.rb[1:1:1] | passed | 0.00003 seconds | +./spec/castkit/validators/validator_spec.rb[1:1:1] | passed | 0.00004 seconds | ./spec/castkit/validators/validator_spec.rb[1:2:1] | passed | 0.00004 seconds | ./spec/castkit_spec.rb[1:1] | passed | 0.00003 seconds | -./spec/castkit_spec.rb[1:2:1:1] | passed | 0.00014 seconds | +./spec/castkit_spec.rb[1:2:1:1] | passed | 0.00013 seconds | ./spec/castkit_spec.rb[1:2:1:2] | passed | 0.00008 seconds | -./spec/castkit_spec.rb[1:2:1:3] | passed | 0.0001 seconds | +./spec/castkit_spec.rb[1:2:1:3] | passed | 0.00011 seconds | ./spec/castkit_spec.rb[1:2:1:4] | passed | 0.0001 seconds | ./spec/castkit_spec.rb[1:2:2:1] | passed | 0.00011 seconds | -./spec/castkit_spec.rb[1:2:2:2] | passed | 0.00015 seconds | +./spec/castkit_spec.rb[1:2:2:2] | passed | 0.00009 seconds | ./spec/castkit_spec.rb[1:2:2:3] | passed | 0.00007 seconds | ./spec/castkit_spec.rb[1:2:3:1] | passed | 0.00006 seconds | ./spec/castkit_spec.rb[1:2:3:2] | passed | 0.00006 seconds | -./spec/castkit_spec.rb[1:2:3:3] | passed | 0.00006 seconds | -./spec/castkit_spec.rb[1:2:4:1] | passed | 0.00008 seconds | -./spec/castkit_spec.rb[1:3:1] | passed | 0.00018 seconds | -./spec/castkit_spec.rb[1:3:2] | passed | 0.00023 seconds | +./spec/castkit_spec.rb[1:2:3:3] | passed | 0.00005 seconds | +./spec/castkit_spec.rb[1:2:4:1] | passed | 0.00007 seconds | +./spec/castkit_spec.rb[1:3:1] | passed | 0.00021 seconds | +./spec/castkit_spec.rb[1:3:2] | passed | 0.00015 seconds | ./spec/castkit_spec.rb[1:3:3] | passed | 0.00016 seconds | ./spec/castkit_spec.rb[1:3:4] | passed | 0.00018 seconds | ./spec/castkit_spec.rb[1:3:5] | passed | 0.00012 seconds | -./spec/castkit_spec.rb[1:3:6] | passed | 0.00015 seconds | -./spec/castkit_spec.rb[1:3:7] | passed | 0.00024 seconds | -./spec/castkit_spec.rb[1:3:8] | passed | 0.0002 seconds | +./spec/castkit_spec.rb[1:3:6] | passed | 0.00014 seconds | +./spec/castkit_spec.rb[1:3:7] | passed | 0.00023 seconds | +./spec/castkit_spec.rb[1:3:8] | passed | 0.00019 seconds | ./spec/configuration_spec.rb[1:1:1] | passed | 0.00007 seconds | -./spec/configuration_spec.rb[1:2:1] | passed | 0.00005 seconds | -./spec/configuration_spec.rb[1:3:1] | passed | 0.00013 seconds | +./spec/configuration_spec.rb[1:2:1] | passed | 0.00012 seconds | +./spec/configuration_spec.rb[1:3:1] | passed | 0.00005 seconds | ./spec/configuration_spec.rb[1:3:2] | passed | 0.00004 seconds | ./spec/configuration_spec.rb[1:3:3] | passed | 0.00004 seconds | ./spec/configuration_spec.rb[1:3:4] | passed | 0.00006 seconds | diff --git a/lib/castkit/core/attributes.rb b/lib/castkit/core/attributes.rb index 9d99556..be8e853 100644 --- a/lib/castkit/core/attributes.rb +++ b/lib/castkit/core/attributes.rb @@ -100,6 +100,13 @@ def attributes @attributes ||= {} end + def inherited(subclass) + super + + parent_attributes = instance_variable_get(:@attributes) + subclass.instance_variable_set(:@attributes, parent_attributes.dup) if parent_attributes + end + # Alias for {#attribute} # # @see #attribute diff --git a/spec/castkit/data_object_spec.rb b/spec/castkit/data_object_spec.rb index f4fd1cb..62a1c9a 100644 --- a/spec/castkit/data_object_spec.rb +++ b/spec/castkit/data_object_spec.rb @@ -141,6 +141,24 @@ def self.name expect { subclass.new(valid_input.merge(extra: 1)) }.not_to raise_error end + + it "accepts attributes defined on a parent class" do + sorted_query = Class.new(described_class) do + optional do + string :sort + end + end + + filtered_sorted = Class.new(sorted_query) do + optional do + string :filter + end + end + + expect do + filtered_sorted.new(sort: "auto") + end.not_to raise_error + end end describe "#__raw" do