alba 3.3.0 → 3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cabbda58cec9e9d6d1c96149f6d72d589a653f3db8112781a8a5267e4d3a5c25
4
- data.tar.gz: b670cb0a6d034da44cab1f267a32e44fe2e99defd3d4318cbe03efc6bf02c8f4
3
+ metadata.gz: 38b89f99bfe18cf66179ed46c6fdcb5cb25f3d34b8f709fcb9c9de634f7a129b
4
+ data.tar.gz: b117d86ab11bb7a0b1abe8e2089ae869c8864fd37b066ea544d0ac51ad5082db
5
5
  SHA512:
6
- metadata.gz: 350fd6d656ef37072e22033cb77cf9bb50f613f53392fcb20a0bc229ceeaa4a90f03ad41f75e1176f1adca65bb5a2eeffef13c33e60d288a71600fbaa5fb2572
7
- data.tar.gz: 494d0202f252fd01613ba3621284e8d100d25df5d0e73e8732d4aaddc989ecf05282320c6f24c38548cd7ebc1d45920a44da6abaa09fb9efe7b180898d0ffdf3
6
+ metadata.gz: b62b63a9a7a4b1d85ba180941752a49d4bec97529794f328092b0bb7bc325daa683f5392a703d277f2c4e0b66e6af13b956706ecef6bfc729695aeff0c43e4d0
7
+ data.tar.gz: 3336d2097e5e4c78b690c6b3c178fdcef2db47271e1b929c1aeb246fb832632b69c26923abaf5e5e8df1e165d62495da85adce3e66aa8c404b103e65b1a82df1
data/.rubocop.yml CHANGED
@@ -23,6 +23,10 @@ AllCops:
23
23
  EnabledByDefault: true
24
24
  TargetRubyVersion: 3.0
25
25
 
26
+ Bundler/GemComment:
27
+ Exclude:
28
+ - 'benchmark/**/*'
29
+
26
30
  # Items in Gemfile is dev dependencies and we don't have to specify versions.
27
31
  Bundler/GemVersion:
