From b707738c2b589f212dec2d22d0578b9eeaf76cb0 Mon Sep 17 00:00:00 2001 From: ollietulloch Date: Wed, 25 Feb 2026 09:03:39 +0000 Subject: [PATCH 1/3] Add failing test --- test/validators/json_schema_validator_test.rb | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/test/validators/json_schema_validator_test.rb b/test/validators/json_schema_validator_test.rb index 0e23d5a..b0e5da8 100644 --- a/test/validators/json_schema_validator_test.rb +++ b/test/validators/json_schema_validator_test.rb @@ -40,6 +40,18 @@ class JsonSchemaTestModel } }.freeze + EXTERNAL_REF_SCHEMA = { + '$schema' => 'https://json-schema.org/draft/2019-09/schema', + 'type' => 'object', + 'properties' => { + 'name' => { + '$ref': 'external://structured_store/json_date_range/', + 'type' => 'string', + 'example' => 'John Doe' + } + } + }.freeze + attr_accessor :draft201909_symbol_schema, :hash_schema, :instance_schema, @@ -47,7 +59,8 @@ class JsonSchemaTestModel :lambda_schema_dynamic, :openapi31_symbol_schema, :string_schema, - :unexpected_class_schema + :unexpected_class_schema, + :external_ref_schema validates :draft201909_symbol_schema, json_schema: { allow_blank: true, schema: :draft201909 } validates :hash_schema, json_schema: { allow_blank: true, schema: DRAFT201909_NAME_SCHEMA } @@ -90,6 +103,7 @@ class JsonSchemaTestModel validates :openapi31_symbol_schema, json_schema: { allow_blank: true, schema: :openapi31 } validates :string_schema, json_schema: { allow_blank: true, schema: DRAFT201909_NAME_SCHEMA.to_json } validates :unexpected_class_schema, json_schema: { allow_blank: true, schema: self } + validates :external_ref_schema, json_schema: { allow_blank: true, schema: EXTERNAL_REF_SCHEMA } end test 'validate test schemas' do @@ -255,4 +269,13 @@ class JsonSchemaTestModel object.valid? end end + + test 'allows external refs' do + object = JsonSchemaTestModel.new + object.external_ref_schema = { + 'name' => 'John Doe' + } + + object.valid? + end end From 8646ce2f6a9d03047363a8a44a18213066fb8e0d Mon Sep 17 00:00:00 2001 From: ollietulloch Date: Wed, 25 Feb 2026 09:06:45 +0000 Subject: [PATCH 2/3] add assertion --- test/validators/json_schema_validator_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/validators/json_schema_validator_test.rb b/test/validators/json_schema_validator_test.rb index b0e5da8..ba22ba2 100644 --- a/test/validators/json_schema_validator_test.rb +++ b/test/validators/json_schema_validator_test.rb @@ -276,6 +276,6 @@ class JsonSchemaTestModel 'name' => 'John Doe' } - object.valid? + assert_nothing_raised { object.valid? } end end From d060b8de55730853efd5ac199ee2f29d22f314d2 Mon Sep 17 00:00:00 2001 From: ollietulloch Date: Wed, 25 Feb 2026 09:08:01 +0000 Subject: [PATCH 3/3] Add default `ref_resolver` --- app/validators/json_schema_validator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/validators/json_schema_validator.rb b/app/validators/json_schema_validator.rb index c02f758..98c7028 100644 --- a/app/validators/json_schema_validator.rb +++ b/app/validators/json_schema_validator.rb @@ -53,7 +53,7 @@ def json_schemer(schema) when *NAMED_SCHEMA_VERSIONS JSONSchemer.send(schema) when String, Hash - JSONSchemer.schema(schema) + JSONSchemer.schema(schema, ref_resolver: proc { |_uri| {} }) when JSONSchemer::Schema schema else