File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -113,7 +113,8 @@ JSONSchemer.schema(
113113 ref_resolver: ' net/http' ,
114114
115115 # use different method to match regexes
116- # Proc/lambda/respond_to?(:call)
116+ # 'ecma'/'ruby'/proc/lambda/respond_to?(:call)
117+ # default: 'ecma'
117118 regexp_resolver: proc do |pattern |
118119 RE2 ::Regexp .new (pattern)
119120 end
Original file line number Diff line number Diff line change @@ -30,7 +30,7 @@ def merge(
3030 :eol => '\z'
3131 } . freeze
3232
33- DEFAULT_REGEXP_RESOLVER = proc do |pattern |
33+ ECMA_262_REGEXP_RESOLVER = proc do |pattern |
3434 Regexp . new (
3535 Regexp ::Scanner . scan ( pattern ) . map do |type , token , text |
3636 type == :anchor ? RUBY_REGEX_ANCHORS_TO_ECMA_262 . fetch ( token , text ) : text
@@ -53,7 +53,7 @@ def initialize(
5353 formats : nil ,
5454 keywords : nil ,
5555 ref_resolver : DEFAULT_REF_RESOLVER ,
56- regexp_resolver : CachedResolver . new ( & DEFAULT_REGEXP_RESOLVER )
56+ regexp_resolver : 'ecma'
5757 )
5858 raise InvalidSymbolKey , 'schemas must use string keys' if schema . is_a? ( Hash ) && !schema . empty? && !schema . first . first . is_a? ( String )
5959 @root = schema
@@ -64,7 +64,14 @@ def initialize(
6464 @formats = formats
6565 @keywords = keywords
6666 @ref_resolver = ref_resolver == 'net/http' ? CachedResolver . new ( &NET_HTTP_REF_RESOLVER ) : ref_resolver
67- @regexp_resolver = regexp_resolver
67+ @regexp_resolver = case regexp_resolver
68+ when 'ecma'
69+ CachedResolver . new ( &ECMA_262_REGEXP_RESOLVER )
70+ when 'ruby'
71+ CachedResolver . new ( &Regexp . method ( :new ) )
72+ else
73+ regexp_resolver
74+ end
6875 end
6976
7077 def valid? ( data )
Original file line number Diff line number Diff line change @@ -933,6 +933,18 @@ def initialize(*args)
933933 assert_equal ( 1 , new_regexp_class . counts )
934934 end
935935
936+ def test_it_allows_named_regexp_resolvers
937+ schema = JSONSchemer . schema ( { 'pattern' => '^test$' } )
938+ assert ( schema . valid? ( "test" ) )
939+ refute ( schema . valid? ( "\n test\n " ) )
940+ schema = JSONSchemer . schema ( { 'pattern' => '^test$' } , :regexp_resolver => 'ecma' )
941+ assert ( schema . valid? ( "test" ) )
942+ refute ( schema . valid? ( "\n test\n " ) )
943+ schema = JSONSchemer . schema ( { 'pattern' => '^test$' } , :regexp_resolver => 'ruby' )
944+ assert ( schema . valid? ( "test" ) )
945+ assert ( schema . valid? ( "\n test\n " ) )
946+ end
947+
936948 def test_it_raises_for_invalid_regexp_resolution
937949 schema = JSONSchemer . schema (
938950 { 'pattern' => 'whatever' } ,
You can’t perform that action at this time.
0 commit comments