tomlib 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|