paquito 0.3.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d00c743e791d4a17131842b2f515d58cff0e62190c8509666aff3d0d34e2d005
4
- data.tar.gz: b6760e6c8ceefa78e77f6b7c1a5668d40930c0d80fb8f841ea0a3deda82a77dd
3
+ metadata.gz: 7827d51263d503a0798dda51d14f0233f7a310e37f247b14a5ea13454403b3a5
4
+ data.tar.gz: 63381b29bd17cbc2473036ef0f6ca8eee60f099e7d2f70202a6922ba6721313a
5
5
  SHA512:
6
- metadata.gz: 189792644f661fd6a5455921928ff94f911d972c971590ff6754bee2f0e27c3386199d0444286e279d6b658d755c3ad0e9deff2e6338620c5a1b81efe542365a
7
- data.tar.gz: c4f9cb2d28a8598627497bf3e7f8c1de1a29e2fa0a37e54e06310af438fdd5f34b6c77c533a90b121559d5e77353b5fe316a8099b4d1f8b588873363edb43c3a
6
+ metadata.gz: 75dba9ef5f38a56e765736b63549168e049d695615e6bc6bc545bb05deb7104b452094556cc3899d8fa0bf677ae7deef944f92f71c816af5f390a0e03c0f111b
7
+ data.tar.gz: 56d37636f06418d32263a803b84fb1bf15cd4fe07b6b7fd7bf28252e162aabfdedc8cfb9d2ac5e2c03231cd0b4b2bb7cd3b879f43ced04b0af753923cbca5bff
@@ -3,12 +3,27 @@ name: CI
3
3
  on: [push, pull_request]
4
4
 
5
5
  jobs:
6
+ rubocop:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ fail-fast: false
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v2
13
+ - name: Set up Ruby
14
+ uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: '2.6'
17
+ bundler-cache: true
18
+ - name: Run test
19
+ run: bundle exec rubocop
20
+
6
21
  rubies:
7
22
  runs-on: ubuntu-latest
8
23
  strategy:
9
24
  fail-fast: false
10
25
  matrix:
11
- ruby: [ ruby-head, '3.0', '2.7' ]
26
+ ruby: [ ruby-head, '3.0', '2.7', '2.6' ]
12
27
  steps:
13
28
  - name: Checkout
14
29
  uses: actions/checkout@v2
data/.rubocop.yml CHANGED
@@ -2,4 +2,4 @@ inherit_gem:
2
2
  rubocop-shopify: rubocop.yml
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.7
5
+ TargetRubyVersion: 2.6
data/Gemfile CHANGED
@@ -6,9 +6,10 @@ source "https://rubygems.org"
6
6
  gemspec
7
7
 
8
8
  gem "rake", "~> 13.0"
9
- gem "activesupport", ">= 7.0.0"
10
- gem "activerecord", ">= 7.0.0"
9
+ gem "activesupport"
10
+ gem "activerecord"
11
11
  gem "sqlite3"
12
+ gem "benchmark-ips"
12
13
 
13
14
  gem "minitest", "~> 5.0"
14
15
 
data/Gemfile.lock CHANGED
@@ -1,55 +1,58 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- paquito (0.3.1)
5
- msgpack
4
+ paquito (0.6.0)
5
+ msgpack (>= 1.5.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (7.0.1)
11
- activesupport (= 7.0.1)
12
- activerecord (7.0.1)
13
- activemodel (= 7.0.1)
14
- activesupport (= 7.0.1)
15
- activesupport (7.0.1)
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)
16
16
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
17
  i18n (>= 1.6, < 2)
18
18
  minitest (>= 5.1)
19
19
  tzinfo (~> 2.0)
20
+ zeitwerk (~> 2.3)
20
21
  ast (2.4.2)
22
+ benchmark-ips (2.10.0)
21
23
  byebug (11.1.3)
22
24
  concurrent-ruby (1.1.9)
23
- i18n (1.9.1)
25
+ i18n (1.10.0)
24
26
  concurrent-ruby (~> 1.0)
25
- minitest (5.14.4)
26
- msgpack (1.4.4)
27
+ minitest (5.15.0)
28
+ msgpack (1.5.1)
27
29
  parallel (1.21.0)
28
- parser (3.0.2.0)
30
+ parser (3.1.1.0)
29
31
  ast (~> 2.4.1)
30
- rainbow (3.0.0)
32
+ rainbow (3.1.1)
31
33
  rake (13.0.6)
