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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b55c7bbd0cbaa945ab4404c9fe40b354ae5b291672804f874b33318abd26dc3
4
- data.tar.gz: 33ac60d77afebe105bf6ccfcd4f07482f1b33c42cf573c6e169a2b2aacc0b2df
3
+ metadata.gz: c6d162a122e231644310d60b9f27eef7f3fa89728a6c135a9eb855d56952af5d
4
+ data.tar.gz: 7c3c92e7ffe80f35484e364d75808d1a74f4c62db7c1e2222b0d1d2921d3ccac
5
5
  SHA512:
6
- metadata.gz: 33d2df43783702c43372335cfe88fb0449cb04984889f3932fcd085592c26f33ad68303c0d4019a6ed01831a325bd1070d2d261a47cfc604867b9b221452a69a
7
- data.tar.gz: 5417a78c416bbbc737a13e9c369f7a7064e5946f44da6e80dad795fee279c1d355f86d10dd5f95bfcbe61b44eba1a7c7d3f6cd462197b7a00698a1f74f81fa35
6
+ metadata.gz: 4872ca2eb4456ee02a511196840379610f6c66b590d64ba1a4715b6107c33a912056bd6fe48055d1270c274e9aec62193f88778180f57ebe32da3f27961f871c
7
+ data.tar.gz: 4811ea416c2ebd77ff2cbedf4f640a755424e5ae67d3590c63220fd182eff8ad2fb0c58335ea82f90bb8b9c5bca9f408cb4989256a9c74bb6af5b568ecfc457b
data/lib/moxml/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Moxml
4
- VERSION = "0.5.168"
4
+ VERSION = "0.5.169"
5
5
  end
@@ -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
- year && yield(year, month, day)
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moxml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.168
4
+ version: 0.5.169
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.