28
32
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [3.3.1] 2024-10-17
10
+
11
+ ### Fixed
12
+
13
+ - Add ostruct as gemspec dependency to be prepared for ruby 3.3.5. [#386](https://github.com/okuramasafumi/alba/pull/386)
14
+
9
15
  ## [3.3.0] 2024-10-09
10
16
 
11
17
  ### Added
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![Maintainability](https://api.codeclimate.com/v1/badges/fdab4cc0de0b9addcfe8/maintainability)](https://codeclimate.com/github/okuramasafumi/alba/maintainability)
7
7
  ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/okuramasafumi/alba)
8
8
  ![GitHub](https://img.shields.io/github/license/okuramasafumi/alba)
9
- [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](code_of_conduct.md)
9
+ [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md)
10
10
 
11
11
  # Alba
12
12
 
data/alba.gemspec CHANGED
@@ -28,4 +28,6 @@ Gem::Specification.new do |spec|
28
28
  spec.bindir = 'exe'
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ['lib']
31
+
32
+ spec.add_dependency "ostruct", "~> 0.6"
31
33
  end
data/benchmark/Gemfile ADDED
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
+
6
+ gem 'active_model_serializers'
7
+ gem 'activerecord', '~> 7.1'
8
+ gem 'alba', path: '../'
9
+ gem 'benchmark-ips'
10
+ gem 'benchmark-memory'
11
+ gem 'blueprinter'
12
+ gem 'fast_serializer_ruby'
13
+ gem 'jbuilder'
14
+ gem 'jserializer'
15
+ gem 'multi_json'
16
+ gem 'oj'
17
+ gem 'oj_serializers'
18
+ gem 'panko_serializer'
19
+ gem 'pg'
20
+ gem 'primalize'
21
+ gem 'representable'
22
+ gem 'simple_ams'
23
+ gem 'sqlite3', '~> 1.4'
24
+ gem 'turbostreamer'
data/lib/alba/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alba
4
- VERSION = '3.3.0'
4
+ VERSION = '3.3.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alba
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - OKURA Masafumi
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2024-10-09 00:00:00.000000000 Z
11
- dependencies: []
10
+ date: 2024-10-17 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ostruct
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.6'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.6'
12
26
  description: Alba is the fastest JSON serializer for Ruby. It focuses on performance,
13
27
  flexibility and usability.
14
28
  email:
@@ -25,7 +39,6 @@ files:
25
39
  - ".github/workflows/codeql-analysis.yml"
26
40
  - ".github/workflows/lint.yml"
27
41
  - ".github/workflows/main.yml"
28
- - ".github/workflows/perf.yml"
29
42
  - ".gitignore"
30
43
  - ".rubocop.yml"
31
44
  - ".yardopts"
@@ -39,6 +52,7 @@ files:
39
52
  - Rakefile
40
53
  - SECURITY.md
41
54
  - alba.gemspec
55
+ - benchmark/Gemfile
42
56
  - benchmark/README.md
43
57
  - benchmark/collection.rb
44
58
  - benchmark/prep.rb
@@ -68,7 +82,6 @@ files:
68
82
  - logo/alba-card.png
69
83
  - logo/alba-sign.png
70
84
  - logo/alba-typography.png
71
- - script/perf_check.rb
72
85
  homepage: https://github.com/okuramasafumi/alba
73
86
  licenses:
74
87
  - MIT
@@ -1,16 +0,0 @@
1
- name: Performance Check
2
-
3
- on: [pull_request]
4
-
5
- jobs:
6
- build:
7
- runs-on: ubuntu-latest
8
- steps:
9
- - uses: actions/checkout@v4
10
- - name: Set up Ruby
11
- uses: ruby/setup-ruby@v1
12
- with:
13
- ruby-version: 3.3
14
- - name: Run benchmark
15
- run: |
16
- ruby script/perf_check.rb
data/script/perf_check.rb DELETED
@@ -1,107 +0,0 @@
1
- # Benchmark script to run varieties of JSON serializers
2
- # Fetch Alba from local, otherwise fetch latest from RubyGems
3
- # exit(status)
4
-
5
- require_relative '../benchmark/prep'
6
-
7
- # --- Alba serializers ---
8
-
9
- require "alba"
10
-
11
- class AlbaCommentResource
12
- include ::Alba::Resource
13
- attributes :id, :body
14
- end
15
-
16
- class AlbaPostResource
17
- include ::Alba::Resource
18
- attributes :id, :body
19
- attribute :commenter_names do |post|
20
- post.commenters.pluck(:name)
21
- end
22
- many :comments, resource: AlbaCommentResource
23
- end
24
-
25
- # --- Blueprint serializers ---
26
-
27
- require "blueprinter"
28
-
29
- class CommentBlueprint < Blueprinter::Base
30
- fields :id, :body
31
- end
32
-
33
- class PostBlueprint < Blueprinter::Base
34
- fields :id, :body, :commenter_names
35
- association :comments, blueprint: CommentBlueprint
36
-
37
- def commenter_names
38
- commenters.pluck(:name)
39
- end
40
- end
41
-
42
- # --- JBuilder serializers ---
43
-
44
- require "jbuilder"
45
-
46
- class Post
47
- def to_builder
48
- Jbuilder.new do |post|
49
- post.call(self, :id, :body, :commenter_names, :comments)
50
- end
51
- end
52
-
53
- def commenter_names
54
- commenters.pluck(:name)
55
- end
56
- end
57
-
58
- class Comment
59
- def to_builder
60
- Jbuilder.new do |comment|
61
- comment.call(self, :id, :body)
62
- end
63
- end
64
- end
65
-
66
- # --- Test data creation ---
67
-
68
- 100.times do |i|
69
- post = Post.create!(body: "post#{i}")
70
- user1 = User.create!(name: "John#{i}")
71
- user2 = User.create!(name: "Jane#{i}")
72
- 10.times do |n|
73
- post.comments.create!(commenter: user1, body: "Comment1_#{i}_#{n}")
74
- post.comments.create!(commenter: user2, body: "Comment2_#{i}_#{n}")
75
- end
76
- end
77
-
78
- posts = Post.all.to_a
79
-
80
- # --- Store the serializers in procs ---
81
-
82
- alba = Proc.new { AlbaPostResource.new(posts).serialize }
83
- blueprinter = Proc.new { PostBlueprint.render(posts) }
84
- jbuilder = Proc.new do
85
- Jbuilder.new do |json|
86
- json.array!(posts) do |post|
87
- json.post post.to_builder
88
- end
89
- end.target!
90
- end
91
-
92
- # --- Run the benchmarks ---
93
-
94
- require 'benchmark/ips'
95
- result = Benchmark.ips do |x|
96
- x.report(:alba, &alba)
97
- x.report(:blueprinter, &blueprinter)
98
- x.report(:jbuilder, &jbuilder)
99
- end
100
-
101
- entries = result.entries.map {|entry| [entry.label, entry.iterations]}
102
- alba_ips = entries.find {|e| e.first == :alba }.last
103
- blueprinter_ips = entries.find {|e| e.first == :blueprinter }.last
104
- jbuidler_ips = entries.find {|e| e.first == :jbuilder }.last
105
- # Alba should be as fast as jbuilder and faster than blueprinter
106
- alba_is_fast_enough = (alba_ips - jbuidler_ips) > -10.0 && (alba_ips - blueprinter_ips) > 10.0
107
- exit(alba_is_fast_enough)