fast_serializer 1.1.1 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FastSerializer
2
4
  # Models can include this module to define themselves as serializers. A serializer is used to wrap
3
5
  # an object and output a hash version of that object suitable for serialization to JSON or other formats.
@@ -55,7 +57,6 @@ module FastSerializer
55
57
  #
56
58
  # Serializing a nil object will result in nil rather than an empty hash.
57
59
  module Serializer
58
-
59
60
  def self.included(base)
60
61
  base.extend(ClassMethods)
61
62
  base.extend(ArrayHelper) unless base.is_a?(FastSerializer::ArraySerializer)
@@ -100,19 +101,29 @@ module FastSerializer
100
101
  #
101
102
  # Subclasses will inherit all of their parent classes serialized fields. Subclasses can override fields
102
103
  # defined on the parent class by simply defining them again.
104
+ #
105
+ # @param fields [Array<Symbol, Hash>] the fields to serialize. If the last argument is a hash, it will be
106
+ # treated as options for the serialized fields.
107
+ # @return [void]
103
108
  def serialize(*fields)
104
109
  options = {}
105
110
  if fields.size > 1 && fields.last.is_a?(Hash)
106
- options = fields.last
111
+ fields.last.each do |key, value|
112
+ options[key.to_sym] = value
113
+ end
107
114
  fields = fields[0, fields.size - 1]
108
115
  end
109
- as = options[:as]
110
- optional = options.fetch(:optional, false)
111
- delegate = options.fetch(:delegate, true)
112
- enumerable = options.fetch(:enumerable, false)
113
- serializer = options[:serializer]
114
- serializer_options = options[:serializer_options]
115
- condition = options[:if]
116
+ as = options.delete(:as)
117
+ optional = options.delete(:optional) || false
118
+ delegate = options.delete(:delegate) || true
119
+ enumerable = options.delete(:enumerable) || false
120
+ serializer = options.delete(:serializer)
121
+ serializer_options = options.delete(:serializer_options)
122
+ condition = options.delete(:if)
123
+
124
+ unless options.empty?
125
+ raise ArgumentError.new("Unsupported serialize options: #{options.keys.join(", ")}")
126
+ end
116
127
 
117
128
  if as && fields.size > 1
118
129
  raise ArgumentError.new("Cannot specify :as argument with multiple fields to serialize")
@@ -120,8 +131,8 @@ module FastSerializer
120
131
 
121
132
  fields.each do |field|
122
133
  name = as
123
- if name.nil? && field.to_s.end_with?("?".freeze)
124
- name = field.to_s.chomp("?".freeze)
134
+ if name.nil? && field.to_s.end_with?("?")
135
+ name = field.to_s.chomp("?")
125
136
  end
126
137
 
127
138
  field = field.to_sym
@@ -136,6 +147,8 @@ module FastSerializer
136
147
 
137
148
  # Remove a field from being serialized. This can be useful in subclasses if they need to remove a
138
149
  # field defined by the parent class.
150
+ #
151
+ # @param fields [Array<Symbol>] the fields to remove
139
152
  def remove(*fields)
140
153
  remove_fields = fields.collect(&:to_sym)
141
154
  field_list = []
@@ -153,6 +166,10 @@ module FastSerializer
153
166
  #
154
167
  # You can also specify the cache time to live (ttl) in seconds and the cache implementation to use.
155
168
  # Both of these values are inherited on subclasses.
169
+ #
170
+ # @param cacheable [Boolean] pass false if the serializer is not cacheable
171
+ # @param ttl [Numeric] the time to live in seconds for a cacheable serializer
172
+ # @param cache [FastSerializer::Cache] the cache implementation to use for a cacheable serializer
156
173
  def cacheable(cacheable = true, ttl: nil, cache: nil)
157
174
  @cacheable = cacheable
158
175
  self.cache_ttl = ttl if ttl
@@ -160,6 +177,8 @@ module FastSerializer
160
177
  end
161
178
 
162
179
  # Return true if the serializer class is cacheable.
180
+ #
181
+ # @return [Boolean]
163
182
  def cacheable?
164
183
  unless defined?(@cacheable)