32
- regexp_parser (2.1.1)
34
+ regexp_parser (2.2.1)
33
35
  rexml (3.2.5)
34
- rubocop (1.22.1)
36
+ rubocop (1.25.1)
35
37
  parallel (~> 1.10)
36
- parser (>= 3.0.0.0)
38
+ parser (>= 3.1.0.0)
37
39
  rainbow (>= 2.2.2, < 4.0)
38
40
  regexp_parser (>= 1.8, < 3.0)
39
41
  rexml
40
- rubocop-ast (>= 1.12.0, < 2.0)
42
+ rubocop-ast (>= 1.15.1, < 2.0)
41
43
  ruby-progressbar (~> 1.7)
42
44
  unicode-display_width (>= 1.4.0, < 3.0)
43
- rubocop-ast (1.12.0)
44
- parser (>= 3.0.1.1)
45
- rubocop-shopify (2.3.0)
46
- rubocop (~> 1.22)
45
+ rubocop-ast (1.16.0)
46
+ parser (>= 3.1.1.0)
47
+ rubocop-shopify (2.5.0)
48
+ rubocop (~> 1.25)
47
49
  ruby-progressbar (1.11.0)
48
- sorbet-runtime (0.5.9209)
50
+ sorbet-runtime (0.5.9742)
49
51
  sqlite3 (1.4.2)
50
52
  tzinfo (2.0.4)
51
53
  concurrent-ruby (~> 1.0)
52
54
  unicode-display_width (2.1.0)
55
+ zeitwerk (2.5.4)
53
56
 
54
57
  PLATFORMS
55
58
  ruby
@@ -57,8 +60,9 @@ PLATFORMS
57
60
  x86_64-linux
58
61
 
59
62
  DEPENDENCIES
60
- activerecord (>= 7.0.0)
61
- activesupport (>= 7.0.0)
63
+ activerecord
64
+ activesupport
65
+ benchmark-ips
62
66
  byebug
63
67
  minitest (~> 5.0)
64
68
  paquito!
@@ -69,4 +73,4 @@ DEPENDENCIES
69
73
  sqlite3
70
74
 
71
75
  BUNDLED WITH
72
- 2.2.33
76
+ 2.3.11
data/README.md CHANGED
@@ -22,7 +22,7 @@ Or install it yourself as:
22
22
 
23
23
  ### `chain`
24
24
 
25
- `Paquito::CoderChain` allows to combine two or more serializers into one.
25
+ `Paquito::CoderChain` combines two or more serializers into one.
26
26
 
27
27
  Example:
28
28
 
@@ -34,7 +34,7 @@ compressed_yaml_coder.load(payload) # => { foo: 42 }
34
34
 
35
35
  ### `ConditionalCompressor`
36
36
 
37
- `Paquito::ConditionalCompressor` compress payloads if they are over a defined size.
37
+ `Paquito::ConditionalCompressor` compresses payloads if they are over a defined size.
38
38
 
39
39
  Example:
40
40
  ```ruby
@@ -45,8 +45,8 @@ coder.dump("foo" * 500) # => "\x01<compressed-data....>"
45
45
 
46
46
  ### `SingleBytePrefixVersion`
47
47
 
48
- `Paquito::SingleBytePrefixVersion` prepends a version prefix to the payloads, which then allow to seemlessly transition from
49
- different serialization methods.
48
+ `Paquito::SingleBytePrefixVersion` prepends a version prefix to the payloads, which allows you to seamlessly transition
49
+ between different serialization methods.
50
50
 
51
51
  The first argument is the current version used for newly generated payloads.
52
52
 
@@ -64,9 +64,9 @@ coder.load("\x00---\n:foo: 42") # => { foo: 42 }
64
64
 
65
65
  ### `CommentPrefixVersion`
66
66
 
67
- Similar to the single byte prefix, but meant to be human readable and to allow for migrating unversionned payloads.
67
+ Similar to the single byte prefix, but meant to be human readable and to allow for migrating unversioned payloads.
68
68
 
69
- Payload without a version prefix are assumed to be version `0`.
69
+ Payloads without a version prefix are assumed to be version `0`.
70
70
 
71
71
  The first argument is the current version used for newly generated payloads.
72
72
 
@@ -84,7 +84,7 @@ coder.dump([1]) # => "#☠1☢\n[1]"
84
84
 
85
85
  ### `allow_nil`
86
86
 
87
- In some situation where you'd rather not serialize `nil`, you can use the `Paquito.allow_nil` shorthand:
87
+ In some situations where you'd rather not serialize `nil`, you can use the `Paquito.allow_nil` shorthand:
88
88
 
89
89
  ```ruby
