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.
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Serialbench
4
- VERSION = '0.1.0'
4
+ VERSION = '0.1.1'
5
5
  end
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', '~> 2.10'
35
- spec.add_dependency 'memory_profiler', '~> 1.0'
36
- spec.add_dependency 'thor', '~> 1.2'
37
-
38
- # XML serializers (optional)
39
- spec.add_dependency 'libxml-ruby', '~> 4.0'
40
- spec.add_dependency 'nokogiri', '~> 1.15'
41
- spec.add_dependency 'oga', '~> 3.4'
42
- spec.add_dependency 'ox', '~> 2.14'
43
-
44
- # JSON serializers (optional)
45
- spec.add_dependency 'oj', '~> 3.13'
46
- spec.add_dependency 'yajl-ruby', '~> 1.4'
47
-
48
- # TOML serializers (optional)
49
- spec.add_dependency 'tomlib', '~> 0.6'
50
- spec.add_dependency 'toml-rb', '~> 2.2'
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.0
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-06 00:00:00.000000000 Z
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: '2.10'
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: '2.10'
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: '1.0'
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: '1.0'
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: '1.2'
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: '1.2'
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: '4.0'
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: '4.0'
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: '1.15'
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: '1.15'
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: '3.4'
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: '3.4'
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: '2.14'
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: '2.14'
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: '3.13'
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: '3.13'
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: '1.4'
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: '1.4'
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.6'
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.6'
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: '2.2'
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: '2.2'
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