165
184
  @cacheable = superclass.cacheable? if superclass.respond_to?(:cacheable?)
@@ -168,22 +187,27 @@ module FastSerializer
168
187
  end
169
188
 
170
189
  # Return the time to live in seconds for a cacheable serializer.
190
+ #
191
+ # @return [Numeric]
171
192
  def cache_ttl
172
193
  if defined?(@cache_ttl)
173
194
  @cache_ttl
174
195
  elsif superclass.respond_to?(:cache_ttl)
175
196
  superclass.cache_ttl
176
- else
177
- nil
178
197
  end
179
198
  end
180
199
 
181
200
  # Set the time to live on a cacheable serializer.
201
+ #
202
+ # @param value [Numeric] the time to live in seconds
203
+ # @return [void]
182
204
  def cache_ttl=(value)
183
205
  @cache_ttl = value
184
206
  end
185
207
 
186
208
  # Get the cache implemtation used to store cacheable serializers.
209
+ #
210
+ # @return [FastSerializer::Cache]
187
211
  def cache
188
212
  if defined?(@cache)
189
213
  @cache
@@ -195,6 +219,9 @@ module FastSerializer
195
219
  end
196
220
 
197
221
  # Set the cache implementation used to store cacheable serializers.
222
+ #
223
+ # @param cache [FastSerializer::Cache]
224
+ # @return [void]
198
225
  def cache=(cache)
199
226
  if defined?(ActiveSupport::Cache::Store) && cache.is_a?(ActiveSupport::Cache::Store)
200
227
  cache = Cache::ActiveSupportCache.new(cache)
@@ -214,6 +241,8 @@ module FastSerializer
214
241
  end
215
242
 
216
243
  # Return a list of the SerializedFields defined for the class.
244
+ #
245
+ # @return [Array<FastSerializer::SerializedField>]
217
246
  def serializable_fields
218
247
  unless defined?(@serializable_fields) && @serializable_fields
219
248
  fields = superclass.send(:serializable_fields).dup if superclass.respond_to?(:serializable_fields)
@@ -234,17 +263,17 @@ module FastSerializer
234
263
  private include_method_name
235
264
  condition = include_method_name
236
265
  end
237
-
266
+
238
267
  field = SerializedField.new(name, optional: optional, serializer: serializer, serializer_options: serializer_options, enumerable: enumerable, condition: condition)
239
268
 
240
269
  # Add the field to the frozen list of fields.
241
270
  field_list = []
242
271
  added = false
243
272
  serializable_fields.each do |existing_field|
244
- if existing_field.name == name
245
- field_list << field
273
+ field_list << if existing_field.name == name
274
+ field
246
275
  else
247
- field_list << existing_field
276
+ existing_field
248
277
  end
249
278
  end
250
279
  field_list << field unless added
@@ -253,14 +282,14 @@ module FastSerializer
253
282
 
254
283
  # Define a delegate method name +attribute+ that invokes the +field+ method on the wrapped object.
255
284
  def define_delegate(attribute, field)
256
- define_method(attribute){ object.send(field) }
285
+ define_method(attribute) { object.send(field) }
257
286
  end
258
287
  end
259
-
288
+
260
289
  module ArrayHelper
261
290
  # Helper method to serialize an array of values using this serializer.
262
291
  def array(values, options = nil)
263
- options = (options ? options.merge(:serializer => self) : {:serializer => self})
292
+ options = (options ? options.merge(serializer: self) : {serializer: self})
264
293
  FastSerializer::ArraySerializer.new(values, options)
265
294
  end
266
295
  end
@@ -287,14 +316,12 @@ module FastSerializer
287
316
  # Serialize the wrapped object into a format suitable for passing to a JSON parser.
288
317
  def as_json(*args)
289
318
  return nil unless object
290
- unless @_serialized
291
- @_serialized = (cacheable? ? load_from_cache : load_hash).freeze
292
- end
319
+ @_serialized ||= (cacheable? ? load_from_cache : load_hash).freeze
293
320
  @_serialized
294
321
  end
295
322
 
296
- alias :to_hash :as_json
297
- alias :to_h :as_json
323
+ alias_method :to_hash, :as_json
324
+ alias_method :to_h, :as_json
298
325
 
