toml-rb 4.0.0 → 4.1.0
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/toml-rb/errors.rb +1 -1
- data/lib/toml-rb/keyvalue.rb +13 -7
- data/lib/toml-rb/parser.rb +8 -0
- data/lib/toml-rb/table.rb +8 -1
- data/lib/toml-rb/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: 80597ee120e2f6517bfca775d9215d4ac3c9c9880bac87c1ec432edb78f32566
         | 
| 4 | 
            +
              data.tar.gz: fd278770b1c245508fc7ceb15336fba968e98b258bc06badcca0875107406292
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d31002d86304f9c675da476e41f9c196077c7ded480f9f2224fb9d43416de1964238410828d55ce894f0ed68a0559097f2d96324be0f527771507f2589da4777
         | 
| 7 | 
            +
              data.tar.gz: 91a114c7a2c397be72edfb826025ae1cde65d0732359c38a3719ca6e61f2cd6eb237842d7ddf60e3034db9791c800c916e8bf1885aaa48e56ff147aaccc68d20
         | 
    
        data/lib/toml-rb/errors.rb
    CHANGED
    
    
    
        data/lib/toml-rb/keyvalue.rb
    CHANGED
    
    | @@ -16,24 +16,30 @@ module TomlRB | |
| 16 16 | 
             
                  keys = symbolize_keys ? @dotted_keys.map(&:to_sym) : @dotted_keys
         | 
| 17 17 | 
             
                  update = keys.reverse.inject(visit_value(@value)) { |k1, k2| {k2 => k1} }
         | 
| 18 18 |  | 
| 19 | 
            +
                  parent_inline_table = fully_defined_keys.find { |k| dotted_keys_str.start_with?("#{k}.") }
         | 
| 20 | 
            +
                  fail ValueOverwriteError.new(@dotted_keys.first) if parent_inline_table
         | 
| 21 | 
            +
             | 
| 19 22 | 
             
                  if @value.is_a?(InlineTable)
         | 
| 23 | 
            +
                    child_keys_exist = fully_defined_keys.find { |k| k.start_with?("#{dotted_keys_str}.") }
         | 
| 24 | 
            +
                    fail ValueOverwriteError.new(@dotted_keys.first) if child_keys_exist
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    existing_hash = hash.dig(*keys)
         | 
| 27 | 
            +
                    fail ValueOverwriteError.new(@dotted_keys.first) if existing_hash.is_a?(Hash) && !existing_hash.empty?
         | 
| 28 | 
            +
             | 
| 20 29 | 
             
                    fully_defined_keys << dotted_keys_str
         | 
| 21 | 
            -
                    hash.merge!(update) { |key, _, _| fail ValueOverwriteError.new(key) }
         | 
| 22 | 
            -
                  elsif fully_defined_keys.find { |k| update.dig(*k) }
         | 
| 23 | 
            -
                    hash.merge!(update) { |key, _, _| fail ValueOverwriteError.new(key) }
         | 
| 24 | 
            -
                  else
         | 
| 25 | 
            -
                    dotted_key_merge(hash, update)
         | 
| 26 30 | 
             
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  dotted_key_merge(hash, update)
         | 
| 27 33 | 
             
                end
         | 
| 28 34 |  | 
| 29 35 | 
             
                def dotted_key_merge(hash, update)
         | 
| 30 | 
            -
                  hash.merge!(update)  | 
| 36 | 
            +
                  hash.merge!(update) do |key, old, new|
         | 
| 31 37 | 
             
                    if old.is_a?(Hash) && new.is_a?(Hash)
         | 
| 32 38 | 
             
                      dotted_key_merge(old, new)
         | 
| 33 39 | 
             
                    else
         | 
| 34 40 | 
             
                      fail ValueOverwriteError.new(key)
         | 
| 35 41 | 
             
                    end
         | 
| 36 | 
            -
                   | 
| 42 | 
            +
                  end
         | 
| 37 43 | 
             
                end
         | 
| 38 44 |  | 
| 39 45 | 
             
                def accept_visitor(parser)
         | 
    
        data/lib/toml-rb/parser.rb
    CHANGED
    
    | @@ -14,6 +14,14 @@ module TomlRB | |
| 14 14 | 
             
                    parsed.matches.map(&:value).compact.each { |m| m.accept_visitor(self) }
         | 
| 15 15 | 
             
                  rescue Citrus::ParseError => e
         | 
| 16 16 | 
             
                    raise TomlRB::ParseError.new(e.message)
         | 
| 17 | 
            +
                  rescue Encoding::CompatibilityError => e
         | 
| 18 | 
            +
                    raise TomlRB::ParseError.new("Encoding error: #{e.message}")
         | 
| 19 | 
            +
                  rescue ArgumentError => e
         | 
| 20 | 
            +
                    if e.message.include?("invalid byte sequence") || e.message.include?("encoding")
         | 
| 21 | 
            +
                      raise TomlRB::ParseError.new("Encoding error: #{e.message}")
         | 
| 22 | 
            +
                    else
         | 
| 23 | 
            +
                      raise
         | 
| 24 | 
            +
                    end
         | 
| 17 25 | 
             
                  end
         | 
| 18 26 | 
             
                end
         | 
| 19 27 |  | 
    
        data/lib/toml-rb/table.rb
    CHANGED
    
    | @@ -8,9 +8,16 @@ module TomlRB | |
| 8 8 | 
             
                  ensure_key_not_defined(visited_keys)
         | 
| 9 9 | 
             
                  current = hash
         | 
| 10 10 | 
             
                  keys = symbolize_keys ? @dotted_keys.map(&:to_sym) : @dotted_keys
         | 
| 11 | 
            -
                  keys. | 
| 11 | 
            +
                  keys.each_with_index do |key, index|
         | 
| 12 12 | 
             
                    current[key] = {} unless current.key?(key)
         | 
| 13 13 | 
             
                    element = current[key]
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    # If this is the final key and it's already an array (from [[key]]), that's invalid
         | 
| 16 | 
            +
                    is_final_key = (index == keys.length - 1)
         | 
| 17 | 
            +
                    if is_final_key && element.is_a?(Array)
         | 
| 18 | 
            +
                      fail ValueOverwriteError.new(key)
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 14 21 | 
             
                    current = element.is_a?(Array) ? element.last : element
         | 
| 15 22 | 
             
                    # check that key has not been defined before as a scalar value
         | 
| 16 23 | 
             
                    fail ValueOverwriteError.new(key) unless current.is_a?(Hash)
         | 
    
        data/lib/toml-rb/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: toml-rb
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4. | 
| 4 | 
            +
              version: 4.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Emiliano Mancuso
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire:
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2025- | 
| 12 | 
            +
            date: 2025-10-29 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: citrus
         |