rng 0.3.3 → 0.3.5
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/rng/external_ref_resolver.rb +21 -1
- data/lib/rng/include.rb +1 -1
- data/lib/rng/include_processor.rb +25 -2
- data/lib/rng/name.rb +0 -1
- data/lib/rng/param.rb +0 -1
- data/lib/rng/parse_tree_processor.rb +5 -1
- data/lib/rng/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ebbcb6ae7f7313b3343ba5b95d4378759edc347a45bbac8ba6963ea38481cd96
|
|
4
|
+
data.tar.gz: ea8e1aef28333c0de0d3ec1ebbbf33724e98657cdd7d61c15794f9b241227a20
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8bf076f9915632658de9b5ed92a5f25ade9dab9c379da1faf02cfb26868db548cf1cc7b102de344c441a479731059364012af79929b67b50c0876b05c43ba4b5
|
|
7
|
+
data.tar.gz: 32dbfd869f762de72565c6110c4965b8e907a47373824b5f7ce0d7f32af605250310ddf677a76e3cd6588acdda9f37af19ea877acd380273e0b57884089054ff
|
|
@@ -216,10 +216,30 @@ module Rng
|
|
|
216
216
|
|
|
217
217
|
# Deep dup a pattern object
|
|
218
218
|
#
|
|
219
|
+
# Uses recursive copying instead of Marshal to handle objects
|
|
220
|
+
# containing Nokogiri::XML::Element nodes (stored in element_order
|
|
221
|
+
# by lutaml-model), which cannot be serialized by Marshal.
|
|
222
|
+
#
|
|
219
223
|
# @param obj [Object] Object to deep copy
|
|
220
224
|
# @return [Object] Deep copy of object
|
|
221
225
|
def deep_dup(obj)
|
|
222
|
-
|
|
226
|
+
case obj
|
|
227
|
+
when Lutaml::Model::Serializable
|
|
228
|
+
result = obj.class.new
|
|
229
|
+
obj.class.attributes.each_key do |attr_name|
|
|
230
|
+
value = obj.public_send(attr_name)
|
|
231
|
+
result.public_send(:"#{attr_name}=", deep_dup(value))
|
|
232
|
+
end
|
|
233
|
+
result
|
|
234
|
+
when Array
|
|
235
|
+
obj.map { |o| deep_dup(o) }
|
|
236
|
+
when Hash
|
|
237
|
+
obj.each_with_object({}) { |(k, v), h| h[deep_dup(k)] = deep_dup(v) }
|
|
238
|
+
when NilClass, Symbol, Numeric, TrueClass, FalseClass
|
|
239
|
+
obj
|
|
240
|
+
else
|
|
241
|
+
obj.dup
|
|
242
|
+
end
|
|
223
243
|
end
|
|
224
244
|
|
|
225
245
|
# Resolve a single include directive
|
data/lib/rng/include.rb
CHANGED
|
@@ -321,7 +321,8 @@ module Rng
|
|
|
321
321
|
override[:definitions].each do |override_def|
|
|
322
322
|
# Check if names match
|
|
323
323
|
next unless source_def[:name] && override_def[:name] &&
|
|
324
|
-
|
|
324
|
+
extract_name_from_identifier(source_def) ==
|
|
325
|
+
extract_name_from_identifier(override_def)
|
|
325
326
|
|
|
326
327
|
# Use override instead of source
|
|
327
328
|
target_tree[:definitions] << override_def
|
|
@@ -343,7 +344,8 @@ module Rng
|
|
|
343
344
|
|
|
344
345
|
source_tree[:definitions]&.each do |source_def|
|
|
345
346
|
next unless source_def[:name] && override_def[:name] &&
|
|
346
|
-
|
|
347
|
+
extract_name_from_identifier(source_def) ==
|
|
348
|
+
extract_name_from_identifier(override_def)
|
|
347
349
|
|
|
348
350
|
matched = true
|
|
349
351
|
break
|
|
@@ -354,6 +356,27 @@ module Rng
|
|
|
354
356
|
end
|
|
355
357
|
end
|
|
356
358
|
|
|
359
|
+
# Extract identifier string from a definition name hash.
|
|
360
|
+
# Handles both {:identifier => "name"} and
|
|
361
|
+
# {:identifier_parts => [{:char => "n"}, ...]} structures.
|
|
362
|
+
def extract_name_from_identifier(defn)
|
|
363
|
+
name = defn[:name]
|
|
364
|
+
return nil unless name.is_a?(Hash)
|
|
365
|
+
|
|
366
|
+
if name[:identifier]
|
|
367
|
+
extract_string(name[:identifier])
|
|
368
|
+
elsif name[:identifier_parts]
|
|
369
|
+
name[:identifier_parts].map do |part|
|
|
370
|
+
if part.is_a?(Hash) && part[:char]
|
|
371
|
+
c = part[:char]
|
|
372
|
+
c.respond_to?(:str) ? c.str : c.to_s
|
|
373
|
+
else
|
|
374
|
+
part.to_s
|
|
375
|
+
end
|
|
376
|
+
end.join
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
|
|
357
380
|
# Helper method to extract clean string without Parslet position markers
|
|
358
381
|
#
|
|
359
382
|
# @param obj [Object] Parslet::Slice or String
|
data/lib/rng/name.rb
CHANGED
data/lib/rng/param.rb
CHANGED
|
@@ -585,10 +585,14 @@ module Rng
|
|
|
585
585
|
# @param text [String] Grammar block content
|
|
586
586
|
# @return [Hash] Parsed structure
|
|
587
587
|
def parse_grammar_with_scope(text)
|
|
588
|
+
# Convert ## doc comments to # regular comments so the parser's whitespace
|
|
589
|
+
# rule can consume them. This preserves parseability while keeping the
|
|
590
|
+
# text structure intact (just loses ## -> # for whitespace handling).
|
|
591
|
+
processed = text.gsub(/^(\s*)##/, '\1#')
|
|
588
592
|
parser = Rng::RncParser.new
|
|
589
593
|
|
|
590
594
|
# Parse using grammar rule
|
|
591
|
-
parser.grammar.parse(
|
|
595
|
+
parser.grammar.parse(processed.strip)
|
|
592
596
|
|
|
593
597
|
# Return grammar structure
|
|
594
598
|
rescue Parslet::ParseFailed => e
|
data/lib/rng/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rng
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-05-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: lutaml-model
|