Sha256: 44241ae51855359d72fc880c5d4ef9d28ac5155da34960199a8892b5ec9c6d69

Contents?: true

Size: 1.42 KB

Versions: 3

Compression:

Stored size: 1.42 KB

Contents

require 'inherited_resources'
require 'inherited_resources/helpers'

class BaseController < InheritedResources::Base
  begin_of_association_chain :site
  tracks :resource, :resources, :collection, :site => %w(.title .name .sections)

  layout :layout
  helper_method :site

  mattr_accessor :sortable
  self.sortable = []

  class << self
    def responder
      Adva::Responder
    end

    def sortable?(order)
      !!sortable_direction(order)
    end

    def sortable_direction(order)
      self.sortable.assoc(order.to_sym).last rescue nil
    end
  end

  def site
    @site ||= Site.by_host(request.host_with_port)
  end

  def collection
    params[:order].present? ? sort(super, params[:order]) : super
  end

  protected

    def layout
      'default' unless params[:format] == 'atom'
    end

    def sort(collection, order)
      if !self.class.sortable?(order)
        collection
      elsif collection.respond_to?(order)
        collection.send(order)
      elsif collection.arel_table[order]
        collection.order(collection.arel_table[order].send(self.class.sortable_direction(order)))
      else
        collection
      end
    end
end

# ActiveRecord::Base.class_eval do
#   mattr_reader :sortable
#   self.sortable = []
#
#   class << self
#     def sortable_by?(name)
#       sortable.include?(name)
#     end
#
#     def sort_by(name)
#       sortable_by?(name) && respond_to?(name) : send(name) : self
#     end
#   end
# end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
adva-core-0.0.14 app/controllers/base_controller.rb
adva-core-0.0.13 app/controllers/base_controller.rb
adva-core-0.0.9 app/controllers/base_controller.rb