oj_serializers 1.0.0 → 1.0.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: 807a53bcbe017c0279d9be8f654044a0c8834d289dd2e34646121833923ab4c1
4
- data.tar.gz: b5f77a958e54273c9729e42a8d9270d4859f1c3aaa338efcbdff0357b3bdc8a5
3
+ metadata.gz: b12d0af1a11e10d1fd2276700de7e44e67532947ee8edfc56001e74b29ad55f0
4
+ data.tar.gz: d3e74a9a7e27943417680f469ed995312ec9439908a18652977152a0ba43abd2
5
5
  SHA512:
6
- metadata.gz: 0753030fff469265ce72aecab4b8f7289d626bc15355f847dd0c57dccda3c3abbaa269e4154017bf12c9e1e3f0335df02bf62e31faf105f4cd2bd2a40c34b4ea
7
- data.tar.gz: ad791006f8d82f9a1bba0ce8179d414372d2581fd2181920e9362fdad77b0e707f271a8c9a259e115deedcea9a576dca434b2332aef060502b8b530c69f25c3d
6
+ metadata.gz: 7ee8a29984fd104c0844c0c30228966effaf2f2244996c0ca874d228eff876d8d356890d24f166c73089be472511b882c1f692a627953a1705250476d2b4fae1
7
+ data.tar.gz: a5d34b5799786d9716d6c6b5939cf89e41ecdd6679fd72cd39ea0dba5b502beafb5f57975c01c364053cb98ee3787472d992ad3e9a7c2bbe7cf45f3c0c1d4c08
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## Oj Serializers 1.0.1 (2023-03-01) ##
2
+
3
+ * [Avoid caching instances of reloaded classes in development](https://github.com/ElMassimo/oj_serializers/commit/0bd928d64d159926acf6b4d57e3f08b12f6931ce)
4
+
5
+
1
6
  ## Oj Serializers 1.0.0 (2020-11-05) ##
2
7
 
3
8
  * Initial Release.
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  <h1 align="center">
2
2
  Oj Serializers
3
3
  <p align="center">
4
- <!-- <a href="https://travis-ci.org/ElMassimo/oj_serializers"><img alt="Build Status" src="https://travis-ci.org/ElMassimo/oj_serializers.svg"/></a>
5
- <a href="http://inch-ci.org/github/ElMassimo/oj_serializers"><img alt="Inline docs" src="http://inch-ci.org/github/ElMassimo/oj_serializers.svg"/></a>
4
+ <a href="https://github.com/ElMassimo/oj_serializers/actions"><img alt="Build Status" src="https://github.com/ElMassimo/oj_serializers/workflows/build/badge.svg"/></a>
5
+ <a href="https://inch-ci.org/github/ElMassimo/oj_serializers"><img alt="Inline docs" src="https://inch-ci.org/github/ElMassimo/oj_serializers.svg"/></a>
6
6
  <a href="https://codeclimate.com/github/ElMassimo/oj_serializers"><img alt="Maintainability" src="https://codeclimate.com/github/ElMassimo/oj_serializers/badges/gpa.svg"/></a>
7
- <a href="https://codeclimate.com/github/ElMassimo/oj_serializers"><img alt="Test Coverage" src="https://codeclimate.com/github/ElMassimo/oj_serializers/badges/coverage.svg"/></a> -->
7
+ <a href="https://codeclimate.com/github/ElMassimo/oj_serializers"><img alt="Test Coverage" src="https://codeclimate.com/github/ElMassimo/oj_serializers/badges/coverage.svg"/></a>
8
8
  <a href="https://rubygems.org/gems/oj_serializers"><img alt="Gem Version" src="https://img.shields.io/gem/v/oj_serializers.svg?colorB=e9573f"/></a>
9
9
  <a href="https://github.com/ElMassimo/oj_serializers/blob/master/LICENSE.txt"><img alt="License" src="https://img.shields.io/badge/license-MIT-428F7E.svg"/></a>
10
10
  </p>
@@ -19,6 +19,7 @@ JSON serializers for Ruby, built on top of the powerful [`oj`][oj] library.
19
19
  [panko]: https://github.com/panko-serializer/panko_serializer
20
20
  [benchmarks]: https://github.com/ElMassimo/oj_serializers/tree/master/benchmarks
21
21
  [raw_benchmarks]: https://github.com/ElMassimo/oj_serializers/blob/master/benchmarks/document_benchmark.rb
22
+ [sugar]: https://github.com/ElMassimo/oj_serializers/blob/master/lib/oj_serializers/sugar.rb#L14
22
23
  [migration guide]: https://github.com/ElMassimo/oj_serializers/blob/master/MIGRATION_GUIDE.md
23
24
  [design]: https://github.com/ElMassimo/oj_serializers#design-
24
25
  [raw_json]: https://github.com/ohler55/oj/issues/542
@@ -174,7 +175,7 @@ class AlbumsController < ApplicationController
174
175
  end
175
176
  ```
176
177
 
177
- If you are using Rails you can also use something closer to Active Model Serializers by adding `sugar`:
178
+ If you are using Rails you can also use something closer to Active Model Serializers by adding [`sugar`][sugar]:
178
179
 
179
180
  ```ruby
180
181
  require 'oj_serializers/sugar'
@@ -6,11 +6,15 @@ require 'active_model_serializers'
6
6
  # as well.
7
7
  class ActiveModel::Serializer
8
8
  # JsonStringEncoder: Used internally to write a single object to JSON.
9
+ #
10
+ # Returns nothing.
9
11
  def self.write_one(writer, object, options)
10
12
  writer.push_value(new(object, options))
11
13
  end
12
14
 
13
15
  # JsonStringEncoder: Used internally to write an array of objects to JSON.
16
+ #
17
+ # Returns nothing.
14
18
  def self.write_many(writer, array, options)
15
19
  writer.push_array
16
20
  array.each do |object|
@@ -20,6 +24,8 @@ class ActiveModel::Serializer
20
24
  end
21
25
 
22
26
  # JsonStringEncoder: Used internally to instantiate an Oj::StringWriter.
27
+ #
28
+ # Returns an Oj::StringWriter.
23
29
  def self.new_json_writer
24
30
  OjSerializers::Serializer.send(:new_json_writer)
25
31
  end
@@ -10,10 +10,10 @@ module OjSerializers::JsonStringEncoder
10
10
  # render json: items, each_serializer: ItemSerializer
11
11
  # render json: item, serializer: ItemSerializer
12
12
  #
13
- # Returns a JSON string.
14
- #
15
13
  # NOTE: Unlike the default encoder, this one will use the `root` option
16
14
  # regardless of whether a serializer is specified or not.
15
+ #
16
+ # Returns a JSON string.
17
17
  def encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **extras)
