moxml 0.5.168 → 0.5.169
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/moxml/version.rb +1 -1
- data/lib/moxml/xsd/builtin_lexical.rb +11 -1
- data/spec/moxml/xsd_builtin_lexical_spec.rb +24 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c6d162a122e231644310d60b9f27eef7f3fa89728a6c135a9eb855d56952af5d
|
|
4
|
+
data.tar.gz: 7c3c92e7ffe80f35484e364d75808d1a74f4c62db7c1e2222b0d1d2921d3ccac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4872ca2eb4456ee02a511196840379610f6c66b590d64ba1a4715b6107c33a912056bd6fe48055d1270c274e9aec62193f88778180f57ebe32da3f27961f871c
|
|
7
|
+
data.tar.gz: 4811ea416c2ebd77ff2cbedf4f640a755424e5ae67d3590c63220fd182eff8ad2fb0c58335ea82f90bb8b9c5bca9f408cb4989256a9c74bb6af5b568ecfc457b
|
data/lib/moxml/version.rb
CHANGED
|
@@ -144,9 +144,19 @@ module Moxml
|
|
|
144
144
|
match.captures.map { |field| Integer(field) }
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
+
# The answer is total: a lexical whose date part does not
|
|
148
|
+
# parse is invalid (false), never nil — consumers pin strict
|
|
149
|
+
# booleans on this face (#485 follow-up).
|
|
147
150
|
def with_date_fields(lexical)
|
|
148
151
|
year, month, day = date_fields(lexical)
|
|
149
|
-
|
|
152
|
+
return false unless year
|
|
153
|
+
|
|
154
|
+
yield(year, month, day)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# The supported "xs:NAME" spellings (the CHECKERS keys).
|
|
158
|
+
def names
|
|
159
|
+
CHECKERS.keys
|
|
150
160
|
end
|
|
151
161
|
|
|
152
162
|
def integer?(lexical, range: nil)
|
|
@@ -135,5 +135,29 @@ RSpec.describe Moxml::XSD do
|
|
|
135
135
|
expect(valid_lexical?("xs:Name", "a:b")).to be(true)
|
|
136
136
|
expect(valid_lexical?("xs:NCName", "a:b")).to be(false)
|
|
137
137
|
end
|
|
138
|
+
|
|
139
|
+
# lutaml-xsd's engine context pins strict booleans on this face:
|
|
140
|
+
# a grammar-invalid calendar lexical must answer false, never nil
|
|
141
|
+
# (the with_date_fields short-circuit used to leak nil).
|
|
142
|
+
it "answers a strict boolean for every supported name" do
|
|
143
|
+
garbage = ["not-a-date", "", " ", "12x", "9999-99-99Tzz"]
|
|
144
|
+
|
|
145
|
+
Moxml::XSD::BuiltinLexical.names.each do |name|
|
|
146
|
+
garbage.each do |lexical|
|
|
147
|
+
answer = valid_lexical?(name, lexical)
|
|
148
|
+
expect(answer.eql?(true) || answer.eql?(false)).to be(true),
|
|
149
|
+
"#{name} #{lexical.inspect} answered " \
|
|
150
|
+
"#{answer.inspect}, want a boolean"
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "answers false for the calendar faces the engine context pins" do
|
|
156
|
+
expect(valid_lexical?("xs:date", "not-a-date")).to be(false)
|
|
157
|
+
expect(valid_lexical?("xs:dateTime", "not-a-date")).to be(false)
|
|
158
|
+
expect(valid_lexical?("xs:dateTimeStamp", "not-a-date")).to be(false)
|
|
159
|
+
expect(valid_lexical?("xs:dateTimeStamp", "2024-02-29T00:00:00")).to be(false)
|
|
160
|
+
expect(valid_lexical?("xs:dateTimeStamp", "2024-02-29T00:00:00Z")).to be(true)
|
|
161
|
+
end
|
|
138
162
|
end
|
|
139
163
|
end
|