yap 1.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -3
- data/lib/yap.rb +32 -3
- data/lib/yap/filter.rb +1 -1
- data/lib/yap/version.rb +3 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c06ad590d341b79057d52f99af8c20400b8ac9e
|
4
|
+
data.tar.gz: f6b3102bf46259bf4a60fc1178a864e357236b39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76221f22ab11ecc78f5c9f9f7b27b576d9be29621f2fa62a02ceef6d24158a7ef7311fec1872af0b62960fa2816fd44c316a0b9c3ee74ffc153e35e28259fc75
|
7
|
+
data.tar.gz: 25a75e83e8d189a70d24b0d71682840816236743541d1230ee98969bfe254b82009df3b483e1311b2de48da237ebd85b2132105aebd5b8d9ebe465b608dc8654
|
data/README.md
CHANGED
@@ -67,6 +67,17 @@ Assuming you included `Yap` into `User`, you can now do something like this:
|
|
67
67
|
end
|
68
68
|
# => total number of results
|
69
69
|
|
70
|
+
User.paginate(
|
71
|
+
sort: {
|
72
|
+
'gender' => 'desc',
|
73
|
+
'date_of_birth' => 'asc'
|
74
|
+
}
|
75
|
+
)
|
76
|
+
# => Sort by gender and date_of_birth (method 1)
|
77
|
+
|
78
|
+
User.paginate(sort: 'gender,date_of_birth', direction: 'desc,asc')
|
79
|
+
# => Sort by gender and date_of_birth (method 2)
|
80
|
+
|
70
81
|
User.filter('gender' => 'f')
|
71
82
|
# => All female users
|
72
83
|
|
@@ -149,11 +160,14 @@ If an option cannot be parsed it will raise `Yap::PaginationError` or `Yap::Filt
|
|
149
160
|
end
|
150
161
|
end
|
151
162
|
|
152
|
-
##
|
163
|
+
## Changelog
|
153
164
|
|
154
|
-
|
165
|
+
### 1.2
|
155
166
|
|
156
|
-
|
167
|
+
* added sorting by multiple elements
|
168
|
+
* method 1: ?sort[team]=desc&sort[date_of_birth]=asc
|
169
|
+
* method 2: ?sort=team,date_of_birth&direction=desc,asc
|
170
|
+
* missing directions will fall back to default
|
157
171
|
|
158
172
|
### 1.1
|
159
173
|
|
data/lib/yap.rb
CHANGED
@@ -55,10 +55,9 @@ module Yap
|
|
55
55
|
if DEFAULTS.hard_limit && per_page > DEFAULTS.hard_limit
|
56
56
|
raise PaginationError.new("Not more than #{DEFAULTS.hard_limit} items per page accepted.")
|
57
57
|
end
|
58
|
-
sort =
|
59
|
-
direction = extract_direction(params[:direction])
|
58
|
+
sort = extract_order(params[:sort], params[:direction])
|
60
59
|
|
61
|
-
return page, per_page,
|
60
|
+
return page, per_page, sort
|
62
61
|
end
|
63
62
|
|
64
63
|
def self.extract_number(number, default)
|
@@ -73,6 +72,36 @@ module Yap
|
|
73
72
|
number
|
74
73
|
end
|
75
74
|
|
75
|
+
def self.extract_order(sort, direction)
|
76
|
+
sort = sort.split(',') if sort.is_a?(String) && sort =~ /,/
|
77
|
+
direction = direction.split(',') if direction.is_a?(String) && direction =~ /,/
|
78
|
+
|
79
|
+
case sort
|
80
|
+
when Array
|
81
|
+
order = []
|
82
|
+
direction = Array.wrap direction
|
83
|
+
sort.each_with_index do |s, i|
|
84
|
+
order << build_order_by(s, direction[i] || DEFAULTS.direction)
|
85
|
+
end
|
86
|
+
|
87
|
+
order
|
88
|
+
when Hash
|
89
|
+
sort.map do |s, d|
|
90
|
+
build_order_by(s, d)
|
91
|
+
end
|
92
|
+
else
|
93
|
+
build_order_by sort, direction
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.build_order_by(sort, direction)
|
98
|
+
sort = extract_column(sort)
|
99
|
+
direction = extract_direction(direction)
|
100
|
+
|
101
|
+
(sort =~ /\./ ? "#{sort} #{direction}" : { sort => direction })
|
102
|
+
end
|
103
|
+
private_class_method :build_order_by
|
104
|
+
|
76
105
|
def self.extract_column(sort)
|
77
106
|
sort ||= DEFAULTS.sort
|
78
107
|
column = map_column(sort.to_s.downcase)
|
data/lib/yap/filter.rb
CHANGED
@@ -21,13 +21,13 @@ module Yap
|
|
21
21
|
when /(.+)\.{2}(.+)/
|
22
22
|
value = $1..$2
|
23
23
|
else
|
24
|
+
# Convert null to ruby nil to use 'IS NULL' in SQL.
|
24
25
|
value = value.downcase == 'null' ? nil : value
|
25
26
|
end
|
26
27
|
|
27
28
|
# Ensure filter contains an array to append to.
|
28
29
|
self[match][column] ||= []
|
29
30
|
|
30
|
-
# Convert null to ruby nil to use 'IS NULL' in SQL.
|
31
31
|
self[match][column] << value
|
32
32
|
end
|
33
33
|
end
|
data/lib/yap/version.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Finn Glöe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -53,7 +53,8 @@ files:
|
|
53
53
|
- lib/yap/exceptions.rb
|
54
54
|
- lib/yap/filter.rb
|
55
55
|
- lib/yap/filterable.rb
|
56
|
-
|
56
|
+
- lib/yap/version.rb
|
57
|
+
homepage: https://github.com/1and1/yap
|
57
58
|
licenses:
|
58
59
|
- GPL v2
|
59
60
|
metadata: {}
|
@@ -73,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
74
|
version: '0'
|
74
75
|
requirements: []
|
75
76
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.4.
|
77
|
+
rubygems_version: 2.4.6
|
77
78
|
signing_key:
|
78
79
|
specification_version: 4
|
79
80
|
summary: Yet another paginator for Ruby on Rails
|