Skip to content

Commit 0f9d5ad

Browse files
committed
[Perf] Simplify serialization for better performance
BREAKING CHANGE! This commit introduces one backward incompatibility where redefining `converter` and `collection_converter` is now no-op.
1 parent f6545a8 commit 0f9d5ad

2 files changed

Lines changed: 1 addition & 90 deletions

File tree

lib/alba/resource.rb

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,6 @@ def hash_from_traits(obj)
128128
end
129129
end
130130

131-
def deprecated_serializable_hash
132-
Alba.collection?(@object) ? serializable_hash_for_collection : converter.call(@object)
133-
end
134-
135131
def serialize_with(hash)
136132
serialized_json = encode(hash)
137133
return serialized_json unless @_layout
@@ -168,18 +164,6 @@ def serializable_hash_for_collection
168164
end
169165
end
170166

171-
def deprecated_serializable_hash_for_collection
172-
if @_collection_key
173-
@object.to_h do |item|
174-
k = item.public_send(@_collection_key)
175-
key = Alba.regularize_key(k)
176-
[key, converter.call(item)]
177-
end
178-
else
179-
@object.each_with_object([], &collection_converter)
180-
end
181-
end
182-
183167
# @return [String]
184168
def fetch_key
185169
k = Alba.collection?(@object) ? _key_for_collection : _key
@@ -211,21 +195,6 @@ def transforming_root_key?
211195
@_transforming_root_key
212196
end
213197

214-
def converter
215-
lambda do |obj|
216-
attributes_to_hash(obj, {})
217-
end
218-
end
219-
220-
def collection_converter
221-
lambda do |obj, a|
222-
a << {}
223-
h = a.last
224-
attributes_to_hash(obj, h)
225-
a
226-
end
227-
end
228-
229198
def attributes_to_hash(obj, hash)
230199
@_attributes.each do |key, attribute|
231200
set_key_and_attribute_body_from(obj, key, attribute, hash)
@@ -346,16 +315,8 @@ module ClassMethods
346315
attr_reader(*INTERNAL_VARIABLES.keys)
347316

348317
# This `method_added` is used for defining "resource methods"
349-
def method_added(method_name) # rubocop:disable Metrics/MethodLength
318+
def method_added(method_name)
350319
case method_name
351-
when :collection_converter, :converter
352-
warn "Defining ##{method_name} methods is deprecated", category: :deprecated, uplevel: 1
353-
alias_method :serializable_hash_for_collection, :deprecated_serializable_hash_for_collection
354-
private(:serializable_hash_for_collection)
355-
alias_method :serializable_hash, :deprecated_serializable_hash
356-
alias_method :to_h, :deprecated_serializable_hash
357-
when :attributes
358-
warn 'Overriding `attributes` is deprecated, use `select` instead.', category: :deprecated, uplevel: 1
359320
when :select
360321
@_select_arity = instance_method(:select).arity
361322
when :_setup # noop

test/resource_test.rb

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -128,54 +128,4 @@ def test_include_serializer
128128
FooSerializer.new(@foo).to_json
129129
)
130130
end
131-
132-
class DeprecatedConverterResource
133-
include Alba::Resource
134-
135-
attributes :id
136-
137-
private
138-
139-
def converter
140-
->(o) { o }
141-
end
142-
end
143-
144-
def test_deprecated_converter
145-
assert_equal @foo, DeprecatedConverterResource.new(@foo).as_json
146-
end
147-
148-
class DeprecatedConverterCollectionResource
149-
include Alba::Resource
150-
151-
attributes :id
152-
153-
private
154-
155-
def collection_converter
156-
lambda do |obj, a|
157-
a << obj
158-
end
159-
end
160-
end
161-
162-
def test_deprecated_collection_converter
163-
assert_equal [@foo], DeprecatedConverterCollectionResource.new([@foo]).as_json
164-
end
165-
166-
def test_deprecated_attributes
167-
assert_output('', /Overriding `attributes` is deprecated, use `select` instead./) do
168-
Class.new do
169-
include Alba::Resource
170-
171-
attributes :id
172-
173-
private
174-
175-
def attributes # rubocop:disable Lint/UselessMethodDefinition
176-
super
177-
end
178-
end
179-
end
180-
end
181131
end

0 commit comments

Comments
 (0)