299
326
  # Convert the wrapped object to JSON format.
300
327
  def to_json(options = {})
@@ -353,14 +380,14 @@ module FastSerializer
353
380
  SerializationContext.use do
354
381
  self.class.serializable_fields.each do |field|
355
382
  name = field.name
356
-
383
+
357
384
  if field.optional?
358
- next unless include_fields && include_fields.include?(name)
385
+ next unless include_fields&.include?(name)
359
386
  end
360
387
  next if excluded_fields && excluded_fields[name] == true
361
388
  condition = field.condition
362
389
  next if condition && !send(condition)
363
-
390
+
364
391
  value = field.serialize(send(name), serializer_options(name))
365
392
  hash[name] = value
366
393
  end
@@ -411,7 +438,7 @@ module FastSerializer
411
438
  end
412
439
  hash_key
413
440
  elsif options.is_a?(Enumerable)
414
- options.collect{|option| options_cache_key(option)}
441
+ options.collect { |option| options_cache_key(option) }
415
442
  else
416
443
  options
417
444
  end
@@ -1,22 +1,22 @@
1
- require 'json'
2
- require 'time'
3
- require 'date'
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "time"
5
+ require "date"
4
6
 
5
7
  module FastSerializer
6
- require_relative 'fast_serializer/cache'
7
- require_relative 'fast_serializer/cache/active_support_cache'
8
- require_relative 'fast_serializer/serialization_context'
9
- require_relative 'fast_serializer/serialized_field'
10
- require_relative 'fast_serializer/serializer'
11
- require_relative 'fast_serializer/array_serializer'
8
+ require_relative "fast_serializer/cache"
9
+ require_relative "fast_serializer/cache/active_support_cache"
10
+ require_relative "fast_serializer/serialization_context"
11
+ require_relative "fast_serializer/serialized_field"
12
+ require_relative "fast_serializer/serializer"
13
+ require_relative "fast_serializer/array_serializer"
12
14
 
13
15
  class << self
14
16
  @cache = nil
15
17
 
16
18
  # Get the global cache implementation used for storing cacheable serializers.
17
- def cache
18
- @cache
19
- end
19
+ attr_reader :cache
20
20
 
21
21
  # Set the global cache implementation used for storing cacheable serializers.
22
22
  # The cache implementation should implement the +fetch+ method as defined in
@@ -24,6 +24,8 @@ module FastSerializer
24
24
  #
25
25
  # In a Rails app, you can initialize the cache by simply passing in the value :rails
26
26
  # to use the default Rails.cache. You can also directly pass in an ActiveSupportCache::Store.
27
+ #
28
+ # @param cache [FastSerializer::Cache, ActiveSupport::Cache::Store, Symbol] the cache to use
27
29
  def cache=(cache)
28
30
  if cache == :rails
29
31
  cache = Cache::ActiveSupportCache.new(Rails.cache)
metadata CHANGED
@@ -1,38 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
- - We Heart It
8
7
  - Brian Durand
9
- autorequire:
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2019-01-12 00:00:00.000000000 Z
11
+ date: 2023-11-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: bundler
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '1.3'
21
- type: :development
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
26
- - !ruby/object:Gem::Version
27
- version: '1.3'
28
- - !ruby/object:Gem::Dependency
29
- name: rake
14
+ name: redis
30
15
  requirement: !ruby/object:Gem::Requirement
31
16
  requirements:
32
17
  - - ">="
33
18
  - !ruby/object:Gem::Version
34
19
  version: '0'
35
- type: :development
20
+ type: :runtime
36
21
  prerelease: false
37
22
  version_requirements: !ruby/object:Gem::Requirement
38
23
  requirements:
@@ -40,47 +25,29 @@ dependencies:
40
25
  - !ruby/object:Gem::Version
41
26
  version: '0'
42
27
  - !ruby/object:Gem::Dependency
43
- name: rspec
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - "~>"
47
- - !ruby/object:Gem::Version
48
- version: '3.0'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - "~>"
54
- - !ruby/object:Gem::Version
55
- version: '3.0'
56
- - !ruby/object:Gem::Dependency
57
- name: active_support
28
+ name: bundler
58
29
  requirement: !ruby/object:Gem::Requirement
