tomlib 0.5.0 → 0.6.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/CHANGELOG.md +4 -0
- data/README.md +6 -5
- data/ext/tomlib/tomlib.c +1 -1
- data/lib/tomlib/dumper.rb +39 -2
- data/lib/tomlib/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aad6b4a6455bd446b09db888f1fc491a66521e0680594f74eeba9d10314cc8b6
|
4
|
+
data.tar.gz: fe599fd32583ba52c6702d29a9a27d805ba3cb0889e3df4b6612e2cebc6d1c75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9f44b0a8b4f65b58ebf058646ca69d1fabdb935f352523cf9836f6387a92b5712ee59e233ec4efe92beb5a8feae28dd03af630f7601db236564d0a5afc79b86
|
7
|
+
data.tar.gz: aa654d7e31d34113629798a9336c9ead2e2071eb1935b3c80974f4c44da6333bf9b11719668ed43d148a4d85df6b1032f5fc8a306cde7e7620d9316ad7e9bb9a
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Tomlib
|
2
2
|
|
3
|
-
Tomlib is a TOML parser and generator for Ruby. It
|
4
|
-
|
3
|
+
Tomlib is a TOML parser and generator for Ruby. It uses native C extension based on
|
4
|
+
fast and standards-compliant [tomlc99](https://github.com/cktan/tomlc99) parser.
|
5
5
|
|
6
6
|
## Compliance
|
7
7
|
|
@@ -118,10 +118,11 @@ Tomlib.dump(hash, indent: false)
|
|
118
118
|
|
119
119
|
## Performance
|
120
120
|
|
121
|
-
`Tomlib`
|
122
|
-
|
121
|
+
When parsing documents, `Tomlib` is more than 600x (400x with yjit) faster than `toml-rb`,
|
122
|
+
23x (17x with yjit) faster than `Tomlrb` and almost 5x (3.5x with yjit)
|
123
|
+
faster than `perfect_toml` (~5KB TOML document size).
|
123
124
|
|
124
|
-
|
125
|
+
When generating TOML documents, it is about 1.5x (1.7x with yjit) faster than `toml-rb`.
|
125
126
|
|
126
127
|
For full comparison take a look at
|
127
128
|
[benchmarks](https://github.com/kgiszczak/tomlib/tree/master/benchmarks)
|
data/ext/tomlib/tomlib.c
CHANGED
data/lib/tomlib/dumper.rb
CHANGED
@@ -27,6 +27,22 @@ module Tomlib
|
|
27
27
|
# @api private
|
28
28
|
NAN = 'nan'.freeze
|
29
29
|
|
30
|
+
# Regex to match escape chars
|
31
|
+
# @api private
|
32
|
+
ESCAPE_CHARS_REGEX = /[\x00-\x1F\x22\x5C\x7F]/.freeze
|
33
|
+
|
34
|
+
# Escape chars mapping
|
35
|
+
# @api private
|
36
|
+
ESCAPE_CHARS = {
|
37
|
+
"\b" => 'b',
|
38
|
+
"\t" => 't',
|
39
|
+
"\n" => 'n',
|
40
|
+
"\f" => 'f',
|
41
|
+
"\r" => 'r',
|
42
|
+
'"' => '"',
|
43
|
+
'\\' => '\\',
|
44
|
+
}.freeze
|
45
|
+
|
30
46
|
def initialize(use_indent: true)
|
31
47
|
@use_indent = use_indent
|
32
48
|
end
|
@@ -106,7 +122,7 @@ module Tomlib
|
|
106
122
|
|
107
123
|
case key_type(key)
|
108
124
|
when :quoted
|
109
|
-
key
|
125
|
+
escape_string(key)
|
110
126
|
when :escape
|
111
127
|
key.dump.gsub('\n', '\\\\\n')
|
112
128
|
else
|
@@ -138,7 +154,7 @@ module Tomlib
|
|
138
154
|
def to_toml_value(value)
|
139
155
|
case value
|
140
156
|
when String
|
141
|
-
value
|
157
|
+
escape_string(value)
|
142
158
|
when Float, BigDecimal
|
143
159
|
to_toml_float(value)
|
144
160
|
when Time, DateTime
|
@@ -170,5 +186,26 @@ module Tomlib
|
|
170
186
|
|
171
187
|
value.to_s
|
172
188
|
end
|
189
|
+
|
190
|
+
# Escapes TOML special characters
|
191
|
+
#
|
192
|
+
# @param [String] str
|
193
|
+
#
|
194
|
+
# @return [String]
|
195
|
+
#
|
196
|
+
# @api private
|
197
|
+
def escape_string(str)
|
198
|
+
str = str.gsub(ESCAPE_CHARS_REGEX) do |chr|
|
199
|
+
c = ESCAPE_CHARS[chr]
|
200
|
+
|
201
|
+
if c
|
202
|
+
'\\' << c
|
203
|
+
else
|
204
|
+
format('\\u%04X', chr.ord)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
'"' << str << '"'.freeze
|
209
|
+
end
|
173
210
|
end
|
174
211
|
end
|
data/lib/tomlib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tomlib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kamil Giszczak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Fast TOML parser and generator with native extension.
|
14
14
|
email:
|
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
requirements: []
|
57
|
-
rubygems_version: 3.
|
57
|
+
rubygems_version: 3.4.10
|
58
58
|
signing_key:
|
59
59
|
specification_version: 4
|
60
60
|
summary: Fast TOML parser and generator with native extension.
|