Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-02-06 01:20:55 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-02-06 01:20:55 +0300
commit62ed1c537e9b8aa85d354b377f18083fb71b8e05 (patch)
treea1b75f804b2e9384190f9d591a2f2701ea8d31db /app/models/concerns/sortable.rb
parentdbca8c97588d1fcc4155b079eb54157991be3aa7 (diff)
Explicitly define ordering in models using default_scope
Diffstat (limited to 'app/models/concerns/sortable.rb')
-rw-r--r--app/models/concerns/sortable.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/app/models/concerns/sortable.rb b/app/models/concerns/sortable.rb
new file mode 100644
index 00000000000..49001cabc7c
--- /dev/null
+++ b/app/models/concerns/sortable.rb
@@ -0,0 +1,32 @@
+# == Sortable concern
+#
+# Set default scope for ordering objects
+#
+module Sortable
+ extend ActiveSupport::Concern
+
+ included do
+ # By default all models should be ordered
+ # by created_at field starting from newest
+ default_scope { order(created_at: :desc, id: :desc) }
+ scope :order_name, -> { reorder(name: :asc) }
+ scope :order_recent, -> { reorder(created_at: :desc, id: :desc) }
+ scope :order_oldest, -> { reorder(created_at: :asc, id: :asc) }
+ scope :order_recent_updated, -> { reorder(updated_at: :desc, id: :desc) }
+ scope :order_oldest_updated, -> { reorder(updated_at: :asc, id: :asc) }
+ end
+
+ module ClassMethods
+ def sort(method)
+ case method.to_s
+ when 'name' then order_name_asc
+ when 'recent' then order_recent
+ when 'oldest' then order_oldest
+ when 'recent_updated' then order_recent_updated
+ when 'oldest_updated' then order_oldest_updated
+ else
+ self
+ end
+ end
+ end
+end