serialbench 0.1.0 → 0.1.1
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/.github/workflows/benchmark.yml +173 -30
- data/.github/workflows/ci.yml +3 -3
- data/.github/workflows/docker.yml +246 -0
- data/.github/workflows/release.yml +25 -0
- data/Gemfile +5 -30
- data/README.adoc +962 -134
- data/config/ci.yml +22 -0
- data/config/full.yml +30 -0
- data/docker/Dockerfile.benchmark +31 -0
- data/docker/README.md +214 -0
- data/docker/run-benchmarks.sh +356 -0
- data/lib/serialbench/benchmark_runner.rb +82 -0
- data/lib/serialbench/cli.rb +201 -9
- data/lib/serialbench/result_merger.rb +5 -5
- data/lib/serialbench/serializers/json/rapidjson_serializer.rb +50 -0
- data/lib/serialbench/serializers/json/yajl_serializer.rb +6 -2
- data/lib/serialbench/serializers/xml/nokogiri_serializer.rb +21 -3
- data/lib/serialbench/serializers/xml/rexml_serializer.rb +32 -2
- data/lib/serialbench/serializers/yaml/base_yaml_serializer.rb +55 -0
- data/lib/serialbench/serializers/yaml/psych_serializer.rb +54 -0
- data/lib/serialbench/serializers/yaml/syck_serializer.rb +65 -0
- data/lib/serialbench/serializers.rb +11 -0
- data/lib/serialbench/version.rb +1 -1
- data/serialbench.gemspec +25 -17
- metadata +113 -46
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_yaml_serializer'
|
4
|
+
|
5
|
+
module Serialbench
|
6
|
+
module Serializers
|
7
|
+
module Yaml
|
8
|
+
class SyckSerializer < BaseYamlSerializer
|
9
|
+
def name
|
10
|
+
'syck'
|
11
|
+
end
|
12
|
+
|
13
|
+
def version
|
14
|
+
return 'N/A' unless available?
|
15
|
+
|
16
|
+
begin
|
17
|
+
require 'syck'
|
18
|
+
# Try to get version from gem specification
|
19
|
+
spec = Gem.loaded_specs['syck']
|
20
|
+
return spec.version.to_s if spec
|
21
|
+
|
22
|
+
# Fallback to a default version if no gem spec found
|
23
|
+
'1.0.0'
|
24
|
+
rescue
|
25
|
+
'N/A'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def available?
|
30
|
+
begin
|
31
|
+
require 'syck'
|
32
|
+
# Verify that Syck module and methods are actually available
|
33
|
+
defined?(Syck) && Syck.respond_to?(:dump) && Syck.respond_to?(:load)
|
34
|
+
rescue LoadError
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse(yaml_string)
|
40
|
+
return nil unless available?
|
41
|
+
require 'syck'
|
42
|
+
Syck.load(yaml_string)
|
43
|
+
end
|
44
|
+
|
45
|
+
def generate(object, options = {})
|
46
|
+
return nil unless available?
|
47
|
+
require 'syck'
|
48
|
+
Syck.dump(object)
|
49
|
+
end
|
50
|
+
|
51
|
+
def supports_streaming?
|
52
|
+
false
|
53
|
+
end
|
54
|
+
|
55
|
+
def features
|
56
|
+
%w[parsing generation legacy]
|
57
|
+
end
|
58
|
+
|
59
|
+
def description
|
60
|
+
'Legacy YAML parser (Ruby < 1.9.3)'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -15,6 +15,12 @@ require_relative 'serializers/json/base_json_serializer'
|
|
15
15
|
require_relative 'serializers/json/json_serializer'
|
16
16
|
require_relative 'serializers/json/oj_serializer'
|
17
17
|
require_relative 'serializers/json/yajl_serializer'
|
18
|
+
require_relative 'serializers/json/rapidjson_serializer'
|
19
|
+
|
20
|
+
# YAML Serializers
|
21
|
+
require_relative 'serializers/yaml/base_yaml_serializer'
|
22
|
+
require_relative 'serializers/yaml/psych_serializer'
|
23
|
+
require_relative 'serializers/yaml/syck_serializer'
|
18
24
|
|
19
25
|
# TOML Serializers
|
20
26
|
require_relative 'serializers/toml/base_toml_serializer'
|
@@ -35,8 +41,13 @@ module Serialbench
|
|
35
41
|
json: [
|
36
42
|
Json::JsonSerializer,
|
37
43
|
Json::OjSerializer,
|
44
|
+
Json::RapidjsonSerializer,
|
38
45
|
Json::YajlSerializer
|
39
46
|
],
|
47
|
+
yaml: [
|
48
|
+
Yaml::PsychSerializer,
|
49
|
+
Yaml::SyckSerializer
|
50
|
+
],
|
40
51
|
toml: [
|
41
52
|
Toml::TomlRbSerializer,
|
42
53
|
Toml::TomlibSerializer
|
data/lib/serialbench/version.rb
CHANGED
data/serialbench.gemspec
CHANGED
@@ -31,21 +31,29 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.require_paths = ['lib']
|
32
32
|
|
33
33
|
# Runtime dependencies
|
34
|
-
spec.add_dependency 'benchmark-ips'
|
35
|
-
spec.add_dependency 'memory_profiler'
|
36
|
-
spec.add_dependency 'thor'
|
37
|
-
|
38
|
-
#
|
39
|
-
spec.add_dependency '
|
40
|
-
|
41
|
-
|
42
|
-
spec.add_dependency '
|
43
|
-
|
44
|
-
|
45
|
-
spec.add_dependency '
|
46
|
-
spec.add_dependency '
|
47
|
-
|
48
|
-
#
|
49
|
-
spec.add_dependency '
|
50
|
-
spec.add_dependency '
|
34
|
+
spec.add_dependency 'benchmark-ips'
|
35
|
+
spec.add_dependency 'memory_profiler'
|
36
|
+
spec.add_dependency 'thor'
|
37
|
+
|
38
|
+
# Reporting dependencies
|
39
|
+
spec.add_dependency 'csv' # Required from Ruby 3.4+
|
40
|
+
|
41
|
+
# XML serializers
|
42
|
+
spec.add_dependency 'rexml' # needed for Ruby 3.4+
|
43
|
+
spec.add_dependency 'libxml-ruby'
|
44
|
+
spec.add_dependency 'nokogiri'
|
45
|
+
spec.add_dependency 'oga'
|
46
|
+
spec.add_dependency 'ox'
|
47
|
+
|
48
|
+
# JSON serializers
|
49
|
+
spec.add_dependency 'oj'
|
50
|
+
spec.add_dependency 'rapidjson'
|
51
|
+
spec.add_dependency 'yajl-ruby'
|
52
|
+
|
53
|
+
# YAML serializers
|
54
|
+
spec.add_dependency 'syck'
|
55
|
+
|
56
|
+
# TOML serializers
|
57
|
+
spec.add_dependency 'tomlib'
|
58
|
+
spec.add_dependency 'toml-rb'
|
51
59
|
end
|
metadata
CHANGED
@@ -1,169 +1,225 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serialbench
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-06-
|
11
|
+
date: 2025-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: memory_profiler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: thor
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: csv
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rexml
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: libxml-ruby
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
|
-
- - "
|
87
|
+
- - ">="
|
60
88
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
89
|
+
version: '0'
|
62
90
|
type: :runtime
|
63
91
|
prerelease: false
|
64
92
|
version_requirements: !ruby/object:Gem::Requirement
|
65
93
|
requirements:
|
66
|
-
- - "
|
94
|
+
- - ">="
|
67
95
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: nokogiri
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
|
-
- - "
|
101
|
+
- - ">="
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
103
|
+
version: '0'
|
76
104
|
type: :runtime
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- - "
|
108
|
+
- - ">="
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: oga
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
|
-
- - "
|
115
|
+
- - ">="
|
88
116
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
117
|
+
version: '0'
|
90
118
|
type: :runtime
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
|
-
- - "
|
122
|
+
- - ">="
|
95
123
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
124
|
+
version: '0'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: ox
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
|
-
- - "
|
129
|
+
- - ">="
|
102
130
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
131
|
+
version: '0'
|
104
132
|
type: :runtime
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
|
-
- - "
|
136
|
+
- - ">="
|
109
137
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
138
|
+
version: '0'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: oj
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
114
142
|
requirements:
|
115
|
-
- - "
|
143
|
+
- - ">="
|
116
144
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
145
|
+
version: '0'
|
118
146
|
type: :runtime
|
119
147
|
prerelease: false
|
120
148
|
version_requirements: !ruby/object:Gem::Requirement
|
121
149
|
requirements:
|
122
|
-
- - "
|
150
|
+
- - ">="
|
123
151
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rapidjson
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
125
167
|
- !ruby/object:Gem::Dependency
|
126
168
|
name: yajl-ruby
|
127
169
|
requirement: !ruby/object:Gem::Requirement
|
128
170
|
requirements:
|
129
|
-
- - "
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: syck
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
130
186
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
187
|
+
version: '0'
|
132
188
|
type: :runtime
|
133
189
|
prerelease: false
|
134
190
|
version_requirements: !ruby/object:Gem::Requirement
|
135
191
|
requirements:
|
136
|
-
- - "
|
192
|
+
- - ">="
|
137
193
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
194
|
+
version: '0'
|
139
195
|
- !ruby/object:Gem::Dependency
|
140
196
|
name: tomlib
|
141
197
|
requirement: !ruby/object:Gem::Requirement
|
142
198
|
requirements:
|
143
|
-
- - "
|
199
|
+
- - ">="
|
144
200
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0
|
201
|
+
version: '0'
|
146
202
|
type: :runtime
|
147
203
|
prerelease: false
|
148
204
|
version_requirements: !ruby/object:Gem::Requirement
|
149
205
|
requirements:
|
150
|
-
- - "
|
206
|
+
- - ">="
|
151
207
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0
|
208
|
+
version: '0'
|
153
209
|
- !ruby/object:Gem::Dependency
|
154
210
|
name: toml-rb
|
155
211
|
requirement: !ruby/object:Gem::Requirement
|
156
212
|
requirements:
|
157
|
-
- - "
|
213
|
+
- - ">="
|
158
214
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
215
|
+
version: '0'
|
160
216
|
type: :runtime
|
161
217
|
prerelease: false
|
162
218
|
version_requirements: !ruby/object:Gem::Requirement
|
163
219
|
requirements:
|
164
|
-
- - "
|
220
|
+
- - ">="
|
165
221
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
222
|
+
version: '0'
|
167
223
|
description: A benchmarking suite for comparing performance of various serialization
|
168
224
|
libraries in Ruby, including XML, JSON, and TOML parsers/generators.
|
169
225
|
email:
|
@@ -175,10 +231,17 @@ extra_rdoc_files: []
|
|
175
231
|
files:
|
176
232
|
- ".github/workflows/benchmark.yml"
|
177
233
|
- ".github/workflows/ci.yml"
|
234
|
+
- ".github/workflows/docker.yml"
|
235
|
+
- ".github/workflows/release.yml"
|
178
236
|
- ".rspec"
|
179
237
|
- Gemfile
|
180
238
|
- README.adoc
|
181
239
|
- Rakefile
|
240
|
+
- config/ci.yml
|
241
|
+
- config/full.yml
|
242
|
+
- docker/Dockerfile.benchmark
|
243
|
+
- docker/README.md
|
244
|
+
- docker/run-benchmarks.sh
|
182
245
|
- exe/serialbench
|
183
246
|
- lib/serialbench.rb
|
184
247
|
- lib/serialbench/benchmark_runner.rb
|
@@ -192,6 +255,7 @@ files:
|
|
192
255
|
- lib/serialbench/serializers/json/base_json_serializer.rb
|
193
256
|
- lib/serialbench/serializers/json/json_serializer.rb
|
194
257
|
- lib/serialbench/serializers/json/oj_serializer.rb
|
258
|
+
- lib/serialbench/serializers/json/rapidjson_serializer.rb
|
195
259
|
- lib/serialbench/serializers/json/yajl_serializer.rb
|
196
260
|
- lib/serialbench/serializers/toml/base_toml_serializer.rb
|
197
261
|
- lib/serialbench/serializers/toml/toml_rb_serializer.rb
|
@@ -208,6 +272,9 @@ files:
|
|
208
272
|
- lib/serialbench/serializers/xml/ox_serializer.rb
|
209
273
|
- lib/serialbench/serializers/xml/rexml_parser.rb
|
210
274
|
- lib/serialbench/serializers/xml/rexml_serializer.rb
|
275
|
+
- lib/serialbench/serializers/yaml/base_yaml_serializer.rb
|
276
|
+
- lib/serialbench/serializers/yaml/psych_serializer.rb
|
277
|
+
- lib/serialbench/serializers/yaml/syck_serializer.rb
|
211
278
|
- lib/serialbench/version.rb
|
212
279
|
- serialbench.gemspec
|
213
280
|
homepage: https://github.com/metanorma/serialbench
|