Fix constant lookup when serializer is not available.

This commit is contained in:
José Valim 2011-12-21 09:11:04 +01:00
parent cc5f102e2d
commit b9d56a5168
2 changed files with 23 additions and 7 deletions

View File

@ -5,14 +5,19 @@ module ActiveModel::SerializerSupport
extend ActiveSupport::Concern
module ClassMethods #:nodoc:
def active_model_serializer
return @active_model_serializer if defined?(@active_model_serializer)
if "".respond_to?(:safe_constantize)
def active_model_serializer
@active_model_serializer ||= "#{self.name}Serializer".safe_constantize
end
else
def active_model_serializer
return @active_model_serializer if defined?(@active_model_serializer)
# Use safe constantize when Rails 3.2 is out
begin
@active_model_serializer = "#{self.name}Serializer".constantize
rescue NameError => e
raise unless e.message =~ /uninitialized constant$/ && e.name.to_s == "#{self.name}Serializer"
begin
@active_model_serializer = "#{self.name}Serializer".constantize
rescue NameError => e
raise unless e.message =~ /uninitialized constant/
end
end
end
end

View File

@ -0,0 +1,11 @@
require "test_helper"
class RandomModel
include ActiveModel::SerializerSupport
end
class SerializerSupportTest < ActiveModel::TestCase
test "it returns nil if no serializer exists" do
assert_equal nil, RandomModel.new.active_model_serializer
end
end