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
- paginate_all: false, numbers: true,
9
- others: true, pagination_class: "pagination-centered",
10
- batch_size: 500, db_mode: false,
11
- db_field: "id",
12
- js: true}
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] ||= "a"
22
+ params[:default_field] ||= params[:include_all] ? "all" : params[:language].default_letter
20
23
  params[:db_mode] ||= false
21
- params[:field] ||= "id"
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 ues db_mode with alphabetical_paginate"
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
- case current_field[0].downcase
37
- when /[a-z]/
38
- output = self.where("%s REGEXP '^%s.*'" % [params[:db_field], current_field])
39
- when /[0-9]/
40
- if params[:enumerate]
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 '^[0-9].*'" % [params[:db_field], current_field])
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 /[a-z]/
64
+ when params[:language].letters_regexp
56
65
  availableLetters[field_letter] = true if !availableLetters.has_key? field_letter
57
- output << x if current_field =~ /[a-z]/ && field_letter == 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
@@ -1,3 +1,3 @@
1
1
  module AlphabeticalPaginate
2
- VERSION = "1.5.0"
2
+ VERSION = "1.6.0"
3
3
  end
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.5.0
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-13 00:00:00.000000000 Z
12
+ date: 2013-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler