alphabetical_paginate 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/alphabetical_paginate/array.rb +3 -1
- data/lib/alphabetical_paginate/controller_helper.rb +76 -0
- data/lib/alphabetical_paginate/railtie.rb +2 -0
- data/lib/alphabetical_paginate/version.rb +1 -1
- data/lib/alphabetical_paginate/view_helpers.rb +3 -3
- metadata +2 -2
- data/lib/alphabetical_paginate/controller.rb +0 -72
@@ -4,7 +4,8 @@ class Array
|
|
4
4
|
others: true, pagination_class: "pagination-centered"}
|
5
5
|
params[:paginate_all] ||= false
|
6
6
|
params[:numbers] = true if !params.has_key? :numbers
|
7
|
-
params[:others] = true if !params.has_key? :
|
7
|
+
params[:others] = true if !params.has_key? :others
|
8
|
+
params[:default_field] ||= "a"
|
8
9
|
params[:pagination_class] ||= "pagination-centered"
|
9
10
|
output = []
|
10
11
|
availableLetters = {}
|
@@ -33,6 +34,7 @@ class Array
|
|
33
34
|
end
|
34
35
|
params[:availableLetters] = availableLetters.collect{|k,v| k.to_s}
|
35
36
|
params[:currentField] = current_field
|
37
|
+
output.sort! {|x, y| yield(x).to_s <=> yield(y).to_s }
|
36
38
|
return output, params
|
37
39
|
end
|
38
40
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module AlphabeticalPaginate
|
2
|
+
module ControllerHelpers
|
3
|
+
def self.included(base)
|
4
|
+
base.extend(self)
|
5
|
+
end
|
6
|
+
|
7
|
+
def alpha_paginate current_field, params = {enumerate:false, default_field: "a",
|
8
|
+
paginate_all: false, numbers: true,
|
9
|
+
others: true, pagination_class: "pagination-centered",
|
10
|
+
batch_size: 500, db_mode: false,
|
11
|
+
db_field: "id"}
|
12
|
+
params[:paginate_all] ||= false
|
13
|
+
params[:numbers] = true if !params.has_key? :numbers
|
14
|
+
params[:others] = true if !params.has_key? :others
|
15
|
+
params[:pagination_class] ||= "pagination-centered"
|
16
|
+
params[:batch_size] ||= 500
|
17
|
+
params[:default_field] ||= "a"
|
18
|
+
params[:db_mode] ||= false
|
19
|
+
params[:field] ||= "id"
|
20
|
+
|
21
|
+
output = []
|
22
|
+
|
23
|
+
if current_field == nil
|
24
|
+
current_field = params[:default_field]
|
25
|
+
end
|
26
|
+
|
27
|
+
if params[:db_mode]
|
28
|
+
if !ActiveRecord::Base.connection.adapter_name.downcase.include? "mysql"
|
29
|
+
raise "You need a mysql database to ues db_mode with alphabetical_paginate"
|
30
|
+
end
|
31
|
+
params[:paginate_all] = true
|
32
|
+
params[:availableLetters] = []
|
33
|
+
|
34
|
+
case current_field[0].downcase
|
35
|
+
when /[a-z]/
|
36
|
+
output = self.where("%s REGEXP '^%s.*'" % [params[:db_field], current_field])
|
37
|
+
when /[0-9]/
|
38
|
+
if params[:enumerate]
|
39
|
+
output = self.where("%s REGEXP '^%s.*'" % [params[:db_field], current_field])
|
40
|
+
else
|
41
|
+
output = self.where("%s REGEXP '^[0-9].*'" % [params[:db_field], current_field])
|
42
|
+
end
|
43
|
+
else
|
44
|
+
output = self.where("%s REGEXP '^[^a-z0-9].*'" % [params[:db_field], current_field])
|
45
|
+
end
|
46
|
+
output.sort! {|x, y| x.send(params[:db_field]) <=> y.send(params[:db_field])}
|
47
|
+
else
|
48
|
+
availableLetters = {}
|
49
|
+
self.find_each({batch_size: params[:batch_size]}) do |x|
|
50
|
+
field_val = block_given? ? yield(x).to_s : x.id.to_s
|
51
|
+
field_letter = field_val[0].downcase
|
52
|
+
case field_letter
|
53
|
+
when /[a-z]/
|
54
|
+
availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
|
55
|
+
output << x if current_field =~ /[a-z]/ && field_letter == current_field
|
56
|
+
when /[0-9]/
|
57
|
+
if params[:enumerate]
|
58
|
+
availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
|
59
|
+
output << x if current_field =~ /[0-9]/ && field_letter == current_field
|
60
|
+
else
|
61
|
+
availableLetters['0'] = true if !availableLetters.has_key? 'numbers'
|
62
|
+
output << x if current_field == "0"
|
63
|
+
end
|
64
|
+
else
|
65
|
+
availableLetters['*'] = true if !availableLetters.has_key? 'other'
|
66
|
+
output << x if current_field == "*"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
params[:availableLetters] = availableLetters.collect{|k,v| k.to_s}
|
70
|
+
output.sort! {|x,y| yield(x).to_s <=> yield(y).to_s }
|
71
|
+
end
|
72
|
+
params[:currentField] = current_field
|
73
|
+
return output, params
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'alphabetical_paginate/view_helpers'
|
2
|
+
require 'alphabetical_paginate/controller_helper'
|
2
3
|
module AlphabeticalPaginate
|
3
4
|
class Railtie < Rails::Railtie
|
4
5
|
initializer "alphabetical_paginate.view_helpers" do
|
@@ -6,6 +7,7 @@ module AlphabeticalPaginate
|
|
6
7
|
end
|
7
8
|
initializer "alphabetical_paginate.controller_helpers" do
|
8
9
|
ActiveRecord::Relation.send :include, ControllerHelpers
|
10
|
+
ActiveRecord::Base.send :include, ControllerHelpers
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
@@ -18,10 +18,10 @@ module AlphabeticalPaginate
|
|
18
18
|
range.each do |l|
|
19
19
|
if l == params[:currentField]
|
20
20
|
links += '<li class="active"><a href="#" data-letter="' + l + '">' + l + "</a></li>"
|
21
|
-
elsif params[:availableLetters].include? l
|
22
|
-
links += '<li><a href="?letter=" data-letter="' + l + '">' + l + "</a></li>"
|
21
|
+
elsif params[:db_mode] or params[:availableLetters].include? l
|
22
|
+
links += '<li><a href="?letter=' + l + '" data-letter="' + l + '">' + l + "</a></li>"
|
23
23
|
else
|
24
|
-
links += '<li class="disabled"><a href="?letter=" data-letter="' + l + '">' + l + "</a></li>"
|
24
|
+
links += '<li class="disabled"><a href="?letter="' + l + ' data-letter="' + l + '">' + l + "</a></li>"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
else
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alphabetical_paginate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -90,7 +90,7 @@ files:
|
|
90
90
|
- alphabetical_paginate.gemspec
|
91
91
|
- lib/alphabetical_paginate.rb
|
92
92
|
- lib/alphabetical_paginate/array.rb
|
93
|
-
- lib/alphabetical_paginate/
|
93
|
+
- lib/alphabetical_paginate/controller_helper.rb
|
94
94
|
- lib/alphabetical_paginate/engine.rb
|
95
95
|
- lib/alphabetical_paginate/railtie.rb
|
96
96
|
- lib/alphabetical_paginate/version.rb
|
@@ -1,72 +0,0 @@
|
|
1
|
-
module AlphabeticalPaginate
|
2
|
-
module ControllerHelpers
|
3
|
-
class Relation
|
4
|
-
def alpha_paginate current_field, params = {enumerate:false, default_field: "a",
|
5
|
-
paginate_all: false, numbers: true,
|
6
|
-
others: true, pagination_class: "pagination-centered",
|
7
|
-
batch_size: 500, db_mode: false,
|
8
|
-
db_field: "id"}
|
9
|
-
params[:paginate_all] ||= false
|
10
|
-
params[:numbers] = true if !params.has_key? :numbers
|
11
|
-
params[:others] = true if !params.has_key? :numbers
|
12
|
-
params[:pagination_class] ||= "pagination-centered"
|
13
|
-
params[:batch_size] ||= 500
|
14
|
-
params[:db_mode] ||= false
|
15
|
-
params[:field] ||= "id"
|
16
|
-
|
17
|
-
if params[:db_mode]
|
18
|
-
if !ActiveRecord::Base.connection.adapter_name.downcase.include? "mysql"
|
19
|
-
raise "You need a mysql database to ues db_mode with alphabetical_paginate"
|
20
|
-
end
|
21
|
-
params[:paginate_all] = true
|
22
|
-
end
|
23
|
-
|
24
|
-
output = []
|
25
|
-
|
26
|
-
if current_field == nil
|
27
|
-
current_field = params[:default_field]
|
28
|
-
end
|
29
|
-
|
30
|
-
if params[:db_mode]
|
31
|
-
case field_letter
|
32
|
-
when /[a-z]/
|
33
|
-
output = self.where("%s REGEXP '^%s.*'" % [params[:db_field], current_field])
|
34
|
-
when /[0-9]/
|
35
|
-
if params[:enumerate]
|
36
|
-
output = self.where("%s REGEXP '^%s.*'" % [params[:db_field], current_field])
|
37
|
-
else
|
38
|
-
output = self.where("%s REGEXP '^[0-9].*'" % [params[:db_field], current_field])
|
39
|
-
end
|
40
|
-
else
|
41
|
-
output = self.where("%s REGEXP '^[a-z0-9].*'" % [params[:db_field], current_field])
|
42
|
-
end
|
43
|
-
else
|
44
|
-
availableLetters = {}
|
45
|
-
self.find_each({batch_size: params[:batch_size]}) do |x|
|
46
|
-
field_val = block_given? ? yield(x).to_s : x.id.to_s
|
47
|
-
field_letter = field_val[0].downcase
|
48
|
-
case field_letter
|
49
|
-
when /[a-z]/
|
50
|
-
availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
|
51
|
-
output << x if current_field =~ /[a-z]/ && field_letter == current_field
|
52
|
-
when /[0-9]/
|
53
|
-
if params[:enumerate]
|
54
|
-
availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
|
55
|
-
output << x if current_field =~ /[0-9]/ && field_letter == current_field
|
56
|
-
else
|
57
|
-
availableLetters['0'] = true if !availableLetters.has_key? 'numbers'
|
58
|
-
output << x if current_field == "0"
|
59
|
-
end
|
60
|
-
else
|
61
|
-
availableLetters['*'] = true if !availableLetters.has_key? 'other'
|
62
|
-
output << x if current_field == "*"
|
63
|
-
end
|
64
|
-
end
|
65
|
-
params[:availableLetters] = availableLetters.collect{|k,v| k.to_s}
|
66
|
-
end
|
67
|
-
params[:currentField] = current_field
|
68
|
-
return output, params
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|