yap 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/yap.rb +17 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 652e0f8b08ebf6db3a3d4abcef18ff18c2b396dd
|
4
|
+
data.tar.gz: bc167399e7a104e1a2976c321e234a1ae6ef0e73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ddb459b81ce8a96002c204820ddda8ded839280f9033c943dc48b98b44533593e829c48d5671faa8c72eef95ff47171b46b8a93fec34cb1807179d8fab21262
|
7
|
+
data.tar.gz: 9f27ba7825b48da80fd3a2d520c3709498aa99a8da7a53b7530c7c0bb5a89490128e232b1caacf06ccccd7b9148a1168a76b5baa255270e632ce34fac706fa6d
|
data/lib/yap.rb
CHANGED
@@ -27,6 +27,8 @@ module Yap
|
|
27
27
|
end
|
28
28
|
|
29
29
|
included do
|
30
|
+
extend ClassMethods
|
31
|
+
|
30
32
|
scope :paginate, -> (params = {}) {
|
31
33
|
page, per_page, sort, direction = extract_pagination_params(params)
|
32
34
|
limit(per_page).offset((page-1)*per_page).order(sort => direction)
|
@@ -35,17 +37,17 @@ module Yap
|
|
35
37
|
private
|
36
38
|
|
37
39
|
def self.extract_pagination_params(params)
|
38
|
-
page =
|
39
|
-
per_page =
|
40
|
-
sort =
|
41
|
-
direction =
|
40
|
+
page = extract_number(params[:page], DEFAULTS.page)
|
41
|
+
per_page = extract_number(params[:per_page], DEFAULTS.per_page)
|
42
|
+
sort = extract_sort(params[:sort])
|
43
|
+
direction = extract_direction(params[:direction])
|
42
44
|
|
43
45
|
return page, per_page, sort, direction
|
44
46
|
end
|
45
47
|
|
46
|
-
def self.extract_number(number)
|
48
|
+
def self.extract_number(number, default)
|
47
49
|
begin
|
48
|
-
number = Integer(number)
|
50
|
+
number = number.present? ? Integer(number) : default
|
49
51
|
rescue
|
50
52
|
raise PaginationError.new("'#{number}' is not a valid number.")
|
51
53
|
end
|
@@ -55,16 +57,24 @@ module Yap
|
|
55
57
|
end
|
56
58
|
|
57
59
|
def self.extract_sort(sort)
|
60
|
+
sort = sort.present? ? sort : DEFAULTS.sort
|
58
61
|
raise PaginationError.new("Cannot sort by '#{sort}'.") unless column_names.include? sort.to_s
|
59
62
|
sort
|
60
63
|
end
|
61
64
|
|
62
65
|
def self.extract_direction(direction)
|
63
|
-
dir = direction.downcase.to_sym
|
66
|
+
dir = direction.present? ? direction.downcase.to_sym : DEFAULTS.direction
|
64
67
|
raise PaginationError.new("'#{direction}' is not a valid direction. Use 'asc' or 'desc'.") unless [:asc, :desc].include? dir
|
65
68
|
dir
|
66
69
|
end
|
67
70
|
end
|
68
71
|
|
72
|
+
module ClassMethods
|
73
|
+
def last_page(params)
|
74
|
+
per_page = extract_number(params[:per_page], DEFAULTS.per_page)
|
75
|
+
(count / per_page.to_f).ceil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
69
79
|
class PaginationError < StandardError; end
|
70
80
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Finn Glöe
|
@@ -58,7 +58,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 2.1.0
|
62
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - ">="
|