From 095bae31d43c9901bf31f01ae4a03dd6eb1eb408 Mon Sep 17 00:00:00 2001 From: Theodore Konukhov Date: Fri, 29 Aug 2014 19:38:53 +0200 Subject: [PATCH] fix for ruby 1.9. --- lib/active_model/serializable.rb | 16 ++++++------ lib/active_model/serializable/utils.rb | 12 +++++++++ lib/active_model/serializer.rb | 34 ++++++++------------------ 3 files changed, 30 insertions(+), 32 deletions(-) create mode 100644 lib/active_model/serializable/utils.rb diff --git a/lib/active_model/serializable.rb b/lib/active_model/serializable.rb index 4eb6b9f4..9a33d397 100644 --- a/lib/active_model/serializable.rb +++ b/lib/active_model/serializable.rb @@ -1,5 +1,11 @@ +require 'active_model/serializable/utils' + module ActiveModel module Serializable + def self.included(base) + base.extend Utils + end + def as_json(options={}) instrument('!serialize') do if root = options.fetch(:root, json_key) @@ -26,14 +32,8 @@ module ActiveModel end end - if RUBY_VERSION >= '2.0' - def namespace - get_namespace && Object.const_get(get_namespace) - end - else - def namespace - get_namespace && get_namespace.safe_constantize - end + def namespace + get_namespace && Utils._const_get(get_namespace) end def embedded_in_root_associations diff --git a/lib/active_model/serializable/utils.rb b/lib/active_model/serializable/utils.rb new file mode 100644 index 00000000..7471bd0f --- /dev/null +++ b/lib/active_model/serializable/utils.rb @@ -0,0 +1,12 @@ +module ActiveModel + module Serializable + module Utils + extend self + + def _const_get(const) + method = RUBY_VERSION >= '2.0' ? :const_get : :qualified_const_get + Object.send method, const + end + end + end +end \ No newline at end of file diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index da009ef2..52894f0c 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -55,32 +55,18 @@ end end attr_reader :key_format - if RUBY_VERSION >= '2.0' - def serializer_for(resource, options = {}) - if resource.respond_to?(:to_ary) - if Object.constants.include?(:ArraySerializer) - ::ArraySerializer - else - ArraySerializer - end + def serializer_for(resource, options = {}) + if resource.respond_to?(:to_ary) + if Object.constants.include?(:ArraySerializer) + ::ArraySerializer else - begin - Object.const_get build_serializer_class(resource, options) - rescue NameError - nil - end + ArraySerializer end - end - else - def serializer_for(resource, options = {}) - if resource.respond_to?(:to_ary) - if Object.constants.include?(:ArraySerializer) - ::ArraySerializer - else - ArraySerializer - end - else - build_serializer_class(resource, options).safe_constantize + else + begin + _const_get build_serializer_class(resource, options) + rescue NameError + nil end end end