90
90
  coder = Paquito.allow_nil(Marshal)
@@ -95,7 +95,7 @@ coder.load(nil) # => nil
95
95
  ### `TranslateErrors`
96
96
 
97
97
  If you do need to handle serialization or deserialization errors, for instance to fallback to acting like a cache miss,
98
- `Paquito::TranslateErrors` translate all underlying exceptions into `Paquito::Error` descendants.
98
+ `Paquito::TranslateErrors` translates all underlying exceptions into `Paquito::Error` descendants.
99
99
 
100
100
  Example:
101
101
 
@@ -117,7 +117,8 @@ coder.load(coder.dump(%i(foo bar).to_set)) # => #<Set: {:foo, :bar}>
117
117
 
118
118
  ### `TypedStruct`
119
119
 
120
- `Paquito::TypedStruct` is a opt-in Sorbet runtime plugin that allows `T::Struct` classes to be serializable. You need to explicitly include the module in the `T::Struct` classes that you will be serializing.
120
+ `Paquito::TypedStruct` is a opt-in Sorbet runtime plugin that allows `T::Struct` classes to be serializable. You need
121
+ to explicitly include the module in the `T::Struct` classes that you will be serializing.
121
122
 
122
123
  Example
123
124
 
@@ -137,12 +138,12 @@ MyStruct.from_pack([26450, "foo", 1]) # => <MyStruct bar=1, foo="foo">
137
138
 
138
139
  ## Rails utilities
139
140
 
140
- `paquito` doesn't not depend on `rails` nor any of its components, however it does provide some optional utilities for it.
141
+ `paquito` doesn't depend on `rails` or any of its components, however it does provide some optional utilities.
141
142
 
142
143
  ### `CacheEntryCoder`
143
144
 
144
- `Paquito::CacheEntryCoder` turns an `ActiveSupport::Cache::Entry` instance into a simple `Array` instance. This allows to
145
- implement custom coders for `ActiveSupport::Cache`.
145
+ `Paquito::CacheEntryCoder` turns an `ActiveSupport::Cache::Entry` instance into a simple `Array` instance. This allows
146
+ you to implement custom coders for `ActiveSupport::Cache`.
146
147
 
147
148
  Example:
148
149
 
