@@ -1544,10 +1544,10 @@ def compact_iri(iri, base: nil, reverse: false, value: nil, vocab: nil)
1544
1544
candidates = [ ]
1545
1545
1546
1546
term_definitions . each do |term , td |
1547
- next if td . nil? || td . id . nil? || td . id == iri || !iri . start_with? ( td . id )
1548
-
1549
1547
# Skip term if `@prefix` is not true in term definition
1550
- next unless td . prefix?
1548
+ next unless td &.prefix?
1549
+
1550
+ next if td &.id . nil? || td . id == iri || !td . match_iri? ( iri )
1551
1551
1552
1552
suffix = iri [ td . id . length ..]
1553
1553
ciri = "#{ term } :#{ suffix } "
@@ -1572,7 +1572,7 @@ def compact_iri(iri, base: nil, reverse: false, value: nil, vocab: nil)
1572
1572
1573
1573
# If iri could be confused with a compact IRI using a term in this context, signal an error
1574
1574
term_definitions . each do |term , td |
1575
- next unless iri . to_s . start_with? ( " #{ term } :" ) && td . prefix?
1575
+ next unless td . prefix? && td . match_compact_iri? ( iri )
1576
1576
1577
1577
raise JSON ::LD ::JsonLdError ::IRIConfusedWithPrefix , "Absolute IRI '#{ iri } ' confused with prefix '#{ term } '"
1578
1578
end
@@ -2204,6 +2204,22 @@ def protected?
2204
2204
!!@protected
2205
2205
end
2206
2206
2207
+ # Returns true if the term matches a IRI
2208
+ #
2209
+ # @param iri [String] the IRI
2210
+ # @return [Boolean]
2211
+ def match_iri? ( iri )
2212
+ iri . start_with? ( id )
2213
+ end
2214
+
2215
+ # Returns true if the term matches a compact IRI
2216
+ #
2217
+ # @param iri [String] the compact IRI
2218
+ # @return [Boolean]
2219
+ def match_compact_iri? ( iri )
2220
+ iri . start_with? ( prefix_colon )
2221
+ end
2222
+
2207
2223
# Set container mapping, from an array which may include @set
2208
2224
def container_mapping = ( mapping )
2209
2225
mapping = case mapping
@@ -2328,6 +2344,12 @@ def inspect
2328
2344
v << "has-context" unless context . nil?
2329
2345
v . join ( " " ) + "]"
2330
2346
end
2347
+
2348
+ private
2349
+
2350
+ def prefix_colon
2351
+ @prefix_colon ||= "#{ term } :" . freeze
2352
+ end
2331
2353
end
2332
2354
end
2333
2355
end
0 commit comments