serialbench 0.1.3 → 0.3.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.github/scripts/push-to-data.sh +65 -0
  3. data/.github/workflows/benchmark.yml +134 -168
  4. data/.github/workflows/release.yml +68 -13
  5. data/Gemfile +2 -0
  6. data/README.adoc +5 -0
  7. data/config/benchmarks/full-json.yml +25 -0
  8. data/config/benchmarks/full-toml.yml +25 -0
  9. data/config/benchmarks/full-xml.yml +26 -0
  10. data/config/benchmarks/full-yaml.yml +25 -0
  11. data/config/benchmarks/full.yml +9 -4
  12. data/lib/serialbench/benchmark_runner.rb +20 -23
  13. data/lib/serialbench/cli/benchmark_cli.rb +1 -1
  14. data/lib/serialbench/cli/resultset_cli.rb +40 -0
  15. data/lib/serialbench/cli.rb +1 -8
  16. data/lib/serialbench/models/benchmark_result.rb +2 -0
  17. data/lib/serialbench/models/platform.rb +5 -2
  18. data/lib/serialbench/serializers/base_serializer.rb +14 -2
  19. data/lib/serialbench/serializers/json/rapidjson_serializer.rb +0 -4
  20. data/lib/serialbench/serializers/xml/base_xml_serializer.rb +6 -5
  21. data/lib/serialbench/serializers/xml/leptris_serializer.rb +174 -0
  22. data/lib/serialbench/serializers/xml/libxml_serializer.rb +9 -0
  23. data/lib/serialbench/serializers/xml/nokogiri_serializer.rb +4 -0
  24. data/lib/serialbench/serializers/xml/oga_serializer.rb +8 -0
  25. data/lib/serialbench/serializers/yaml/base_yaml_serializer.rb +1 -3
  26. data/lib/serialbench/serializers/yaml/psych_serializer.rb +0 -4
  27. data/lib/serialbench/serializers.rb +3 -1
  28. data/lib/serialbench/site_generator.rb +56 -2
  29. data/lib/serialbench/version.rb +1 -1
  30. data/lib/serialbench.rb +1 -1
  31. metadata +9 -15
  32. data/lib/serialbench/templates/assets/css/benchmark_report.css +0 -535
  33. data/lib/serialbench/templates/assets/css/format_based.css +0 -474
  34. data/lib/serialbench/templates/assets/css/themes.css +0 -589
  35. data/lib/serialbench/templates/assets/js/chart_helpers.js +0 -411
  36. data/lib/serialbench/templates/assets/js/dashboard.js +0 -795
  37. data/lib/serialbench/templates/assets/js/navigation.js +0 -142
  38. data/lib/serialbench/templates/base.liquid +0 -49
  39. data/lib/serialbench/templates/format_based.liquid +0 -507
  40. data/lib/serialbench/templates/partials/chart_section.liquid +0 -4
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Serialbench
4
- VERSION = '0.1.3'
4
+ VERSION = '0.3.1'
5
5
  end
data/lib/serialbench.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'serialbench/version'
4
+ require_relative 'serialbench/site_generator'
4
5
  require_relative 'serialbench/serializers'
5
6
  require_relative 'serialbench/benchmark_runner'
6
7
  require_relative 'serialbench/cli'
7
8
  require_relative 'serialbench/memory_profiler'
8
9
  require_relative 'serialbench/models'
9
- require_relative 'serialbench/site_generator'
10
10
 
11
11
  module Serialbench
12
12
  class Error < StandardError; end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serialbench
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-10-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: benchmark-ips
@@ -271,6 +270,7 @@ executables:
271
270
  extensions: []
272
271
  extra_rdoc_files: []
273
272
  files:
273
+ - ".github/scripts/push-to-data.sh"
274
274
  - ".github/workflows/benchmark.yml"
275
275
  - ".github/workflows/rake.yml"
276
276
  - ".github/workflows/release.yml"
@@ -282,6 +282,10 @@ files:
282
282
  - Gemfile
283
283
  - README.adoc
284
284
  - Rakefile
285
+ - config/benchmarks/full-json.yml
286
+ - config/benchmarks/full-toml.yml
287
+ - config/benchmarks/full-xml.yml
288
+ - config/benchmarks/full-yaml.yml
285
289
  - config/benchmarks/full.yml
286
290
  - config/benchmarks/short.yml
