paquito 0.4.0 → 0.6.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/ci.yml +2 -2
- data/.rubocop.yml +1 -1
- data/Gemfile +2 -4
- data/Gemfile.lock +14 -18
- data/Rakefile +2 -1
- data/dev.yml +1 -1
- data/lib/paquito/active_record_coder.rb +5 -4
- data/lib/paquito/codec_factory.rb +0 -3
- data/lib/paquito/safe_yaml.rb +2 -1
- data/lib/paquito/types.rb +9 -29
- data/lib/paquito/version.rb +1 -1
- data/paquito.gemspec +2 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4a21000dd182ebc6975d8b6cbedf9702bb8e8b1590e5be3c6a048e2f827c54c
|
4
|
+
data.tar.gz: 6023594f29fbabdec9842ca1ea0d3a75c2f22a9bd519cbdab153dff75781a8cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75ca51f0d7da3dc94b3b26454eeb7960af10102963f9d8d9dca8f2d1b260821e57f831ab7c95cb290fbf842f4473e8aa5d0d2fb2a150dc09d6e847ef4b45d1ba
|
7
|
+
data.tar.gz: 1d4b953529569f25bd8d345a0a968ed931ad23ea397f96b6e0e5ba10376c3a5e6cb2078230355fee37c65c50f829d4b32136ba2a8a9ccc4d616076c84e6a3c97
|
data/.github/workflows/ci.yml
CHANGED
@@ -13,7 +13,7 @@ jobs:
|
|
13
13
|
- name: Set up Ruby
|
14
14
|
uses: ruby/setup-ruby@v1
|
15
15
|
with:
|
16
|
-
ruby-version: '2.
|
16
|
+
ruby-version: '2.6'
|
17
17
|
bundler-cache: true
|
18
18
|
- name: Run test
|
19
19
|
run: bundle exec rubocop
|
@@ -23,7 +23,7 @@ jobs:
|
|
23
23
|
strategy:
|
24
24
|
fail-fast: false
|
25
25
|
matrix:
|
26
|
-
ruby: [ ruby-head, '3.0', '2.7' ]
|
26
|
+
ruby: [ ruby-head, '3.0', '2.7', '2.6' ]
|
27
27
|
steps:
|
28
28
|
- name: Checkout
|
29
29
|
uses: actions/checkout@v2
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -5,11 +5,9 @@ source "https://rubygems.org"
|
|
5
5
|
# Specify your gem's dependencies in paquito.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
gem "msgpack", github: "msgpack/msgpack-ruby"
|
9
|
-
|
10
8
|
gem "rake", "~> 13.0"
|
11
|
-
gem "activesupport"
|
12
|
-
gem "activerecord"
|
9
|
+
gem "activesupport"
|
10
|
+
gem "activerecord"
|
13
11
|
gem "sqlite3"
|
14
12
|
gem "benchmark-ips"
|
15
13
|
|
data/Gemfile.lock
CHANGED
@@ -1,28 +1,23 @@
|
|
1
|
-
GIT
|
2
|
-
remote: https://github.com/msgpack/msgpack-ruby.git
|
3
|
-
revision: b69e6d6965ef46890885ddf73f02b820f3185d80
|
4
|
-
specs:
|
5
|
-
msgpack (1.4.5)
|
6
|
-
|
7
1
|
PATH
|
8
2
|
remote: .
|
9
3
|
specs:
|
10
|
-
paquito (0.
|
11
|
-
msgpack
|
4
|
+
paquito (0.6.1)
|
5
|
+
msgpack (>= 1.5.2)
|
12
6
|
|
13
7
|
GEM
|
14
8
|
remote: https://rubygems.org/
|
15
9
|
specs:
|
16
|
-
activemodel (
|
17
|
-
activesupport (=
|
18
|
-
activerecord (
|
19
|
-
activemodel (=
|
20
|
-
activesupport (=
|
21
|
-
activesupport (
|
10
|
+
activemodel (6.1.5)
|
11
|
+
activesupport (= 6.1.5)
|
12
|
+
activerecord (6.1.5)
|
13
|
+
activemodel (= 6.1.5)
|
14
|
+
activesupport (= 6.1.5)
|
15
|
+
activesupport (6.1.5)
|
22
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
23
17
|
i18n (>= 1.6, < 2)
|
24
18
|
minitest (>= 5.1)
|
25
19
|
tzinfo (~> 2.0)
|
20
|
+
zeitwerk (~> 2.3)
|
26
21
|
ast (2.4.2)
|
27
22
|
benchmark-ips (2.10.0)
|
28
23
|
byebug (11.1.3)
|
@@ -30,6 +25,7 @@ GEM
|
|
30
25
|
i18n (1.10.0)
|
31
26
|
concurrent-ruby (~> 1.0)
|
32
27
|
minitest (5.15.0)
|
28
|
+
msgpack (1.5.2)
|
33
29
|
parallel (1.21.0)
|
34
30
|
parser (3.1.1.0)
|
35
31
|
ast (~> 2.4.1)
|
@@ -56,6 +52,7 @@ GEM
|
|
56
52
|
tzinfo (2.0.4)
|
57
53
|
concurrent-ruby (~> 1.0)
|
58
54
|
unicode-display_width (2.1.0)
|
55
|
+
zeitwerk (2.5.4)
|
59
56
|
|
60
57
|
PLATFORMS
|
61
58
|
ruby
|
@@ -63,12 +60,11 @@ PLATFORMS
|
|
63
60
|
x86_64-linux
|
64
61
|
|
65
62
|
DEPENDENCIES
|
66
|
-
activerecord
|
67
|
-
activesupport
|
63
|
+
activerecord
|
64
|
+
activesupport
|
68
65
|
benchmark-ips
|
69
66
|
byebug
|
70
67
|
minitest (~> 5.0)
|
71
|
-
msgpack!
|
72
68
|
paquito!
|
73
69
|
rake (~> 13.0)
|
74
70
|
rubocop
|
@@ -77,4 +73,4 @@ DEPENDENCIES
|
|
77
73
|
sqlite3
|
78
74
|
|
79
75
|
BUNDLED WITH
|
80
|
-
2.
|
76
|
+
2.3.8
|
data/Rakefile
CHANGED
@@ -3,7 +3,8 @@
|
|
3
3
|
require "bundler/gem_tasks"
|
4
4
|
require "rake/testtask"
|
5
5
|
|
6
|
-
suites = [:vanilla, :activesupport
|
6
|
+
suites = [:vanilla, :activesupport]
|
7
|
+
suites << :activerecord if RUBY_VERSION >= "2.7"
|
7
8
|
namespace :test do
|
8
9
|
suites.each do |suite|
|
9
10
|
Rake::TestTask.new(suite) do |t|
|
data/dev.yml
CHANGED
@@ -119,13 +119,14 @@ module Paquito
|
|
119
119
|
@ids = {}.compare_by_identity
|
120
120
|
end
|
121
121
|
|
122
|
-
def map(
|
123
|
-
@instances.map(
|
122
|
+
def map(&block)
|
123
|
+
@instances.map(&block)
|
124
124
|
end
|
125
125
|
|
126
|
-
def fetch(
|
127
|
-
@instances.fetch(
|
126
|
+
def fetch(*args, &block)
|
127
|
+
@instances.fetch(*args, &block)
|
128
128
|
end
|
129
|
+
ruby2_keywords :fetch if respond_to?(:ruby2_keywords, true)
|
129
130
|
|
130
131
|
def push(instance)
|
131
132
|
id = @ids[instance] = @instances.size
|
@@ -16,9 +16,6 @@ module Paquito
|
|
16
16
|
Types.register_serializable_type(factory) if serializable_type
|
17
17
|
|
18
18
|
if pool && pool > 0 && factory.respond_to?(:pool)
|
19
|
-
if serializable_type || types.any? { |t| Types.recursive?(t) }
|
20
|
-
pool *= 2
|
21
|
-
end
|
22
19
|
factory = factory.freeze.pool(pool, freeze: freeze)
|
23
20
|
freeze = false
|
24
21
|
end
|
data/lib/paquito/safe_yaml.rb
CHANGED
@@ -53,7 +53,7 @@ module Paquito
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
def initialize(
|
56
|
+
def initialize(*)
|
57
57
|
super
|
58
58
|
@permitted_classes = Set.new(@options[:permitted_classes])
|
59
59
|
@dispatch_cache = DispatchCache.new(self, @dispatch_cache)
|
@@ -65,6 +65,7 @@ module Paquito
|
|
65
65
|
h[klass] = true
|
66
66
|
end.compare_by_identity
|
67
67
|
end
|
68
|
+
ruby2_keywords :initialize if respond_to?(:ruby2_keywords, true)
|
68
69
|
|
69
70
|
def dump_coder(target)
|
70
71
|
return unless permitted_class?(target.class)
|
data/lib/paquito/types.rb
CHANGED
@@ -75,8 +75,8 @@ module Paquito
|
|
75
75
|
TYPES = {
|
76
76
|
"Symbol" => {
|
77
77
|
code: 0,
|
78
|
-
packer: Symbol.method_defined?(:name) ? :name : :to_s,
|
79
|
-
unpacker: :to_sym,
|
78
|
+
packer: Symbol.method_defined?(:name) ? :name.to_proc : :to_s.to_proc,
|
79
|
+
unpacker: :to_sym.to_proc,
|
80
80
|
optimized_symbols_parsing: true,
|
81
81
|
}.freeze,
|
82
82
|
"Time" => {
|
@@ -153,14 +153,15 @@ module Paquito
|
|
153
153
|
}.freeze,
|
154
154
|
"ActiveSupport::HashWithIndifferentAccess" => {
|
155
155
|
code: 7,
|
156
|
-
packer: ->(
|
156
|
+
packer: ->(value, packer) do
|
157
157
|
unless value.instance_of?(ActiveSupport::HashWithIndifferentAccess)
|
158
158
|
raise PackError.new("cannot pack HashWithIndifferentClass subclass", value)
|
159
159
|
end
|
160
160
|
|
161
|
-
|
161
|
+
packer.write(value.to_h)
|
162
162
|
end,
|
163
|
-
unpacker: ->(
|
163
|
+
unpacker: ->(unpacker) { HashWithIndifferentAccess.new(unpacker.read) },
|
164
|
+
recursive: true,
|
164
165
|
},
|
165
166
|
"ActiveSupport::TimeWithZone" => {
|
166
167
|
code: 8,
|
@@ -180,8 +181,9 @@ module Paquito
|
|
180
181
|
},
|
181
182
|
"Set" => {
|
182
183
|
code: 9,
|
183
|
-
packer: ->(
|
184
|
-
unpacker: ->(
|
184
|
+
packer: ->(value, packer) { packer.write(value.to_a) },
|
185
|
+
unpacker: ->(unpacker) { unpacker.read.to_set },
|
186
|
+
recursive: true,
|
185
187
|
},
|
186
188
|
# Integer => { code: 10 }, reserved for oversized Integer
|
187
189
|
# Object => { code: 127 }, reserved for serializable Object type
|
@@ -212,10 +214,6 @@ module Paquito
|
|
212
214
|
end
|
213
215
|
|
214
216
|
type_attributes = TYPES.fetch(name)
|
215
|
-
type_attributes = type_attributes.merge(
|
216
|
-
packer: curry_callback(type_attributes.fetch(:packer), factory),
|
217
|
-
unpacker: curry_callback(type_attributes.fetch(:unpacker), factory),
|
218
|
-
)
|
219
217
|
factory.register_type(
|
220
218
|
type_attributes.fetch(:code),
|
221
219
|
type,
|
@@ -224,11 +222,6 @@ module Paquito
|
|
224
222
|
end
|
225
223
|
end
|
226
224
|
|
227
|
-
def recursive?(type)
|
228
|
-
type_attributes = TYPES.fetch(type.name)
|
229
|
-
recursive_callback?(type_attributes[:packer]) || recursive_callback?(type_attributes[:unpacker])
|
230
|
-
end
|
231
|
-
|
232
225
|
def register_serializable_type(factory)
|
233
226
|
factory.register_type(
|
234
227
|
0x7f,
|
@@ -256,19 +249,6 @@ module Paquito
|
|
256
249
|
def define_custom_type(klass, packer: nil, unpacker:)
|
257
250
|
CustomTypesRegistry.register(klass, packer: packer, unpacker: unpacker)
|
258
251
|
end
|
259
|
-
|
260
|
-
private
|
261
|
-
|
262
|
-
def recursive_callback?(callback)
|
263
|
-
callback.respond_to?(:arity) && callback.arity != 1
|
264
|
-
end
|
265
|
-
|
266
|
-
def curry_callback(callback, factory)
|
267
|
-
return callback.to_proc if callback.is_a?(Symbol)
|
268
|
-
return callback if callback.arity == 1
|
269
|
-
|
270
|
-
callback.curry.call(factory)
|
271
|
-
end
|
272
252
|
end
|
273
253
|
end
|
274
254
|
end
|
data/lib/paquito/version.rb
CHANGED
data/paquito.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = "Framework for defining efficient and extendable serializers"
|
13
13
|
spec.homepage = "https://github.com/Shopify/paquito"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = ">= 2.
|
15
|
+
spec.required_ruby_version = ">= 2.6.0"
|
16
16
|
|
17
17
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
18
18
|
|
@@ -28,5 +28,5 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
29
29
|
spec.require_paths = ["lib"]
|
30
30
|
|
31
|
-
spec.add_dependency("msgpack")
|
31
|
+
spec.add_dependency("msgpack", ">= 1.5.2")
|
32
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paquito
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.5.2
|
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: 1.5.2
|
27
27
|
description: Framework for defining efficient and extendable serializers
|
28
28
|
email:
|
29
29
|
- jean.boussier@gmail.com
|
@@ -78,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
79
79
|
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: 2.
|
81
|
+
version: 2.6.0
|
82
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
84
|
- - ">="
|