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
|