287
291
  - config/environments/asdf-ruby-3.2.yml
@@ -337,6 +341,7 @@ files:
337
341
  - lib/serialbench/serializers/toml/tomlib_serializer.rb
338
342
  - lib/serialbench/serializers/toml/tomlrb_serializer.rb
339
343
  - lib/serialbench/serializers/xml/base_xml_serializer.rb
344
+ - lib/serialbench/serializers/xml/leptris_serializer.rb
340
345
  - lib/serialbench/serializers/xml/libxml_serializer.rb
341
346
  - lib/serialbench/serializers/xml/nokogiri_serializer.rb
342
347
  - lib/serialbench/serializers/xml/oga_serializer.rb
@@ -346,15 +351,6 @@ files:
346
351
  - lib/serialbench/serializers/yaml/psych_serializer.rb
347
352
  - lib/serialbench/serializers/yaml/syck_serializer.rb
348
353
  - lib/serialbench/site_generator.rb
349
- - lib/serialbench/templates/assets/css/benchmark_report.css
350
- - lib/serialbench/templates/assets/css/format_based.css
351
- - lib/serialbench/templates/assets/css/themes.css
352
- - lib/serialbench/templates/assets/js/chart_helpers.js
353
- - lib/serialbench/templates/assets/js/dashboard.js
354
- - lib/serialbench/templates/assets/js/navigation.js
355
- - lib/serialbench/templates/base.liquid
356
- - lib/serialbench/templates/format_based.liquid
357
- - lib/serialbench/templates/partials/chart_section.liquid
358
354
  - lib/serialbench/version.rb
359
355
  - lib/serialbench/yaml_validator.rb
360
356
  - serialbench.gemspec
@@ -365,7 +361,6 @@ metadata:
365
361
  homepage_uri: https://github.com/metanorma/serialbench
366
362
  source_code_uri: https://github.com/metanorma/serialbench
367
363
  bug_tracker_uri: https://github.com/metanorma/serialbench/issues
368
- post_install_message:
369
364
  rdoc_options: []
370
365
  require_paths:
371
366
  - lib
@@ -380,8 +375,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
380
375
  - !ruby/object:Gem::Version
381
376
  version: '0'
382
377
  requirements: []
383
- rubygems_version: 3.5.22
384
- signing_key:
378
+ rubygems_version: 3.6.9
385
379
  specification_version: 4
386
380
  summary: Comprehensive serialization benchmarking tool for Ruby
387
381
  test_files: []