59
30
  requirements:
60
31
  - - ">="
61
32
  - !ruby/object:Gem::Version
62
- version: '4.0'
33
+ version: '0'
63
34
  type: :development
64
35
  prerelease: false
65
36
  version_requirements: !ruby/object:Gem::Requirement
66
37
  requirements:
67
38
  - - ">="
68
39
  - !ruby/object:Gem::Version
69
- version: '4.0'
70
- description: Super fast object serialization for API's combining a simple DSL with
71
- many optimizations under the hood.
40
+ version: '0'
41
+ description:
72
42
  email:
73
- - dev@weheartit.com
74
43
  - bbdurand@gmail.com
75
44
  executables: []
76
45
  extensions: []
77
46
  extra_rdoc_files: []
78
47
  files:
79
- - ".gitignore"
80
- - HISTORY.md
48
+ - CHANGELOG.md
81
49
  - MIT_LICENSE
82
50
  - README.md
83
- - Rakefile
84
51
  - VERSION
85
52
  - fast_serializer.gemspec
86
53
  - lib/fast_serializer.rb
@@ -90,19 +57,11 @@ files:
90
57
  - lib/fast_serializer/serialization_context.rb
91
58
  - lib/fast_serializer/serialized_field.rb
92
59
  - lib/fast_serializer/serializer.rb
93
- - spec/array_serializer_spec.rb
94
- - spec/cache/active_support_cache_spec.rb
95
- - spec/fast_serializer_spec.rb
96
- - spec/serialization_context_spec.rb
97
- - spec/serialized_field_spec.rb
98
- - spec/serializer_spec.rb
99
- - spec/spec_helper.rb
100
- - spec/support/test_models.rb
101
- homepage: https://github.com/weheartit/fast_serializer
60
+ homepage: https://github.com/bdurand/fast_serializer
102
61
  licenses:
103
62
  - MIT
104
63
  metadata: {}
105
- post_install_message:
64
+ post_install_message:
106
65
  rdoc_options: []
107
66
  require_paths:
108
67
  - lib
@@ -110,24 +69,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
69
  requirements:
111
70
  - - ">="
112
71
  - !ruby/object:Gem::Version
113
- version: '0'
72
+ version: '2.5'
114
73
  required_rubygems_version: !ruby/object:Gem::Requirement
115
74
  requirements:
116
75
  - - ">="
117
76
  - !ruby/object:Gem::Version
118
77
  version: '0'
119
78
  requirements: []
120
- rubyforge_project:
121
- rubygems_version: 2.7.6
122
- signing_key:
79
+ rubygems_version: 3.4.12
80
+ signing_key:
123
81
  specification_version: 4
