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.
@@ -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? :numbers
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
@@ -1,3 +1,3 @@
1
1
  module AlphabeticalPaginate
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.0"
3
3
  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.3
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/controller.rb
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