From 0e876624ec84651cc473fdb691438c099dc1f3c7 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Wed, 8 May 2013 12:57:07 -0700 Subject: [PATCH] Move reusable code to a module --- lib/active_model/array_serializer.rb | 34 ++++------------------------ lib/active_model/serializable.rb | 34 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 29 deletions(-) create mode 100644 lib/active_model/serializable.rb diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index 30e7f29e..7442390a 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -1,3 +1,4 @@ +require 'active_model/serializable' require "active_support/core_ext/class/attribute" require 'active_support/dependencies' require 'active_support/descendants_tracker' @@ -15,6 +16,8 @@ module ActiveModel class ArraySerializer extend ActiveSupport::DescendantsTracker + include ActiveModel::Serializable + attr_reader :object, :options class_attribute :root @@ -33,35 +36,8 @@ module ActiveModel @object, @options = object, options end - def meta_key - @options[:meta_key].try(:to_sym) || :meta - end - - def include_meta(hash) - hash[meta_key] = @options[:meta] if @options.has_key?(:meta) - end - - def as_json(*args) - @options[:hash] = hash = {} - @options[:unique_values] = {} - - if root = @options[:root] - hash.merge!(root => serializable_array) - include_meta hash - hash - else - serializable_array - end - end - - def to_json(*args) - if perform_caching? - cache.fetch expand_cache_key([self.class.to_s.underscore, cache_key, 'to-json']) do - super - end - else - super - end + def serialize + serializable_array end def serializable_array diff --git a/lib/active_model/serializable.rb b/lib/active_model/serializable.rb new file mode 100644 index 00000000..d288df44 --- /dev/null +++ b/lib/active_model/serializable.rb @@ -0,0 +1,34 @@ +module ActiveModel + module Serializable + def meta_key + options[:meta_key].try(:to_sym) || :meta + end + + def include_meta(hash) + hash[meta_key] = options[:meta] if options.has_key?(:meta) + end + + def as_json(*args) + options[:hash] = hash = {} + options[:unique_values] = {} + + if root = options[:root] + hash.merge!(root => serialize) + include_meta hash + hash + else + serialize + end + end + + def to_json(*args) + if perform_caching? + cache.fetch expand_cache_key([self.class.to_s.underscore, cache_key, 'to-json']) do + super + end + else + super + end + end + end +end