sort_out 0.1.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/lib/sort_out.rb +14 -1
- data/lib/sort_out/action_controller.rb +50 -0
- data/lib/sort_out/active_record.rb +25 -7
- data/lib/sort_out/helpers.rb +36 -10
- data/lib/sort_out/version.rb +1 -1
- metadata +22 -34
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8c6115fbb064045a3b68a41344fe7ab0b31db79b
|
4
|
+
data.tar.gz: 6c9f7ce3109c45498739b5187b31534496afd820
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0a6a350f0c2c52f220d1e0af61b22e4f514a54eaeabc3db9c751abe6db37215507b5b8cfc62f718b731a436ab98e276017bfdc045b2a161dd4e182c51f18b3e6
|
7
|
+
data.tar.gz: 9aff6ac797738892b05e69142788f2e6c3f306632f9f16d089d83deec31069258b8df9b572fc4f1a52b014d6cd541cbd296a2acd3ff14379c06581c53aa8b20f
|
data/Gemfile
CHANGED
data/lib/sort_out.rb
CHANGED
@@ -2,8 +2,21 @@
|
|
2
2
|
|
3
3
|
require 'active_record'
|
4
4
|
|
5
|
+
require 'sort_out/action_controller'
|
5
6
|
require 'sort_out/helpers'
|
6
7
|
require 'sort_out/active_record'
|
7
8
|
|
8
9
|
ActiveRecord::Base.send :extend, SortOut::ActiveRecord
|
9
|
-
|
10
|
+
ActionController::Base.send :include, SortOut::ActionController
|
11
|
+
ActionView::Base.send :include, SortOut::Helpers
|
12
|
+
|
13
|
+
module SortOut
|
14
|
+
mattr_accessor :action_controller_options
|
15
|
+
@@action_controller_options = {}
|
16
|
+
|
17
|
+
mattr_accessor :sort
|
18
|
+
@@sort = nil
|
19
|
+
|
20
|
+
mattr_accessor :direction
|
21
|
+
@@direction = nil
|
22
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module SortOut
|
2
|
+
module ActionController
|
3
|
+
def self.included(base)
|
4
|
+
|
5
|
+
base.instance_eval do
|
6
|
+
extend ClassMethods
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def store_sortable(options = {})
|
12
|
+
SortOut.action_controller_options = options.reverse_merge get: :get_sortable, set: :set_sortable
|
13
|
+
|
14
|
+
define_method :store_sortable_before_filter do
|
15
|
+
if SortOut.sort.present? || SortOut.direction.present?
|
16
|
+
send SortOut.action_controller_options[:set], { sort: SortOut.sort, direction: SortOut.direction }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
before_filter :get_sort_and_direction, only: [ :index ]
|
21
|
+
before_filter :store_sortable_before_filter, only: [ :index ]
|
22
|
+
end
|
23
|
+
|
24
|
+
def set_localize_sortable(*actions)
|
25
|
+
skip_before_filter :get_sort_and_direction, :store_sortable_before_filter
|
26
|
+
before_filter :get_sort_and_direction, only: actions.flatten
|
27
|
+
before_filter :store_sortable_before_filter, only: actions.flatten
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def sortable_params
|
32
|
+
get_sortable = if SortOut.action_controller_options.any? and respond_to? SortOut.action_controller_options[:get]
|
33
|
+
send SortOut.action_controller_options[:get]
|
34
|
+
end
|
35
|
+
|
36
|
+
(get_sortable || {}).reverse_merge(sort: nil, direction: nil)
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_sort_and_direction
|
40
|
+
if params[:sort].present?
|
41
|
+
SortOut.sort = params[:sort]
|
42
|
+
SortOut.direction = params[:direction]
|
43
|
+
else
|
44
|
+
SortOut.sort = sortable_params[:sort]
|
45
|
+
SortOut.direction = sortable_params[:direction]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -1,15 +1,22 @@
|
|
1
1
|
module SortOut
|
2
2
|
module ActiveRecord
|
3
3
|
def sortable(options = {})
|
4
|
-
default_options = { :default_column =>
|
4
|
+
default_options = { :default_column => [:name, :asc], :after => [], :by => [] }
|
5
5
|
@sortable_options = default_options.merge(options) unless options.nil?
|
6
|
-
@sortable_options[:
|
6
|
+
@sortable_options[:default_column] = [@sortable_options[:default_column], :asc] unless @sortable_options[:default_column].is_a? Array
|
7
|
+
@sortable_options[:by] << @sortable_options[:default_column][0]
|
7
8
|
end
|
8
9
|
|
9
|
-
def sort_out(column, direction)
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def sort_out(column, direction = nil)
|
11
|
+
if column.is_a? Hash
|
12
|
+
direction = column[:direction]
|
13
|
+
column = column[:sort]
|
14
|
+
end
|
15
|
+
|
16
|
+
sort_column = sortable_column(column).to_s.downcase
|
17
|
+
sort_column << sortable_direction(column, direction)
|
18
|
+
|
19
|
+
model = self.order(sort_column)
|
13
20
|
@sortable_options[:after].each do |order|
|
14
21
|
model = model.order(order.join(' ')) if order[0].to_s != sort_column
|
15
22
|
end
|
@@ -24,7 +31,18 @@ module SortOut
|
|
24
31
|
return column
|
25
32
|
end
|
26
33
|
end
|
27
|
-
@sortable_options[:default_column]
|
34
|
+
@sortable_options[:default_column][0]
|
35
|
+
end
|
36
|
+
|
37
|
+
def sortable_direction(column, direction)
|
38
|
+
if direction.present?
|
39
|
+
" desc"
|
40
|
+
elsif column.blank?
|
41
|
+
" #{@sortable_options[:default_column][1].to_s}"
|
42
|
+
else
|
43
|
+
""
|
44
|
+
end
|
28
45
|
end
|
29
46
|
end
|
30
47
|
end
|
48
|
+
|
data/lib/sort_out/helpers.rb
CHANGED
@@ -2,27 +2,53 @@
|
|
2
2
|
module SortOut
|
3
3
|
module Helpers
|
4
4
|
def sortable(column, title = nil, options = {})
|
5
|
-
|
6
|
-
options = default_options.merge(options) unless options.nil?
|
5
|
+
options.reverse_merge! default: false, direction: true, params: {}
|
7
6
|
title ||= column.titleize
|
8
7
|
direction = nil
|
9
|
-
if column.to_s ==
|
10
|
-
if
|
11
|
-
|
12
|
-
|
8
|
+
if column.to_s == SortOut.sort || (options[:default] and SortOut.sort.blank?)
|
9
|
+
if SortOut.direction.blank?
|
10
|
+
if options[:default].to_s == 'desc' and SortOut.sort.blank?
|
11
|
+
title << '▲' if options[:direction]
|
12
|
+
else
|
13
|
+
direction = "desc"
|
14
|
+
title << '▼' if options[:direction]
|
15
|
+
end
|
13
16
|
else
|
14
|
-
title << '▲'
|
17
|
+
title << '▲' if options[:direction]
|
15
18
|
end
|
16
19
|
end
|
17
20
|
#▴ ▾ ▼ ▲
|
18
|
-
link_to title, params.merge({:
|
21
|
+
link_to title, params.merge({ sort: column, direction: direction }.merge(options[:params]))
|
19
22
|
end
|
20
23
|
|
21
24
|
def sortable_fields
|
22
25
|
html = "".html_safe
|
23
|
-
html << hidden_field_tag(:sort,
|
24
|
-
html << hidden_field_tag(:direction,
|
26
|
+
html << hidden_field_tag(:sort, SortOut.sort) if SortOut.sort.present?
|
27
|
+
html << hidden_field_tag(:direction, SortOut.direction) if SortOut.direction.present?
|
25
28
|
html
|
26
29
|
end
|
30
|
+
|
31
|
+
def sortable_current(columns, default, options)
|
32
|
+
options.reverse_merge! model_name: controller_name.singularize
|
33
|
+
|
34
|
+
column = if SortOut.sort.present? and columns.include? SortOut.sort.to_sym
|
35
|
+
SortOut.sort.to_sym
|
36
|
+
else
|
37
|
+
default.first
|
38
|
+
end
|
39
|
+
|
40
|
+
title = tl("#{options[:model_name]}.#{column.to_s}")
|
41
|
+
|
42
|
+
if SortOut.direction.blank?
|
43
|
+
if default[1].to_s == 'desc' and SortOut.sort.blank?
|
44
|
+
title << '▲'
|
45
|
+
else
|
46
|
+
title << '▼'
|
47
|
+
end
|
48
|
+
else
|
49
|
+
title << '▲'
|
50
|
+
end
|
51
|
+
end
|
27
52
|
end
|
28
53
|
end
|
54
|
+
|
data/lib/sort_out/version.rb
CHANGED
metadata
CHANGED
@@ -1,65 +1,53 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: sort_out
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.1.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Felipe Diesel
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
date: 2011-04-01 00:00:00 -03:00
|
14
|
-
default_executable:
|
11
|
+
date: 2013-11-14 00:00:00.000000000 Z
|
15
12
|
dependencies: []
|
16
|
-
|
17
13
|
description: ActiveRecord extension that makes easy to order fields.
|
18
|
-
email:
|
14
|
+
email:
|
19
15
|
- felipediesel@gmail.com
|
20
16
|
executables: []
|
21
|
-
|
22
17
|
extensions: []
|
23
|
-
|
24
18
|
extra_rdoc_files: []
|
25
|
-
|
26
|
-
files:
|
19
|
+
files:
|
27
20
|
- .gitignore
|
28
21
|
- Gemfile
|
29
22
|
- README.markdown
|
30
23
|
- Rakefile
|
31
24
|
- lib/sort_out.rb
|
25
|
+
- lib/sort_out/action_controller.rb
|
32
26
|
- lib/sort_out/active_record.rb
|
33
27
|
- lib/sort_out/helpers.rb
|
34
28
|
- lib/sort_out/version.rb
|
35
29
|
- sort_out.gemspec
|
36
|
-
has_rdoc: true
|
37
30
|
homepage: http://felipediesel.com
|
38
31
|
licenses: []
|
39
|
-
|
32
|
+
metadata: {}
|
40
33
|
post_install_message:
|
41
34
|
rdoc_options: []
|
42
|
-
|
43
|
-
require_paths:
|
35
|
+
require_paths:
|
44
36
|
- lib
|
45
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: "0"
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
57
47
|
requirements: []
|
58
|
-
|
59
48
|
rubyforge_project: sort_out
|
60
|
-
rubygems_version:
|
49
|
+
rubygems_version: 2.0.6
|
61
50
|
signing_key:
|
62
|
-
specification_version:
|
51
|
+
specification_version: 4
|
63
52
|
summary: ActiveRecord extension that makes easy to order fields.
|
64
53
|
test_files: []
|
65
|
-
|