@@ -152,7 +153,7 @@ ActiveSupport::Cache::FileStore.new("tmp/cache", coder: Paquito.chain(Paquito::C
152
153
 
153
154
  ### `SerializedColumn`
154
155
 
155
- `Paquito::SerializedColumn` allows to decorate any encoder to behave like Rails's builtin `YAMLColumn`
156
+ `Paquito::SerializedColumn` allows you to decorate any encoder to behave like Rails's builtin `YAMLColumn`
156
157
 
157
158
  Example:
158
159
 
data/Rakefile CHANGED
@@ -3,7 +3,8 @@
3
3
  require "bundler/gem_tasks"
4
4
  require "rake/testtask"
5
5
 
6
- suites = [:vanilla, :activesupport, :activerecord]
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|
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "paquito"
6
+ require "benchmark/ips"
7
+
8
+ BASELINE = Paquito::CodecFactory.build([Symbol], pool: false)
9
+ POOLED = Paquito::CodecFactory.build([Symbol], pool: 1)
10
+
11
+ PAYLOAD = BASELINE.dump(:foo)
12
+ MARSHAL_PAYLOAD = Marshal.dump(:foo)
13
+
14
+ Benchmark.ips do |x|
15
+ x.report("marshal") { Marshal.load(MARSHAL_PAYLOAD) }
16
+ x.report("msgpack") { BASELINE.load(PAYLOAD) }
17
+ x.report("pooled") { POOLED.load(PAYLOAD) }
18
+ x.compare!(order: :baseline)
19
+ end
data/dev.yml CHANGED
@@ -2,7 +2,7 @@ name: paquito
2
2
 
3
3
  up:
4
4
  - ruby:
5
- version: 2.7.4
5
+ version: 2.6.9
6
6
  - bundler
7
7
 
8
8
  commands:
@@ -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
@@ -8,11 +8,13 @@ module Paquito
8
8
 
9
9
  def dump(object)
10
10
  return nil if object.nil?
11
+
11
12
  @coder.dump(object)
12
13
  end
13
14
 
14
15
  def load(payload)
15
16
  return nil if payload.nil?
17
+
16
18
  @coder.load(payload)
17
19
  end
18
20
  end
@@ -5,15 +5,21 @@ require "paquito/coder_chain"
5
5
 
6
6
  module Paquito
7
7
  class CodecFactory
8
- def self.build(types, freeze: false, serializable_type: false)
9
- factory =
10
- if types.empty? && !serializable_type
11
- MessagePack
12
- else
13
- MessagePack::Factory.new
14
- end
8
+ def self.build(types, freeze: false, serializable_type: false, pool: 1)
9
+ factory = if types.empty? && !serializable_type
10
+ MessagePack::DefaultFactory
11
+ else
12
+ MessagePack::Factory.new
13
+ end
14
+
15
15
  Types.register(factory, types) unless types.empty?
16
16
  Types.register_serializable_type(factory) if serializable_type
17
+
18
+ if pool && pool > 0 && factory.respond_to?(:pool)
19
+ factory = factory.freeze.pool(pool, freeze: freeze)
20
+ freeze = false
21
+ end
22
+
17
23
  MessagePackCodec.new(factory, freeze: freeze)
18
24
  end
19
25
 
@@ -32,7 +38,11 @@ module Paquito
32
38
  end
33
39
 
34
40
  def load(payload)
35
- @factory.load(payload, freeze: @freeze)
41
+ if @freeze
42
+ @factory.load(payload, freeze: @freeze)
43
+ else
44
+ @factory.load(payload)
45
+ end
36
46
  rescue MessagePack::UnpackError => error
37
47
  raise UnpackError, error.message
38
48
  rescue IOError => error
@@ -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,9 +65,11 @@ 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)
72
+
71
73
  super
72
74
  end
73
75
 
@@ -41,6 +41,7 @@ module Paquito
41
41
  if pack_digest != digest
42
42
  raise(VersionMismatchError, "#{self} digests do not match")
43
43
  end
44
+
44
45
  new(**props.keys.zip(values).to_h)
45
46
  end
46
47
 
data/lib/paquito/types.rb CHANGED
@@ -37,10 +37,12 @@ module Paquito
37
37
  def register(klass, packer: nil, unpacker:)
38
38
  if packer
39
39
  raise ArgumentError, "packer for #{klass} already defined" if packers.key?(klass)
40
+
40
41
  packers[klass] = packer
41
42
  end
42
43
 
43
44
  raise ArgumentError, "unpacker for #{klass} already defined" if unpackers.key?(klass)
45
+
44
46
  unpackers[klass] = unpacker
45
47
 
46
48
  self
@@ -72,13 +74,13 @@ module Paquito
72
74
  # New types can be added as long as they have unique #code.
73
75
  TYPES = {
74
76
  "Symbol" => {
75
- code: 0x00,
76
- packer: Symbol.method_defined?(:name) ? :name : :to_s,
77
- unpacker: :to_sym,
77
+ code: 0,
78
+ packer: Symbol.method_defined?(:name) ? :name.to_proc : :to_s.to_proc,
79
+ unpacker: :to_sym.to_proc,
78
80
  optimized_symbols_parsing: true,
79
81
  }.freeze,
80
82
  "Time" => {
81
- code: 0x01,
83
+ code: 1,
82
84
  packer: ->(value) do
83
85
  rational = value.utc.to_r
84
86
  [rational.numerator, rational.denominator].pack(TIME_FORMAT)
@@ -89,7 +91,7 @@ module Paquito
89
91
  end,
90
92
  }.freeze,
91
93
  "DateTime" => {
92
- code: 0x02,
94
+ code: 2,
93
95
  packer: ->(value) do
94
96
  sec = value.sec + value.sec_fraction
95
97
  offset = value.offset
@@ -129,7 +131,7 @@ module Paquito
129
131
  end,
130
132
  }.freeze,
131
133
  "Date" => {
132
- code: 0x03,
134
+ code: 3,
133
135
  packer: ->(value) do
134
136
  [value.year, value.month, value.day].pack(DATE_FORMAT)
135
137
  end,
@@ -139,28 +141,30 @@ module Paquito
139
141
  end,
140
142
  }.freeze,
141
143
  "BigDecimal" => {
142
- code: 0x04,
144
+ code: 4,
143
145
  packer: :_dump,
144
146
  unpacker: BigDecimal.method(:_load),
145
147
  }.freeze,
146
148
  # Range => { code: 0x05 }, do not recycle that code
147
149
  "ActiveRecord::Base" => {
148
- code: 0x6,
150
+ code: 6,
149
151
  packer: ->(value) { ActiveRecordPacker.dump(value) },
150
152
  unpacker: ->(value) { ActiveRecordPacker.load(value) },
151
153
  }.freeze,
152
154
  "ActiveSupport::HashWithIndifferentAccess" => {
153
- code: 0x7,
154
- packer: ->(factory, value) do
155
+ code: 7,
156
+ packer: ->(value, packer) do
155
157
  unless value.instance_of?(ActiveSupport::HashWithIndifferentAccess)
156
158
  raise PackError.new("cannot pack HashWithIndifferentClass subclass", value)
157
159
  end
158
- factory.dump(value.to_h)
160
+
161
+ packer.write(value.to_h)
159
162
  end,
160
- unpacker: ->(factory, value) { HashWithIndifferentAccess.new(factory.load(value)) },
163
+ unpacker: ->(unpacker) { HashWithIndifferentAccess.new(unpacker.read) },
164
+ recursive: true,
161
165
  },
162
166
  "ActiveSupport::TimeWithZone" => {
163
- code: 0x8,
167
+ code: 8,
164
168
  packer: ->(value) do
165
169
  [
166
170
  value.utc.to_i,
@@ -176,12 +180,28 @@ module Paquito
176
180
  end,
177
181
  },
178
182
  "Set" => {
179
- code: 0x9,
180
- packer: ->(factory, value) { factory.dump(value.to_a) },
181
- unpacker: ->(factory, value) { factory.load(value).to_set },
183
+ code: 9,
184
+ packer: ->(value, packer) { packer.write(value.to_a) },
185
+ unpacker: ->(unpacker) { unpacker.read.to_set },
186
+ recursive: true,
182
187
  },
183
- # Object => { code: 0x7f }, reserved for serializable Object type
184
- }.freeze
188
+ # Integer => { code: 10 }, reserved for oversized Integer
189
+ # Object => { code: 127 }, reserved for serializable Object type
190
+ }
191
+ begin
192
+ require "msgpack/bigint"
193
+
194
+ TYPES["Integer"] = {
195
+ code: 10,
196
+ packer: MessagePack::Bigint.method(:to_msgpack_ext),
197
+ unpacker: MessagePack::Bigint.method(:from_msgpack_ext),
198
+ oversized_integer_extension: true,
199
+ }
200
+ rescue LoadError
201
+ # expected on older msgpack
202
+ end
203
+
204
+ TYPES.freeze
185
205
 
186
206
  class << self
187
207
  def register(factory, types)
@@ -194,10 +214,6 @@ module Paquito
194
214
  end
195
215
 
196
216
  type_attributes = TYPES.fetch(name)
197
- type_attributes = type_attributes.merge(
198
- packer: curry_callback(type_attributes.fetch(:packer), factory),
199
- unpacker: curry_callback(type_attributes.fetch(:unpacker), factory),
200
- )
201
217
  factory.register_type(
202
218
  type_attributes.fetch(:code),
203
219
  type,
@@ -233,14 +249,6 @@ module Paquito
233
249
  def define_custom_type(klass, packer: nil, unpacker:)
234
250
  CustomTypesRegistry.register(klass, packer: packer, unpacker: unpacker)
235
251
  end
236
-
237
- private
238
-
239
- def curry_callback(callback, factory)
240
- return callback.to_proc if callback.is_a?(Symbol)
241
- return callback if callback.arity == 1
242
- callback.curry.call(factory)
243
- end
244
252
  end
245
253
  end
246
254
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Paquito
4
- VERSION = "0.3.1"
4
+ VERSION = "0.6.0"
5
5
  end
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.7.0"
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.1")
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.3.1
4
+ version: 0.6.0
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-02-02 00:00:00.000000000 Z
11
+ date: 2022-04-07 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.1
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.1
27
27
  description: Framework for defining efficient and extendable serializers
28
28
  email:
29
29
  - jean.boussier@gmail.com
@@ -39,6 +39,7 @@ files:
39
39
  - LICENSE.txt
40
40
  - README.md
41
41
  - Rakefile
42
+ - benchmark/msgpack-pooling.rb
42
43
  - bin/console
43
44
  - bin/setup
44
45
  - dev.yml
@@ -77,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
78
  requirements:
78
79
  - - ">="
79
80
  - !ruby/object:Gem::Version
80
- version: 2.7.0
81
+ version: 2.6.0
81
82
  required_rubygems_version: !ruby/object:Gem::Requirement
82
83
  requirements:
83
84
  - - ">="