paquito 0.5.0 → 0.6.2
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/CHANGELOG.md +42 -0
- data/Gemfile +0 -2
- data/Gemfile.lock +4 -10
- data/lib/paquito/active_record_coder.rb +8 -2
- data/lib/paquito/codec_factory.rb +0 -3
- data/lib/paquito/types.rb +9 -29
- data/lib/paquito/version.rb +1 -1
- data/paquito.gemspec +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cafb8418a35a2c05c91af1a49f3deb2a025b0f1d68ae7ca3ac21c6e0b81b79a
|
4
|
+
data.tar.gz: 59f193750cd85c9f6664547f01665866af0f17ee43b371e89cee21d999aadf20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b04f0da342fc419646fdc20f147f1aa05bd357c1a42cec8802739fc6bd7858b5deabfeef9a1e1542e1edc68bf4a0807acbe7a306da55786b2a861c31046a198
|
7
|
+
data.tar.gz: 8f2eb1d10755847d5a2a6d15fd5a67304d671f35805ed1b97123c0a981cf77eabebe2f0a8daeee438d09fd25e0bd7a59ecf34c132892823aff84274a64fac70a
|
data/.github/workflows/ci.yml
CHANGED
@@ -9,7 +9,7 @@ jobs:
|
|
9
9
|
fail-fast: false
|
10
10
|
steps:
|
11
11
|
- name: Checkout
|
12
|
-
uses: actions/checkout@
|
12
|
+
uses: actions/checkout@v3
|
13
13
|
- name: Set up Ruby
|
14
14
|
uses: ruby/setup-ruby@v1
|
15
15
|
with:
|
@@ -26,7 +26,7 @@ jobs:
|
|
26
26
|
ruby: [ ruby-head, '3.0', '2.7', '2.6' ]
|
27
27
|
steps:
|
28
28
|
- name: Checkout
|
29
|
-
uses: actions/checkout@
|
29
|
+
uses: actions/checkout@v3
|
30
30
|
- name: Set up Ruby
|
31
31
|
uses: ruby/setup-ruby@v1
|
32
32
|
with:
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Unreleased
|
2
|
+
|
3
|
+
# 0.6.2
|
4
|
+
|
5
|
+
* Make ActiveRecordCoder handle to read payloads that will be generated by Paquito 0.7.0 (#12).
|
6
|
+
DO NOT upgrade to Paquito 0.7.0+ without first fully rolling out Paquito 0.6.2.
|
7
|
+
|
8
|
+
# 0.6.1
|
9
|
+
|
10
|
+
* No data
|
11
|
+
|
12
|
+
# 0.6.0
|
13
|
+
|
14
|
+
* No data
|
15
|
+
|
16
|
+
# 0.5.0
|
17
|
+
|
18
|
+
* No data
|
19
|
+
|
20
|
+
# 0.4.0
|
21
|
+
|
22
|
+
* No data
|
23
|
+
|
24
|
+
# 0.3.1
|
25
|
+
|
26
|
+
* No data
|
27
|
+
|
28
|
+
# 0.3.0
|
29
|
+
|
30
|
+
* No data
|
31
|
+
|
32
|
+
# 0.2.1
|
33
|
+
|
34
|
+
* No data
|
35
|
+
|
36
|
+
# 0.2.0
|
37
|
+
|
38
|
+
* No data
|
39
|
+
|
40
|
+
# 0.1.0
|
41
|
+
|
42
|
+
* No data
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,8 @@
|
|
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.2)
|
5
|
+
msgpack (>= 1.5.2)
|
12
6
|
|
13
7
|
GEM
|
14
8
|
remote: https://rubygems.org/
|
@@ -31,6 +25,7 @@ GEM
|
|
31
25
|
i18n (1.10.0)
|
32
26
|
concurrent-ruby (~> 1.0)
|
33
27
|
minitest (5.15.0)
|
28
|
+
msgpack (1.5.4)
|
34
29
|
parallel (1.21.0)
|
35
30
|
parser (3.1.1.0)
|
36
31
|
ast (~> 2.4.1)
|
@@ -70,7 +65,6 @@ DEPENDENCIES
|
|
70
65
|
benchmark-ips
|
71
66
|
byebug
|
72
67
|
minitest (~> 5.0)
|
73
|
-
msgpack!
|
74
68
|
paquito!
|
75
69
|
rake (~> 13.0)
|
76
70
|
rubocop
|
@@ -79,4 +73,4 @@ DEPENDENCIES
|
|
79
73
|
sqlite3
|
80
74
|
|
81
75
|
BUNDLED WITH
|
82
|
-
2.
|
76
|
+
2.3.8
|
@@ -4,6 +4,8 @@ require "paquito/errors"
|
|
4
4
|
|
5
5
|
module Paquito
|
6
6
|
class ActiveRecordCoder
|
7
|
+
EMPTY_HASH = {}.freeze
|
8
|
+
|
7
9
|
class << self
|
8
10
|
def dump(record)
|
9
11
|
instances = InstanceTracker.new
|
@@ -94,13 +96,17 @@ module Paquito
|
|
94
96
|
attributes
|
95
97
|
end
|
96
98
|
|
97
|
-
def deserialize_record(class_name, attributes_from_database)
|
99
|
+
def deserialize_record(class_name, attributes_from_database, new_record = false)
|
98
100
|
begin
|
99
101
|
klass = Object.const_get(class_name)
|
100
102
|
rescue NameError
|
101
103
|
raise ClassMissingError, "undefined class: #{class_name}"
|
102
104
|
end
|
103
|
-
|
105
|
+
|
106
|
+
# Ideally we'd like to call `klass.instantiate`, however it doesn't allow to pass
|
107
|
+
# wether the record was persisted or not.
|
108
|
+
attributes = klass.attributes_builder.build_from_database(attributes_from_database, EMPTY_HASH)
|
109
|
+
klass.allocate.init_with_attributes(attributes, new_record)
|
104
110
|
end
|
105
111
|
end
|
106
112
|
|
@@ -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/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
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.2
|
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-08-01 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
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- ".github/workflows/ci.yml"
|
35
35
|
- ".gitignore"
|
36
36
|
- ".rubocop.yml"
|
37
|
+
- CHANGELOG.md
|
37
38
|
- Gemfile
|
38
39
|
- Gemfile.lock
|
39
40
|
- LICENSE.txt
|
@@ -85,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
86
|
- !ruby/object:Gem::Version
|
86
87
|
version: '0'
|
87
88
|
requirements: []
|
88
|
-
rubygems_version: 3.
|
89
|
+
rubygems_version: 3.3.3
|
89
90
|
signing_key:
|
90
91
|
specification_version: 4
|
91
92
|
summary: Framework for defining efficient and extendable serializers
|