A summary of data about the Ruby ecosystem.

Recent Releases of https://github.com/savonrb/nori

https://github.com/savonrb/nori - v2.9.1

Fixed

  • Under :serializable, a typecast value no longer drops the node's attributes. A text node whose content gets converted to a non-String (by :advanced_typecasting or a bare type= cast) now takes the same hash shape as string values: <status source="ldap">true</status> becomes {"#text" => true, "@source" => "ldap"} instead of a bare true that silently lost @source. This closes a data-dependent hole in the profile's no-silent-loss promise, where the same element kept or dropped its attributes depending on what its text happened to look like. The value at #text is whatever the typecasting produced. Combined with standards: true no typecasting happens and #text is always a string.

  • The #text key of the :serializable hash shape now goes through :convert_tags_to like every other key. Previously a key-converting formula (for example one that symbolizes keys) produced converted element and attribute keys next to a raw "#text" string key in the same hash. Nori's contract is that a :convert_tags_to formula sees every key it emits, which also means a caller who prefers a plain text key over the XML JSON convention can now map "#text" in their formula.

Changelog: https://github.com/savonrb/nori/blob/main/CHANGELOG.md
Commits: https://github.com/savonrb/nori/compare/v2.9.0...v2.9.1

- Ruby
Published by rubiii 3 months ago

https://github.com/savonrb/nori - v2.9.0

Changed

  • The :standards profile no longer applies schema-less typing. Under Nori.new(standards: true), :advanced_typecasting now defaults to false (an explicit advanced_typecasting: true still wins), and the bare un-namespaced type= and nil= attributes become ordinary attributes instead of casting instructions. No more type= conversions (integer, date, decimal, array, file, ...), and only a prefixed xsi:nil="true" marks an element nil. These conventions come from Rails' Hash.from_xml (inherited via crack and merb), not from any XML spec. Without a schema, character data is just text. Knowing that <id>123</id> holds an integer is the business of a schema-aware layer, not a guess from string shape. Parsing without the profile is completely unchanged.

Added

  • Add the :serializable profile option. Nori.new(serializable: true) returns plain, directly-serializable data with no custom value classes. A text node that also has attributes becomes a Hash in the XML JSON convention ({"#text" => content} merged with our existing @-prefixed attributes instead of a Nori::StringWithAttributes, and a text node without attributes becomes a plain String. A type="file" node is no longer decoded into a Nori::StringIOFile, it folds into text and attributes like any other node, leaving the base64 content untouched for the caller to decode. That type= decoding is a Rails/ActiveSupport Hash.from_xml convention Nori inherited via crack and merb, not part of any XML spec, which is why the plain-data profile drops it. With this, values survive to_json, to_yaml, and Marshal. Opt-in on the 2.x line, probably the default in Nori 3.0. Reported by @ArnoldMEDLINQ (#107), thanks to @dub357 for pinpointing the cause and finding #106, and thanks to @ekzobrain whose hash-shape approach this builds on.

Changelog: https://github.com/savonrb/nori/blob/main/CHANGELOG.md
Commits: https://github.com/savonrb/nori/compare/v2.8.0...v2.9.0

- Ruby
Published by rubiii 3 months ago

https://github.com/savonrb/nori - v2.8.0

Added

  • Add the :standards profile option. Nori.new(standards: true) turns on Nori's spec-correct parsing as a group rather than one flag at a time. Its first members are xml:space honoring (whitespace-only text under xml:space="preserve" is kept instead of stripped, with inheritance and xml:space="default" reset per XML 1.0 §2.10) and the XML string-value model for empty elements (implies :consistent_empty_tags with an empty-string :empty_tag_value, both still overridable). Opt-in on the 2.x line, default in 3.0. Thanks to @md5 for raising the xml:space="preserve" case on #97.

  • #97 Add the :consistent_empty_tags option (#109). When enabled, every empty tag becomes the :empty_tag_value, whether it has attributes or not. A string value keeps the attributes accessible via #attributes, and an explicit xsi:nil="true" always becomes nil. Reported by @lukasbischof, who also proposed a fix in #98. Thanks to @md5 for surfacing another instance of it and pinpointing the cause.

Fixed

  • Whitespace-only CDATA content is no longer stripped. A <![CDATA[ ]]> section is the author's explicit literal-data marker, so its content is now preserved as text instead of being dropped, on both the Nokogiri and REXML parsers. Previously such a tag parsed to nil (or, with attributes, dropped the content and kept only the attributes). Non-whitespace CDATA is unchanged, and ordinary whitespace-only text is still stripped as before. Surfaced while auditing whitespace handling for #97, the same empty-tag/whitespace spec-compliance work as the :consistent_empty_tags option above.

Changelog: https://github.com/savonrb/nori/blob/main/CHANGELOG.md
Commits: https://github.com/savonrb/nori/compare/v2.17.1...v2.18.0

- Ruby
Published by rubiii 3 months ago

https://github.com/savonrb/nori - v2.7.1

What's Changed

New Contributors

Full Changelog: https://github.com/savonrb/nori/compare/v2.7.0...v2.7.1

- Ruby
Published by pcai about 2 years ago

https://github.com/savonrb/nori - v2.7.0

  • Added support for ruby 3.1, 3.2, 3.3. Dropped support for ruby 2.7 and below.
  • Feature: Nori::Parser has a new option, :scrub_xml, which defaults to true, for scrubbing invalid characters (#72). This should allow documents containing invalid characters to still be parsed.
  • Fix: REXML parser changes &lt; inside CDATA to < (#94)
  • Change: Object#blank? is no longer patched in.

- Ruby
Published by pcai over 2 years ago