alphabetical_paginate 1.5.0 → 1.6.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.
@@ -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