@@ -1,535 +0,0 @@
1
- /* Serialbench Report Styles - Modern Pastel Theme */
2
- :root {
3
- --primary-color: #6b73ff;
4
- --secondary-color: #9c88ff;
5
- --accent-color: #ff8a95;
6
- --success-color: #4ecdc4;
7
- --warning-color: #ffd93d;
8
- --background-color: #fefefe;
9
- --text-color: #2d3748;
10
- --border-color: #e2e8f0;
11
- --light-bg: #f7fafc;
12
- --card-bg: #ffffff;
13
- --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
14
- --gradient-secondary: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);
15
- --gradient-accent: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);
16
- --shadow-soft: 0 4px 20px rgba(0, 0, 0, 0.08);
17
- --shadow-medium: 0 8px 30px rgba(0, 0, 0, 0.12);
18
- --border-radius: 16px;
19
- --border-radius-small: 12px;
20
- }
21
-
22
- * {
23
- margin: 0;
24
- padding: 0;
25
- box-sizing: border-box;
26
- }
27
-
28
- body {
29
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Inter', sans-serif;
30
- line-height: 1.7;
31
- color: var(--text-color);
32
- background: var(--gradient-secondary);
33
- min-height: 100vh;
34
- }
35
-
36
- .container {
37
- max-width: 1200px;
38
- margin: 0 auto;
39
- padding: 20px;
40
- }
41
-
42
- header {
43
- text-align: center;
44
- margin-bottom: 40px;
45
- padding: 50px 30px;
46
- background: var(--gradient-primary);
47
- color: white;
48
- border-radius: var(--border-radius);
49
- box-shadow: var(--shadow-medium);
50
- position: relative;
51
- overflow: hidden;
52
- }
53
-
54
- header::before {
55
- content: '';
56
- position: absolute;
57
- top: 0;
58
- left: 0;
59
- right: 0;
60
- bottom: 0;
61
- background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grain" width="100" height="100" patternUnits="userSpaceOnUse"><circle cx="25" cy="25" r="1" fill="white" opacity="0.1"/><circle cx="75" cy="75" r="1" fill="white" opacity="0.1"/><circle cx="50" cy="10" r="0.5" fill="white" opacity="0.15"/><circle cx="20" cy="80" r="0.5" fill="white" opacity="0.15"/><circle cx="80" cy="30" r="0.5" fill="white" opacity="0.15"/></pattern></defs><rect width="100" height="100" fill="url(%23grain)"/></svg>');
62
- pointer-events: none;
63
- }
64
-
65
- header > * {
66
- position: relative;
67
- z-index: 1;
68
- }
69
-
70
- header h1 {
71
- font-size: 3em;
72
- margin-bottom: 15px;
73
- font-weight: 700;
74
- letter-spacing: -0.02em;
75
- text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
76
- }
77
-
78
- .subtitle {
79
- font-size: 1.3em;
80
- opacity: 0.95;
81
- margin-bottom: 25px;
82
- font-weight: 300;
83
- letter-spacing: 0.01em;
84
- }
85
-
86
- .metadata {
87
- display: flex;
88
- justify-content: center;
89
- gap: 40px;
90
- flex-wrap: wrap;
91
- font-size: 0.95em;
92
- font-weight: 400;
93
- }
94
-
95
- .metadata p {
96
- background: rgba(255, 255, 255, 0.15);
97
- padding: 8px 16px;
98
- border-radius: var(--border-radius-small);
99
- backdrop-filter: blur(10px);
100
- border: 1px solid rgba(255, 255, 255, 0.2);
101
- }
102
-
103
- .benchmark-nav {
104
- display: flex;
105
- justify-content: center;
106
- gap: 10px;
107
- margin-bottom: 40px;
108
- flex-wrap: wrap;
109
- }
110
-
111
- .nav-btn {
112
- padding: 14px 28px;
113
- border: none;
114
- background: var(--card-bg);
115
- color: var(--text-color);
116
- border-radius: 30px;
117
- cursor: pointer;
118
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
119
- font-weight: 600;
120
- font-size: 0.95em;
121
- box-shadow: var(--shadow-soft);
122
- border: 2px solid transparent;
123
- position: relative;
124
- overflow: hidden;
125
- }
126
-
127
- .nav-btn::before {
128
- content: '';
129
- position: absolute;
130
- top: 0;
131
- left: -100%;
132
- width: 100%;
133
- height: 100%;
134
- background: var(--gradient-accent);
135
- transition: left 0.3s ease;
136
- z-index: 0;
137
- }
138
-
139
- .nav-btn:hover {
140
- transform: translateY(-3px);
141
- box-shadow: var(--shadow-medium);
142
- border-color: var(--secondary-color);
143
- }
144
-
145
- .nav-btn:hover::before {
146
- left: 0;
147
- }
148
-
149
- .nav-btn > * {
150
- position: relative;
151
- z-index: 1;
152
- }
153
-
154
- .nav-btn.active {
155
- background: var(--gradient-primary);
156
- color: white;
157
- transform: translateY(-2px);
158
- box-shadow: var(--shadow-medium);
159
- }
160
-
161
- .nav-btn.active::before {
162
- display: none;
163
- }
164
-
165
- .section {
166
- background: var(--card-bg);
167
- border-radius: var(--border-radius);
168
- padding: 40px;
169
- box-shadow: var(--shadow-soft);
170
- border: 1px solid var(--border-color);
171
- backdrop-filter: blur(10px);
172
- }
173
-
174
- .section.hidden {
175
- display: none;
176
- }
177
-
178
- .section.active {
179
- display: block;
180
- }
181
-
182
- /* Hidden utility class for new templates */
183
- .hidden {
184
- display: none !important;
185
- }
186
-
187
- .section h2 {
188
- color: var(--primary-color);
189
- margin-bottom: 35px;
190
- font-size: 2.2em;
191
- font-weight: 700;
192
- position: relative;
193
- padding-bottom: 15px;
194
- }
195
-
196
- .section h2::after {
197
- content: '';
198
- position: absolute;
199
- bottom: 0;
200
- left: 0;
201
- width: 60px;
202
- height: 4px;
203
- background: var(--gradient-primary);
204
- border-radius: 2px;
205
- }
206
-
207
- .section h3 {
208
- color: var(--primary-color);
209
- margin: 35px 0 25px 0;
210
- font-size: 1.6em;
211
- font-weight: 600;
212
- position: relative;
213
- padding-left: 20px;
214
- }
215
-
216
- .section h3::before {
217
- content: '';
218
- position: absolute;
219
- left: 0;
220
- top: 50%;
221
- transform: translateY(-50%);
222
- width: 4px;
223
- height: 24px;
224
- background: var(--gradient-accent);
225
- border-radius: 2px;
226
- }
227
-
228
- .charts-grid {
229
- display: grid;
230
- grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
231
- gap: 30px;
232
- margin-bottom: 40px;
233
- }
234
-
235
- .chart-container {
236
- background: var(--card-bg);
237
- padding: 25px;
238
- border-radius: var(--border-radius-small);
239
- border: 1px solid var(--border-color);
240
- box-shadow: var(--shadow-soft);
241
- transition: all 0.3s ease;
242
- position: relative;
243
- overflow: hidden;
244
- }
245
-
246
- .chart-container::before {
247
- content: '';
248
- position: absolute;
249
- top: 0;
250
- left: 0;
251
- right: 0;
252
- height: 3px;
253
- background: var(--gradient-accent);
254
- }
255
-
256
- .chart-container:hover {
257
- transform: translateY(-2px);
258
- box-shadow: var(--shadow-medium);
259
- }
260
-
261
- .chart-container h4 {
262
- text-align: center;
263
- margin-bottom: 20px;
264
- color: var(--primary-color);
265
- font-size: 1.2em;
266
- font-weight: 600;
267
- letter-spacing: 0.01em;
268
- }
269
-
270
- .summary-grid {
271
- display: grid;
272
- grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
273
- gap: 30px;
274
- }
275
-
276
- .summary-card {
277
- background: var(--card-bg);
278
- padding: 30px;
279
- border-radius: var(--border-radius-small);
280
- border: 1px solid var(--border-color);
281
- box-shadow: var(--shadow-soft);
282
- transition: all 0.3s ease;
283
- position: relative;
284
- overflow: hidden;
285
- }
286
-
287
- .summary-card::before {
288
- content: '';
289
- position: absolute;
290
- top: 0;
291
- left: 0;
292
- right: 0;
293
- height: 3px;
294
- background: var(--gradient-primary);
295
- }
296
-
297
- .summary-card:hover {
298
- transform: translateY(-2px);
299
- box-shadow: var(--shadow-medium);
300
- }
301
-
302
- .summary-card h3 {
303
- color: var(--primary-color);
304
- margin-bottom: 20px;
305
- font-size: 1.4em;
306
- font-weight: 600;
307
- }
308
-
309
- .summary-card ul {
310
- list-style: none;
311
- padding-left: 0;
312
- }
313
-
314
- .summary-card li {
315
- padding: 12px 0;
316
- border-bottom: 1px solid var(--border-color);
317
- transition: all 0.2s ease;
318
- position: relative;
319
- padding-left: 20px;
320
- }
321
-
322
- .summary-card li::before {
323
- content: '▸';
324
- position: absolute;
325
- left: 0;
326
- color: var(--secondary-color);
327
- font-weight: bold;
328
- }
329
-
330
- .summary-card li:hover {
331
- padding-left: 25px;
332
- color: var(--primary-color);
333
- }
334
-
335
- .summary-card li:last-child {
336
- border-bottom: none;
337
- }
338
-
339
- .environments-grid {
340
- display: grid;
341
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
342
- gap: 20px;
343
- }
344
-
345
- .environment-card {
346
- background: var(--card-bg);
347
- padding: 25px;
348
- border-radius: var(--border-radius-small);
349
- border: 1px solid var(--border-color);
350
- box-shadow: var(--shadow-soft);
351
- transition: all 0.3s ease;
352
- position: relative;
353
- overflow: hidden;
354
- }
355
-
356
- .environment-card::before {
357
- content: '';
358
- position: absolute;
359
- top: 0;
360
- left: 0;
361
- right: 0;
362
- height: 3px;
363
- background: var(--gradient-secondary);
364
- }
365
-
366
- .environment-card:hover {
367
- transform: translateY(-2px);
368
- box-shadow: var(--shadow-medium);
369
- }
370
-
371
- .environment-card h3 {
372
- color: var(--primary-color);
373
- margin-bottom: 18px;
374
- font-size: 1.3em;
375
- font-weight: 600;
376
- }
377
-
378
- .environment-card p {
379
- margin-bottom: 8px;
380
- color: #6c757d;
381
- }
382
-
383
- .serializer-versions {
384
- margin-top: 15px;
385
- }
386
-
387
- .serializer-versions h4 {
388
- color: var(--primary-color);
389
- margin-bottom: 12px;
390
- font-size: 1.1em;
391
- font-weight: 600;
392
- }
393
-
394
- .serializer-versions ul {
395
- list-style: none;
396
- padding-left: 0;
397
- }
398
-
399
- .serializer-versions li {
400
- padding: 6px 0;
401
- color: var(--text-color);
402
- font-size: 0.95em;
403
- transition: color 0.2s ease;
404
- }
405
-
406
- .serializer-versions li:hover {
407
- color: var(--primary-color);
408
- }
409
-
410
- @media (max-width: 768px) {
411
- .container {
412
- padding: 15px;
413
- }
414
-
415
- header {
416
- padding: 30px 20px;
417
- margin-bottom: 30px;
418
- }
419
-
420
- header h1 {
421
- font-size: 2.2em;
422
- }
423
-
424
- .metadata {
425
- flex-direction: column;
426
- gap: 15px;
427
- }
428
-
429
- .metadata p {
430
- padding: 10px 20px;
431
- }
432
-
433
- .benchmark-nav {
434
- gap: 8px;
435
- }
436
-
437
- .nav-btn {
438
- padding: 12px 20px;
439
- font-size: 0.9em;
440
- }
441
-
442
- .section {
443
- padding: 25px;
444
- }
445
-
446
- .section h2 {
447
- font-size: 1.8em;
448
- }
449
-
450
- .section h3 {
451
- font-size: 1.4em;
452
- margin: 25px 0 20px 0;
453
- }
454
-
455
- .charts-grid {
456
- grid-template-columns: 1fr;
457
- gap: 20px;
458
- }
459
-
460
- .chart-container {
461
- padding: 20px;
462
- }
463
-
464
- .summary-grid {
465
- grid-template-columns: 1fr;
466
- gap: 20px;
467
- }
468
-
469
- .environments-grid {
470
- grid-template-columns: 1fr;
471
- }
472
- }
473
-
474
- /* Additional modern enhancements */
475
- .charts-grid {
476
- gap: 25px;
477
- }
478
-
479
- .summary-grid {
480
- gap: 25px;
481
- }
482
-
483
- .environments-grid {
484
- gap: 25px;
485
- }
486
-
487
- /* Smooth scrolling */
488
- html {
489
- scroll-behavior: smooth;
490
- }
491
-
492
- /* Focus styles for accessibility */
493
- .nav-btn:focus {
494
- outline: 2px solid var(--primary-color);
495
- outline-offset: 2px;
496
- }
497
-
498
- /* Loading animation for charts */
499
- @keyframes fadeInUp {
500
- from {
501
- opacity: 0;
502
- transform: translateY(20px);
503
- }
504
- to {
505
- opacity: 1;
506
- transform: translateY(0);
507
- }
508
- }
509
-
510
- .chart-container {
511
- animation: fadeInUp 0.6s ease-out;
512
- }
513
-
514
- .summary-card {
515
- animation: fadeInUp 0.6s ease-out;
516
- }
517
-
518
- .environment-card {
519
- animation: fadeInUp 0.6s ease-out;
520
- }
521
-
522
- /* Stagger animation delays */
523
- .chart-container:nth-child(1) { animation-delay: 0.1s; }
524
- .chart-container:nth-child(2) { animation-delay: 0.2s; }
525
- .chart-container:nth-child(3) { animation-delay: 0.3s; }
526
- .chart-container:nth-child(4) { animation-delay: 0.4s; }
527
-
528
- .summary-card:nth-child(1) { animation-delay: 0.1s; }
529
- .summary-card:nth-child(2) { animation-delay: 0.2s; }
530
-
531
- .environment-card:nth-child(1) { animation-delay: 0.1s; }
532
- .environment-card:nth-child(2) { animation-delay: 0.2s; }
533
- .environment-card:nth-child(3) { animation-delay: 0.3s; }
534
- .environment-card:nth-child(4) { animation-delay: 0.4s; }
535
- .environment-card:nth-child(5) { animation-delay: 0.5s; }