rng 0.3.4 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b297a52ef81d423b4980c3b32b3b167296c733a293bc52c533926aaf7088f55
4
- data.tar.gz: d85e507f79ab28d6f50e32128d4fdc7abe4dd9fae5cdccec2d57d23043271554
3
+ metadata.gz: ebbcb6ae7f7313b3343ba5b95d4378759edc347a45bbac8ba6963ea38481cd96
4
+ data.tar.gz: ea8e1aef28333c0de0d3ec1ebbbf33724e98657cdd7d61c15794f9b241227a20
5
5
  SHA512:
6
- metadata.gz: 3d4cf91c1c619e39a9d923d409a741e455b32fcb364eb425e13a337438a1e2797943c605964fb85a804284d1a0ea2e4a64bc16959aa1960001b1d4f7b1744b00
7
- data.tar.gz: 9fa1ceada50cc44fb707f7dee432718f0d8d3cd259c90991fef7b96402dc4ba5eb8cfa202644ec4fc6b9f1b586252b67c8b818094104fbb9ab2d418726993e8d
6
+ metadata.gz: 8bf076f9915632658de9b5ed92a5f25ade9dab9c379da1faf02cfb26868db548cf1cc7b102de344c441a479731059364012af79929b67b50c0876b05c43ba4b5
7
+ data.tar.gz: 32dbfd869f762de72565c6110c4965b8e907a47373824b5f7ce0d7f32af605250310ddf677a76e3cd6588acdda9f37af19ea877acd380273e0b57884089054ff
data/lib/rng/include.rb CHANGED
@@ -4,7 +4,7 @@ module Rng
4
4
  class Include < Lutaml::Model::Serializable
5
5
  attribute :href, :string
6
6
  attribute :ns, :string
7
- attribute :define, Define
7
+ attribute :define, Define, collection: true, initialize_empty: true
8
8
  attribute :grammar, Grammar
9
9
 
10
10
  xml do
@@ -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
- extract_string(source_def[:name][:identifier]) == extract_string(override_def[:name][:identifier])
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
- extract_string(source_def[:name][:identifier]) == extract_string(override_def[:name][:identifier])
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
@@ -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(text.strip)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rng
4
- VERSION = '0.3.4'
4
+ VERSION = '0.3.5'
5
5
  end
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
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-05-04 00:00:00.000000000 Z
11
+ date: 2026-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lutaml-model