From 07addbf8c7c53c6ec4a0cf9fe4cf204dafe18929 Mon Sep 17 00:00:00 2001 From: Dries Harnie Date: Wed, 13 Apr 2016 06:54:33 +0200 Subject: [PATCH] AMS 0.8: Fix memory leak with :scope_name (#1675) Fix memory leak with :scope_name Supplying :scope_name causes `ActiveModel::Serializer#initialize` to define a method on the class, which retains a reference to the serializer instance. * Lock version of mime-types to < 3 for older JRubies --- Gemfile | 5 +++++ lib/active_model/serializer.rb | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 06e858e4..476d7682 100644 --- a/Gemfile +++ b/Gemfile @@ -31,3 +31,8 @@ end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: (@windows_platforms + [:jruby]) + +# JRuby versions before 9.x report their version as "1.9.x" or lower, so lock these to an older version of mime-types +if defined?(JRUBY_VERSION) and Gem::ruby_version < Gem::Version.new("2.0.0") + gem 'mime-types', '< 3' +end diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index ef47178b..694cf61f 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -294,9 +294,7 @@ module ActiveModel scope_name = @options[:scope_name] if scope_name && !respond_to?(scope_name) - self.class.class_eval do - define_method scope_name, lambda { scope } - end + self.singleton_class.send :alias_method, scope_name, :scope end end