124
- summary: Super fast object serialization for API's.
125
- test_files:
126
- - spec/array_serializer_spec.rb
127
- - spec/cache/active_support_cache_spec.rb
128
- - spec/fast_serializer_spec.rb
129
- - spec/serialization_context_spec.rb
130
- - spec/serialized_field_spec.rb
131
- - spec/serializer_spec.rb
132
- - spec/spec_helper.rb
133
- - spec/support/test_models.rb
82
+ summary: Super fast object serialization for API's combining a simple DSL with many
83
+ optimizations under the hood.
84
+ test_files: []
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/HISTORY.md DELETED
@@ -1,25 +0,0 @@
1
- ### 1.1.1
2
-
3
- * Add `array` class method to serializers.
4
-
5
- ### 1.1.0
6
-
7
- * Add helper method for scope option.
8
-
9
- * Pass serialization options to child serializers.
10
-
11
- * Add `if` option to conditionally include fields.
12
-
13
- * Better cache keys handling for more complex objects.
14
-
15
- ### 1.0.2
16
-
17
- * Better integration with ActiveSupport caching.
18
-
19
- ### 1.0.1
20
-
21
- * Compatibility with change to fetch_multi in ActiveSupport 4.2.
22
-
23
- ### 1.0.0
24
-
25
- * Initial release
data/Rakefile DELETED
@@ -1,18 +0,0 @@
1
- require "bundler/gem_tasks"
2
-
3
- desc 'Default: run unit tests.'
4
- task :default => :test
5
-
6
- desc 'RVM likes to call it tests'
7
- task :tests => :test
8
-
9
- begin
10
- require 'rspec'
11
- require 'rspec/core/rake_task'
12
- desc 'Run the unit tests'
13
- RSpec::Core::RakeTask.new(:test)
14
- rescue LoadError
15
- task :test do
16
- STDERR.puts "You must have rspec >= 2.0 installed to run the tests"
17
- end
18
- end
@@ -1,67 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe FastSerializer::ArraySerializer do
4
-
5
- it "should serialize an array of regular objects" do
6
- array = [1, 2, 3]
7
- serializer = FastSerializer::ArraySerializer.new(array)
8
- expect(serializer.as_json).to eq array
9
- end
10
-
11
- it "should serialize any Enumerable" do
12
- hash = {:a => 1, :b => 2}
13
- serializer = FastSerializer::ArraySerializer.new(hash)
14
- expect(serializer.as_json).to eq hash.to_a
15
- end
16
-
17
- it "should serializer an array of objects using a specific serializer" do
18
- model_1 = SimpleModel.new(:id => 1, :name => "foo")
19
- model_2 = SimpleModel.new(:id => 2, :name => "bar")
20
- serializer = FastSerializer::ArraySerializer.new([model_1, model_2], :serializer => SimpleSerializer)
21
- expect(JSON.load(serializer.to_json)).to eq [
22
- {"id" => 1, "name" => "foo", "validated" => false},
23
- {"id" => 2, "name" => "bar", "validated" => false}
24
- ]
25
- end
26
-
27
- it "should serializer an array of objects using a specific serializer with options" do
28
- model_1 = SimpleModel.new(:id => 1, :name => "foo")
29
- model_2 = SimpleModel.new(:id => 2, :name => "bar")
30
- serializer = FastSerializer::ArraySerializer.new([model_1, model_2], :serializer => SimpleSerializer, :serializer_options => {:include => :description})
31
- expect(JSON.load(serializer.to_json)).to eq [
32
- {"id" => 1, "name" => "foo", "validated" => false, "description" => nil},
33
- {"id" => 2, "name" => "bar", "validated" => false, "description" => nil}
34
- ]
35
- end
36
-
37
- it "should be able to use the array helper method on a serializer to serialize an array of objects" do
38
- model_1 = SimpleModel.new(:id => 1, :name => "foo")
39
- model_2 = SimpleModel.new(:id => 2, :name => "bar")
40
- array_serializer = FastSerializer::ArraySerializer.new([model_1, model_2], :serializer => SimpleSerializer, :serializer_options => {:include => :description})
41
- helper_serializer = SimpleSerializer.array([model_1, model_2], :serializer_options => {:include => :description})
42
- expect(array_serializer.to_json).to eq helper_serializer.to_json
43
- end
44
-
45
- it "should not respond to_hash methods" do
46
- array = [1, 2, 3]
47
- serializer = FastSerializer::ArraySerializer.new(array)
48
- expect(serializer.respond_to?(:to_hash)).to eq false
49
- expect(serializer.respond_to?(:to_h)).to eq false
50
- end
51
-
52
- it "should respond to to_a" do
53
- array = [1, 2, 3]
54
- serializer = FastSerializer::ArraySerializer.new(array)
55
- expect(serializer.to_a).to eq array
56
- end
57
-
58
- it "should pull cacheable serializers from a cache" do
59
- model_1 = SimpleModel.new(:id => 1, :name => "foo")
60
- model_2 = SimpleModel.new(:id => 2, :name => "bar")
61
- serializer = FastSerializer::ArraySerializer.new([model_1, model_2], serializer: CachedSerializer)
62
- expect(serializer.cacheable?).to eq true
63
- already_cached_json = CachedSerializer.new(model_1).as_json
64
- expect(serializer.as_json.collect(&:object_id)).to eq [already_cached_json.object_id, CachedSerializer.new(model_2).as_json.object_id]
65
- end
66
-
67
- end
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe FastSerializer::Cache::ActiveSupportCache do
4
-
5
- it "should fetch from an ActiveSupport cache store" do
6
- cache_store = ActiveSupport::Cache::MemoryStore.new
7
- cache = FastSerializer::Cache::ActiveSupportCache.new(cache_store)
8
- serializer = SimpleSerializer.new(SimpleModel.new(:id => 1))
9
-
10
- expect(cache.fetch(serializer, 60){|s| s.as_json} ).to eq serializer.as_json
11
- expect(cache.fetch(serializer, 60){ raise "boom" }).to eq serializer.as_json
12
- end
13
-
14
- it "should fetch multiple from an ActiveSupport cache store" do
15
- cache_store = ActiveSupport::Cache::MemoryStore.new
16
- cache = FastSerializer::Cache::ActiveSupportCache.new(cache_store)
17
- s1 = SimpleSerializer.new(SimpleModel.new(:id => 1))
18
- s2 = SimpleSerializer.new(SimpleModel.new(:id => 2))
19
-
20
- expect(cache.fetch_all([s1, s2], 60){|s| s.as_json} ).to eq [s1.as_json, s2.as_json]
21
- expect(cache.fetch_all([s1, s2], 60){ raise "boom" }).to eq [s1.as_json, s2.as_json]
22
- end
23
-
24
- end
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe FastSerializer do
4
-
5
- it "should be able to set and get a global cache" do
6
- expect(FastSerializer.cache).to eq nil
7
- begin
8
- cache = TestCache.new
9
- FastSerializer.cache = cache
10
- expect(FastSerializer.cache).to eq cache
11
- ensure
12
- FastSerializer.cache = nil
13
- end
14
- expect(FastSerializer.cache).to eq nil
15
- end
16
-
17
- it "should set the cache to Rails.cache with the value :rails" do
18
- begin
19
- rails = double(:cache => :rails_cache)
20
- stub_const("Rails", rails)
21
- FastSerializer.cache = :rails
22
- expect(FastSerializer.cache).to be_a FastSerializer::Cache::ActiveSupportCache
23
- expect(FastSerializer.cache.cache).to eq :rails_cache
24
- ensure
25
- FastSerializer.cache = nil
26
- end
27
- end
28
-
29
- it "should set the cache with an ActiveSupport cache" do
30
- begin
31
- cache_store = ActiveSupport::Cache::MemoryStore.new
32
- FastSerializer.cache = cache_store
33
- expect(FastSerializer.cache).to be_a FastSerializer::Cache::ActiveSupportCache
34
- expect(FastSerializer.cache.cache).to eq cache_store
35
- ensure
36
- FastSerializer.cache = nil
37
- end
38
- end
39
-
40
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe FastSerializer::SerializationContext do
4
-
5
- it "should get a single context only within a block" do
6
- expect(FastSerializer::SerializationContext.current).to eq nil
7
- FastSerializer::SerializationContext.use do
8
- context = FastSerializer::SerializationContext.current
9
- expect(FastSerializer::SerializationContext.current).to_not eq nil
10
- FastSerializer::SerializationContext.use do
11
- expect(FastSerializer::SerializationContext.current).to eq context
12
- end
13
- expect(FastSerializer::SerializationContext.current).to eq context
14
- end
15
- expect(FastSerializer::SerializationContext.current).to eq nil
16
- end
17
-
18
- it "should create serializers and reload them from cache with the same object and options" do
19
- context = FastSerializer::SerializationContext.new
20
- object = SimpleModel.new(:id => 1, :name => "foo")
21
-
22
- serializer = context.load(SimpleSerializer, object, :count => 1)
23
- expect(serializer).to be_a SimpleSerializer
24
- expect(serializer.object).to eq object
25
- expect(serializer.options).to eq(:count => 1)
26
-
27
- expect(context.load(SimpleSerializer, object, :count => 1).object_id).to eq serializer.object_id
28
- expect(context.load(SimpleSerializer, SimpleModel.new(:id => 2, :name => "bar"), :count => 1).object_id).to_not eq serializer.object_id
29
- expect(context.load(SimpleSerializer, object, :count => 2).object_id).to_not eq serializer.object_id
30
- end
31
-
32
- end