18
18
  # NOTE: Serializers may override `new_json_writer` to modify the behavior.
19
19
  writer = (serializer || each_serializer || OjSerializers::Serializer).send(:new_json_writer)
@@ -40,9 +40,9 @@ module OjSerializers::JsonStringEncoder
40
40
  writer.to_json
41
41
  end
42
42
 
43
- # Allows to detect misusage of the options during development.
44
43
  if OjSerializers::Serializer::DEV_MODE
45
44
  alias actual_encode_to_json encode_to_json
45
+ # Internal: Allows to detect misusage of the options during development.
46
46
  def encode_to_json(object, root: nil, serializer: nil, each_serializer: nil, **extras)
47
47
  if serializer && serializer < OjSerializers::Serializer
48
48
  raise ArgumentError, 'You must use `each_serializer` when serializing collections' if object.respond_to?(:each)
@@ -5,15 +5,18 @@
5
5
  # NOTE: Oj's raw_json option means there's no performance overhead, as it would
6
6
  # occur with the previous alternative of parsing the JSON string.
7
7
  class OjSerializers::JsonValue
8
- # Helper: Expects an Array of JSON-encoded strings and wraps them in a JSON array.
9
- def self.array(json_rows)
10
- new("[#{json_rows.join(',')}]")
11
- end
12
-
8
+ # Public: Expects json to be a JSON-encoded string.
13
9
  def initialize(json)
14
10
  @json = json
15
11
  end
16
12
 
13
+ # Public: Expects an Array of JSON-encoded strings and wraps them in a JSON array.
14
+ #
15
+ # Returns a JsonValue representing a JSON-encoded array.
16
+ def self.array(json_rows)
17
+ new("[#{json_rows.join(',')}]")
18
+ end
19
+
17
20
  # Public: Return the internal json when using string interpolation.
18
21
  def to_s
19
22
  @json
@@ -6,10 +6,14 @@ class OjSerializers::Memo
6
6
  @cache = {}
7
7
  end
8
8
 
9
+ # Internal: Allows to clear the cache when binding the serializer to a
10
+ # different object.
9
11
  def clear
10
12
  @cache.clear
11
13
  end
12
14
 
15
+ # Public: Allows to use a simple memoization pattern that also works for
16
+ # falsey values.
13
17
  def fetch(key)
14
18
  @cache.fetch(key) { @cache[key] = yield }
15
19
  end
@@ -222,9 +222,6 @@ private
222
222
  @_associations
223
223
  end
224
224
 
225
- # Internal: Iterating arrays is faster than iterating hashes.
226
- attr_reader :_attributes_entries, :_associations_entries
227
-
228
225
  protected
229
226
 
230
227
  # Internal: Calculates the cache_key used to cache one serialized item.
@@ -451,7 +448,7 @@ private
451
448
  # Internal: Cache key to set a thread-local instance.
452
449
  def instance_key
453
450
  unless defined?(@instance_key)
454
- @instance_key = "#{name.underscore}_instance".to_sym
451
+ @instance_key = "#{name.underscore}_instance_#{object_id}".to_sym
455
452
  # We take advantage of the fact that this method will always be called
456
453
  # before instantiating a serializer to define the write_to_json method.
457
454
  class_eval(write_to_json_body)
@@ -13,14 +13,15 @@ end
13
13
  # NOTE: Add an optimization to make it easier to work with a StringWriter
14
14
  # transparently in different scenarios.
15
15
  class Oj::StringWriter
16
- # Patch: ActiveSupport can pass an options argument to `as_json` when
16
+ alias original_as_json as_json
17
+
18
+ # Internal: ActiveSupport can pass an options argument to `as_json` when
17
19
  # serializing a Hash or Array.
18
- alias_method :original_as_json, :as_json
19
20
  def as_json(_options = nil)
20
21
  original_as_json
21
22
  end
22
23
 
23
- # Optimization: We can use `to_s` directly, this is not important but gives a
24
+ # Internal: We can use `to_s` directly, this is not important but gives a
24
25
  # slight boost to a few use cases that use it for caching in Memcached.
25
26
  def to_json(_options = nil)
26
27
  to_s.delete_suffix("\n")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OjSerializers
4
- VERSION = '1.0.0'
4
+ VERSION = '1.0.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj_serializers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maximo Mussini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-07 00:00:00.000000000 Z
11
+ date: 2023-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  requirements: []
98
- rubygems_version: 3.1.2
98
+ rubygems_version: 3.2.32
99
99
  signing_key:
100
100
  specification_version: 4
101
101
  summary: A lighter JSON serializer for Ruby Objects in Rails. Easily migrate away