From 209834dc49d4865bf9797c51f086a5f05718cb44 Mon Sep 17 00:00:00 2001 From: Krzysztof Rybka Date: Tue, 29 Jan 2019 22:38:11 +0100 Subject: [PATCH] Performance and memory usage fixes (#2309) * Use select and reject instead of partition.map * Sort adapters keys in place * Just select from options * Add changelog entry --- CHANGELOG.md | 1 + lib/active_model/serializer/lazy_association.rb | 2 +- lib/active_model_serializers/adapter.rb | 2 +- lib/active_model_serializers/serializable_resource.rb | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd55fa3ec..8666ca748 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Fixes: - [#2307](https://github.com/rails-api/active_model_serializers/pull/2307) Falsey attribute values should not be reevaluated. Misc: +- [#2309](https://github.com/rails-api/active_model_serializers/pull/2309) Performance and memory usage fixes ### [v0.10.8 (2018-11-01)](https://github.com/rails-api/active_model_serializers/compare/v0.10.7...v0.10.8) diff --git a/lib/active_model/serializer/lazy_association.rb b/lib/active_model/serializer/lazy_association.rb index 5c9eb5035..ed7bd65c2 100644 --- a/lib/active_model/serializer/lazy_association.rb +++ b/lib/active_model/serializer/lazy_association.rb @@ -9,7 +9,7 @@ class Serializer delegate :collection?, to: :reflection def reflection_options - @reflection_options ||= reflection.options.dup.reject { |k, _| !REFLECTION_OPTIONS.include?(k) } + @reflection_options ||= reflection.options.select { |k, _| REFLECTION_OPTIONS.include?(k) } end def object diff --git a/lib/active_model_serializers/adapter.rb b/lib/active_model_serializers/adapter.rb index 9cb3e5881..274e5fee7 100644 --- a/lib/active_model_serializers/adapter.rb +++ b/lib/active_model_serializers/adapter.rb @@ -37,7 +37,7 @@ def adapter_map # @return [Array] list of adapter names def adapters - adapter_map.keys.sort + adapter_map.keys.sort! end # Adds an adapter 'klass' with 'name' to the 'adapter_map' diff --git a/lib/active_model_serializers/serializable_resource.rb b/lib/active_model_serializers/serializable_resource.rb index f9b7ebb68..eb9431d20 100644 --- a/lib/active_model_serializers/serializable_resource.rb +++ b/lib/active_model_serializers/serializable_resource.rb @@ -16,8 +16,8 @@ class SerializableResource # @return the serializable_resource, ready for #as_json/#to_json/#serializable_hash. def initialize(resource, options = {}) @resource = resource - @adapter_opts, @serializer_opts = - options.partition { |k, _| ADAPTER_OPTION_KEYS.include? k }.map { |h| Hash[h] } + @adapter_opts = options.select { |k, _| ADAPTER_OPTION_KEYS.include? k } + @serializer_opts = options.reject { |k, _| ADAPTER_OPTION_KEYS.include? k } end def serialization_scope=(scope)