alphabetical_paginate 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
@@ -5,71 +5,80 @@ module AlphabeticalPaginate
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def alpha_paginate current_field, params = {enumerate:false, default_field: "a",
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
paginate_all: false, numbers: true,
|
9
|
+
others: true, pagination_class: "pagination-centered",
|
10
|
+
batch_size: 500, db_mode: false,
|
11
|
+
db_field: "id", include_all: true,
|
12
|
+
js: true, support_language: :en}
|
13
13
|
params[:paginate_all] ||= false
|
14
|
+
params[:support_language] ||= :en
|
15
|
+
params[:language] = AlphabeticalPaginate::Language.new(params[:support_language])
|
16
|
+
params[:include_all] = true if !params.has_key? :include_all
|
14
17
|
params[:numbers] = true if !params.has_key? :numbers
|
15
18
|
params[:others] = true if !params.has_key? :others
|
16
19
|
params[:js] = true if !params.has_key? :js
|
17
20
|
params[:pagination_class] ||= "pagination-centered"
|
18
21
|
params[:batch_size] ||= 500
|
19
|
-
params[:default_field] ||= "
|
22
|
+
params[:default_field] ||= params[:include_all] ? "all" : params[:language].default_letter
|
20
23
|
params[:db_mode] ||= false
|
21
|
-
params[:
|
24
|
+
params[:db_field] ||= "id"
|
22
25
|
|
23
26
|
output = []
|
24
27
|
|
25
28
|
if current_field == nil
|
26
29
|
current_field = params[:default_field]
|
27
30
|
end
|
31
|
+
all = params[:include_all] && current_field.downcase == "all"
|
28
32
|
|
29
33
|
if params[:db_mode]
|
30
34
|
if !ActiveRecord::Base.connection.adapter_name.downcase.include? "mysql"
|
31
|
-
raise "You need a mysql database to
|
35
|
+
raise "You need a mysql database to use db_mode with alphabetical_paginate"
|
32
36
|
end
|
33
37
|
params[:paginate_all] = true
|
34
38
|
params[:availableLetters] = []
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
output = self.where("%s REGEXP '^%s.*'" % [params[:db_field], current_field])
|
40
|
+
if all
|
41
|
+
output = self
|
42
|
+
else
|
43
|
+
case current_field[0].mb_chars.downcase.to_s
|
44
|
+
when params[:language].letters_regexp
|
45
|
+
output = self.where("LOWER(%s) REGEXP '^%s.*'" % [params[:db_field], current_field])
|
46
|
+
when /[0-9]/
|
47
|
+
if params[:enumerate]
|
48
|
+
output = self.where("LOWER(%s) REGEXP '^%s.*'" % [params[:db_field], current_field])
|
49
|
+
else
|
50
|
+
output = self.where("LOWER(%s) REGEXP '^[0-9].*'" % [params[:db_field], current_field])
|
51
|
+
end
|
42
52
|
else
|
43
|
-
output = self.where("%s REGEXP '^[
|
53
|
+
output = self.where("LOWER(%s) REGEXP '^[^a-z0-9].*'" % [params[:db_field], current_field])
|
44
54
|
end
|
45
|
-
else
|
46
|
-
output = self.where("%s REGEXP '^[^a-z0-9].*'" % [params[:db_field], current_field])
|
47
55
|
end
|
48
|
-
output.sort! {|x, y| x.send(params[:db_field]) <=> y.send(params[:db_field])}
|
56
|
+
#output.sort! {|x, y| x.send(params[:db_field]) <=> y.send(params[:db_field])}
|
57
|
+
output.order("#{params[:db_field]} ASC")
|
49
58
|
else
|
50
59
|
availableLetters = {}
|
51
60
|
self.find_each({batch_size: params[:batch_size]}) do |x|
|
52
61
|
field_val = block_given? ? yield(x).to_s : x.id.to_s
|
53
|
-
field_letter = field_val[0].downcase
|
62
|
+
field_letter = field_val[0].mb_chars.downcase.to_s
|
54
63
|
case field_letter
|
55
|
-
when
|
64
|
+
when params[:language].letters_regexp
|
56
65
|
availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
|
57
|
-
output << x if current_field =~
|
66
|
+
output << x if all || (current_field =~ params[:language].letters_regexp && field_letter == current_field)
|
58
67
|
when /[0-9]/
|
59
68
|
if params[:enumerate]
|
60
69
|
availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
|
61
|
-
output << x if current_field =~ /[0-9]/ && field_letter == current_field
|
70
|
+
output << x if all || (current_field =~ /[0-9]/ && field_letter == current_field)
|
62
71
|
else
|
63
|
-
availableLetters['0'] = true if !availableLetters.has_key? 'numbers'
|
64
|
-
output << x if current_field == "0"
|
72
|
+
availableLetters['0-9'] = true if !availableLetters.has_key? 'numbers'
|
73
|
+
output << x if all || current_field == "0-9"
|
65
74
|
end
|
66
75
|
else
|
67
76
|
availableLetters['*'] = true if !availableLetters.has_key? 'other'
|
68
|
-
output << x if current_field == "*"
|
77
|
+
output << x if all || current_field == "*"
|
69
78
|
end
|
70
79
|
end
|
71
80
|
params[:availableLetters] = availableLetters.collect{|k,v| k.to_s}
|
72
|
-
output.sort! {|x,y| yield(x).to_s <=> yield(y).to_s }
|
81
|
+
output.sort! {|x, y| block_given? ? (yield(x).to_s <=> yield(y).to_s) : (x.id.to_s <=> y.id.to_s) }
|
73
82
|
end
|
74
83
|
params[:currentField] = current_field
|
75
84
|
return output, params
|
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.
|
4
|
+
version: 1.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|