module ActionController::Serialization

def build_json_serializer(resource, options = {})

def build_json_serializer(resource, options = {})
  options = default_serializer_options.merge(options)
  @namespace_for_serializer = options.fetch(:namespace, nil)
  if serializer = options.fetch(:serializer, default_serializer(resource))
    options[:scope] = serialization_scope unless options.has_key?(:scope)
    if resource.respond_to?(:to_ary)
      options[:resource_name] = controller_name 
      options[:namespace] = namespace_for_serializer if namespace_for_serializer
    end
    serializer.new(resource, options)
  end
end

def default_serializer(resource)

def default_serializer(resource)
  options = {}.tap do |o|
    o[:namespace] = namespace_for_serializer if namespace_for_serializer
  end
  ActiveModel::Serializer.serializer_for(resource, options)
end

def default_serializer_options

def default_serializer_options
  {}
end

def namespace_for_class(klass)

def namespace_for_class(klass)
  if Module.method_defined?(:module_parent)
    klass.module_parent
  else
    klass.parent
  end
end

def namespace_for_serializer

def namespace_for_serializer
  @namespace_for_serializer ||= namespace_for_class(self.class) unless namespace_for_class(self.class) == Object
end

def serialization_scope

def serialization_scope
  _serialization_scope = self.class._serialization_scope
  send(_serialization_scope) if _serialization_scope && respond_to?(_serialization_scope, true)
end