alphabetical_paginate 1.0.3 → 1.1.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.
@@ -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