yap 1.4.2 → 2.0.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.
- checksums.yaml +5 -5
- data/README.md +10 -4
- data/lib/yap.rb +2 -1
- data/lib/yap/column_mapper.rb +31 -6
- data/lib/yap/filter.rb +1 -1
- data/lib/yap/filterable.rb +5 -5
- data/lib/yap/params_extractor.rb +3 -2
- data/lib/yap/version.rb +1 -1
- metadata +14 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 31ce01326f81f7238e39694bc1fc985c61916804f70c8824180b86d55497f4cb
|
4
|
+
data.tar.gz: 18283789203a2b51c7af66e50fd328ba7d085f2a36fe2143c52b4bd76e043156
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbdd01ead34574cc9d91428c0d7ddec3e0e127de9ceff731d6ae308490c231a0f9a98c6bbe426a35f484b0a0fd00836881fe8ed2f65059d40d9d58568495904b
|
7
|
+
data.tar.gz: fdb8383e6ce8f5acbd0546291b782b9a0d0918bb87d6542489bff47140ab3b4ec35e7a1e259c1a587a9b2ef475c6c6c933282b9c39dda988253d5ee57bf233fa
|
data/README.md
CHANGED
@@ -80,22 +80,22 @@ Assuming you included `Yap` into `User`, you can now do something like this:
|
|
80
80
|
User.paginate(sort: 'gender,date_of_birth', direction: 'desc,asc')
|
81
81
|
# => Sort by gender and date_of_birth (method 2)
|
82
82
|
|
83
|
-
User.
|
83
|
+
User.filtered('gender' => 'f')
|
84
84
|
# => All female users
|
85
85
|
|
86
|
-
User.
|
86
|
+
User.filtered(
|
87
87
|
'team_id' => '1,2',
|
88
88
|
'gender' => 'm'
|
89
89
|
)
|
90
90
|
# => All males of teams 1 and 2
|
91
91
|
|
92
|
-
User.
|
92
|
+
User.filtered(
|
93
93
|
# Note that '0...3' means [0,1,2] while '0..3' means [0,1,2,3]
|
94
94
|
'date_of_birth' => '1990-01-01...1991-01-01'
|
95
95
|
)
|
96
96
|
# => All users born in 1990
|
97
97
|
|
98
|
-
User.
|
98
|
+
User.filtered('team_id' => '!null')
|
99
99
|
# => All users with any team
|
100
100
|
|
101
101
|
User.paginate(
|
@@ -164,6 +164,12 @@ If an option cannot be parsed it will raise `Yap::PaginationError` or `Yap::Filt
|
|
164
164
|
|
165
165
|
## Changelog
|
166
166
|
|
167
|
+
### 2.0
|
168
|
+
|
169
|
+
* [BREAKING] dropped support for ruby 1.9.x
|
170
|
+
* [BREAKING] renamed `filter` method to `filtered` due to a conflict with a new method in `Activerecord::Relation`
|
171
|
+
* [BREAKING] dropped support for activerecord 4
|
172
|
+
|
167
173
|
### 1.4
|
168
174
|
|
169
175
|
* added support for strings and dates with comparison parameters
|
data/lib/yap.rb
CHANGED
@@ -32,6 +32,7 @@ module Yap
|
|
32
32
|
|
33
33
|
def self.configure
|
34
34
|
raise ArgumentError, 'No block given.' unless block_given?
|
35
|
+
|
35
36
|
yield(DEFAULTS)
|
36
37
|
end
|
37
38
|
|
@@ -49,7 +50,7 @@ module Yap
|
|
49
50
|
#
|
50
51
|
scope :paginate, lambda { |params = {}|
|
51
52
|
page, per_page, order_by = extract_pagination_params(params)
|
52
|
-
|
53
|
+
filtered(params[:filter]).limit(per_page).offset((page - 1) * per_page).order(order_by)
|
53
54
|
}
|
54
55
|
end
|
55
56
|
end
|
data/lib/yap/column_mapper.rb
CHANGED
@@ -1,14 +1,39 @@
|
|
1
1
|
module ColumnMapper
|
2
|
+
attr_reader :_api_aliases
|
3
|
+
def api_aliases(aliases = nil, &block)
|
4
|
+
raise "Aliases already defined. Make sure to invoke #{__method__} only once." if defined? @_api_aliases
|
5
|
+
|
6
|
+
api_aliases_hash(aliases) if aliases.present?
|
7
|
+
|
8
|
+
if block_given?
|
9
|
+
raise ArgumentError, 'Only one of the following allowed: Hash of aliases or block.' if aliases.present?
|
10
|
+
|
11
|
+
@_api_aliases = block
|
12
|
+
end
|
13
|
+
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def api_aliases_hash(aliases)
|
18
|
+
raise ArgumentError, "Expected first argument to be a Hash, got #{aliases.class.name}." unless aliases.is_a? Hash
|
19
|
+
|
20
|
+
@_api_aliases = aliases.symbolize_keys
|
21
|
+
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
2
25
|
def map_column(name)
|
3
26
|
actual_column = name if column_names.include?(name)
|
4
27
|
|
5
|
-
column_alias = if
|
6
|
-
|
7
|
-
elsif
|
8
|
-
|
9
|
-
'disable_warnings=true'
|
28
|
+
column_alias = if _api_aliases.is_a? Hash
|
29
|
+
_api_aliases[name.to_sym]
|
30
|
+
elsif _api_aliases.is_a? Proc
|
31
|
+
_api_aliases.call(name)
|
10
32
|
end
|
11
33
|
|
12
|
-
column_alias || actual_column
|
34
|
+
result = column_alias || actual_column
|
35
|
+
return if result.blank?
|
36
|
+
|
37
|
+
result.to_s
|
13
38
|
end
|
14
39
|
end
|
data/lib/yap/filter.rb
CHANGED
data/lib/yap/filterable.rb
CHANGED
@@ -8,17 +8,17 @@ require 'yap/filter'
|
|
8
8
|
# be applied through the filter or paginate scope. Multiple filters for the same attribute can be separated by comma,
|
9
9
|
# negative filters have a leading exclamation mark (!) and 'null' will be translated to the NULL value.
|
10
10
|
#
|
11
|
-
# User.
|
12
|
-
# User.
|
11
|
+
# User.filtered('gender' => 'f') # => All female users.
|
12
|
+
# User.filtered(
|
13
13
|
# 'team_id' => '1,2',
|
14
14
|
# 'gender' => 'm'
|
15
15
|
# ) # => All males of teams 1 and 2.
|
16
|
-
# User.
|
16
|
+
# User.filtered('team_id' => '!null') # => All users with any team.
|
17
17
|
# User.paginate(params) # => Passing parameters in controller (http://localhost/users?filter[gender]=f)
|
18
18
|
# User.paginate(
|
19
19
|
# page: 1,
|
20
20
|
# filter: { 'team' => 'null' }
|
21
|
-
# )
|
21
|
+
# ) # => Combining filter and pagination.
|
22
22
|
#
|
23
23
|
module Yap
|
24
24
|
module Filterable
|
@@ -32,7 +32,7 @@ module Yap
|
|
32
32
|
#
|
33
33
|
# @param [Hash] Attribute/value pairs to filter ( { 'gender' => 'f' } )
|
34
34
|
#
|
35
|
-
scope :
|
35
|
+
scope :filtered, lambda { |params = nil|
|
36
36
|
if params.blank?
|
37
37
|
all
|
38
38
|
else
|
data/lib/yap/params_extractor.rb
CHANGED
@@ -36,6 +36,7 @@ module Yap
|
|
36
36
|
end
|
37
37
|
|
38
38
|
raise PaginationError, 'Only positive numbers are accepted.' unless number > 0
|
39
|
+
|
39
40
|
number
|
40
41
|
end
|
41
42
|
|
@@ -83,7 +84,7 @@ module Yap
|
|
83
84
|
end
|
84
85
|
|
85
86
|
def extract_column(sort)
|
86
|
-
column = map_column(sort.to_s
|
87
|
+
column = map_column(sort.to_s)
|
87
88
|
raise PaginationError, "Cannot sort by '#{sort}'." unless column
|
88
89
|
|
89
90
|
column
|
@@ -92,7 +93,7 @@ module Yap
|
|
92
93
|
def extract_direction(direction)
|
93
94
|
direction ||= DEFAULTS.direction
|
94
95
|
dir = direction.to_sym.downcase
|
95
|
-
unless [
|
96
|
+
unless %i[asc desc].include? dir
|
96
97
|
raise PaginationError, "'#{direction}' is not a valid direction. Use 'asc' or 'desc'."
|
97
98
|
end
|
98
99
|
|
data/lib/yap/version.rb
CHANGED
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: 2.0.0
|
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:
|
11
|
+
date: 2020-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,48 +16,48 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.2'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '7'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '5.2'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '7'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: rake
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1
|
39
|
+
version: '11.1'
|
40
40
|
type: :development
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '1
|
46
|
+
version: '11.1'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
48
|
+
name: sqlite3
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 1.4.0
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
60
|
+
version: 1.4.0
|
61
61
|
description: Yet another paginator for Ruby on Rails adding pagination and filtering
|
62
62
|
interface to ActiveRecords.
|
63
63
|
email: finn.gloee@1und1.de
|
@@ -91,17 +91,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
91
|
requirements:
|
92
92
|
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version:
|
94
|
+
version: '2.3'
|
95
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
97
|
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '0'
|
100
100
|
requirements: []
|
101
|
-
|
102
|
-
rubygems_version: 2.6.10
|
101
|
+
rubygems_version: 3.1.2
|
103
102
|
signing_key:
|
104
103
|
specification_version: 4
|
105
104
|
summary: Yet another paginator for Ruby on Rails
|
106
105
|
test_files: []
|
107
|
-
has_rdoc:
|