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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6fef6b415e3f3f99d82d937b412923f77675f2fd2b458c67a79b17325df5c4b
4
- data.tar.gz: a3805612f06f9a04a2c3c452f571798d086113ff601ee550623e975abd66ac15
3
+ metadata.gz: 4cafb8418a35a2c05c91af1a49f3deb2a025b0f1d68ae7ca3ac21c6e0b81b79a
4
+ data.tar.gz: 59f193750cd85c9f6664547f01665866af0f17ee43b371e89cee21d999aadf20
5
5
  SHA512:
6
- metadata.gz: 76457976e3d2bbf665b38922d0e9be0d62bfa7ecb34e7a55c3931eff29260646a92e7b5f6ed04ff53a350cc035c4e794e9a079be39cb95b1f6f261211db94a2e
7
- data.tar.gz: ed1156971e6736ee6b9abab62edb2b6eabb5ad1751a3d6d2aa48b84c444b5720dc21ba713721f82c10a7f0cbf629520ef0bc1e8625702afc683494b4fd940e22
6
+ metadata.gz: 2b04f0da342fc419646fdc20f147f1aa05bd357c1a42cec8802739fc6bd7858b5deabfeef9a1e1542e1edc68bf4a0807acbe7a306da55786b2a861c31046a198
7
+ data.tar.gz: 8f2eb1d10755847d5a2a6d15fd5a67304d671f35805ed1b97123c0a981cf77eabebe2f0a8daeee438d09fd25e0bd7a59ecf34c132892823aff84274a64fac70a
@@ -9,7 +9,7 @@ jobs:
9
9
  fail-fast: false
10
10
  steps:
11
11
  - name: Checkout
12
- uses: actions/checkout@v2
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@v2
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
@@ -5,8 +5,6 @@ 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
9
  gem "activesupport"
12
10
  gem "activerecord"
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.5.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.2.33
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
- klass.instantiate(attributes_from_database)
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: ->(factory, value) do
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
- factory.dump(value.to_h)
161
+ packer.write(value.to_h)
162
162
  end,
163
- unpacker: ->(factory, value) { HashWithIndifferentAccess.new(factory.load(value)) },
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: ->(factory, value) { factory.dump(value.to_a) },
184
- unpacker: ->(factory, value) { factory.load(value).to_set },
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Paquito
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.2"
5
5
  end
data/paquito.gemspec CHANGED
@@ -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.5.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-03-16 00:00:00.000000000 Z
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: '0'
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: '0'
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.2.20
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