Skip to content

Commit 1d801be

Browse files
author
Mateusz Michalski
committed
Simplify sort order manipulation
1 parent dcae827 commit 1d801be

File tree

3 files changed

+22
-23
lines changed

3 files changed

+22
-23
lines changed

README.md

+13-3
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,19 @@ Include awesome_sort in your javascript and css application files
3434
In config/initializers, create an awesome_sort with similar syntax:
3535
```ruby
3636
AwesomeSort.configure do |config|
37-
config.add_sorter :contacts, :name, ->(scope, direction){ scope.order(surname: direction, forename: direction) }
38-
config.add_sorter :contacts, :organisations, ->(direction){ scope.eager_load(:clients).order("institute.name #{direction}") }
39-
config.add_default :contacts, ->(scope){ scope.eager_load(:clients).order('institute.name') }
37+
config.add_sorter(
38+
:contacts,
39+
:name,
40+
->(scope, direction){ scope.order(surname: direction, forename: direction) }
41+
)
42+
43+
config.add_sorter(
44+
:contacts,
45+
:organisations,
46+
->(direction){ scope.eager_load(:clients).order("institute.name #{direction}") }
47+
)
48+
49+
config.defaults[sort_by: 'name'] or config.defaults = { sort_order: 'desc', sort_by: 'dob' }
4050
end
4151
```
4252

app/helpers/awesome_sort/awesome_sort_helper.rb

+7-13
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,15 @@ def column_sort(args = {})
44
args[:extra] ||= {}
55
# Should pass it column_name, link_name, controller_name and
66
# optionally width, html_options and header_classes
7-
args.reverse_merge!(
8-
header_classes: [],
9-
html_options: {}
10-
)
7+
args.reverse_merge!(header_classes: [], html_options: {})
8+
sort_order = args[:sort_order] || defaults[:sort_order]
9+
1110
c_method = args[:controller_name] + "_path"
1211
klass = ["orderable"]
13-
klass << "order-#{params[:sort_order]}" if params[:sort_by] == args[:column_name]
12+
klass << "order-#{sort_order}" if args[:sort_by] == args[:column_name]
1413
klass << args[:header_classes]
1514
klass.flatten
16-
sort_order =
17-
if params[:sort_by] == args[:column_name] && params[:sort_order] == "asc"
18-
"desc"
19-
else
20-
"asc"
21-
end
15+
2216
content_tag(:th, width: args[:width], class: klass, data: { order_term: args[:column_name] }) do
2317
link_to(
2418
args[:link_name],
@@ -38,11 +32,11 @@ def sort(scope, sort_by, sort_order)
3832
scope.order(sort_by => sort_order)
3933
end
4034
else
41-
if default_sorter = AwesomeSort.defaults[klass]
35+
if default_sorter = AwesomeSort.defaults[:sort_by]
4236
if default_sorter.respond_to?(:call)
4337
default_sorter.call(scope)
4438
else
45-
scope.order(default_sorter => 'asc')
39+
scope.order(default_sorter => AwesomeSort.defaults[:sort_order])
4640
end
4741
else
4842
scope

lib/awesome_sort.rb

+2-7
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,13 @@ module AwesomeSort
66
mattr_accessor :sorters, :defaults
77

88
def self.configure
9+
self.sorters = {}
10+
self.defaults = { sort_order: 'asc', sort_by: 'name' }
911
yield self
1012
end
1113

1214
def self.add_sorter(model, attribute, sorter)
1315
self.sorters[model] ||= {}
1416
self.sorters[model][attribute] = sorter
1517
end
16-
17-
def self.set_default(model, attribute_or_sorter)
18-
self.defaults[model] = attribute_or_sorter
19-
end
2018
end
21-
22-
AwesomeSort.defaults = {}
23-
AwesomeSort.sorters = {}

0 commit comments

Comments
 (0)