abstract_finder 0.0.1 → 0.0.5
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 +4 -4
- data/README.md +28 -0
- data/lib/abstract_finder/base_finder.rb +9 -2
- data/lib/abstract_finder.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 49fae0a173ce18d04cc4abf88445dcec29cd0452062ac82674a40eae90460a7c
|
|
4
|
+
data.tar.gz: 6ae4d1c35a546fb0b2bf77e6b82576bdb472aeffa44df6d94ffee98f207452d8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aa089b58c7a7107cea5ba6b13eb222e7392f9ff71778285b574d51e8d7af4cf1d7d14b685738b6e88ee6a7779c089f98059a94817b5b10bcdd33c6c3629c0893
|
|
7
|
+
data.tar.gz: 79bd1f89970b20b24408b6396ccc199048d79700c8395723901857d37757e7efbb3bd44de674270472d62da4cd120e35d506cb54187c03ee0a6d636a3154aad4
|
data/README.md
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## AbstractFinder
|
|
2
|
+
|
|
3
|
+
### API wrapper for search, pagination, filter.
|
|
4
|
+
|
|
5
|
+
General idea to pass a query, relations to avoid N+1 and permitted params to paginate, filter and sort AbstractFinder collection.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
``` ruby
|
|
9
|
+
class RecordsContrroller < Api::BaseController
|
|
10
|
+
def index
|
|
11
|
+
finder = AbstractFinder.call(
|
|
12
|
+
Record.latest, # scope, method or class
|
|
13
|
+
%w[rating status], # to fight N+1
|
|
14
|
+
params # permitted params for pagination, filtering, ordering and search
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
render json: RecordSerializer.new(
|
|
18
|
+
finder.collection,
|
|
19
|
+
{ meta: finder.meta, params: permitted_params }
|
|
20
|
+
).serializable_hash
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def params
|
|
25
|
+
params.require(:record).permit(:page, :per_page, :search_by, :q, :order_by)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
```
|
|
@@ -31,14 +31,21 @@ class BaseFinder
|
|
|
31
31
|
def total
|
|
32
32
|
return 0 if @collection.blank?
|
|
33
33
|
|
|
34
|
-
@total ||= @collection.
|
|
34
|
+
@total ||= @collection.size
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def next_page?
|
|
38
|
+
(@total - (page.next * per_page)).positive?
|
|
39
|
+
rescue StandardError
|
|
40
|
+
false
|
|
35
41
|
end
|
|
36
42
|
|
|
37
43
|
def meta
|
|
38
44
|
{
|
|
39
45
|
page: page,
|
|
40
46
|
per_page: per_page,
|
|
41
|
-
total: @total
|
|
47
|
+
total: @total,
|
|
48
|
+
next_page: next_page?
|
|
42
49
|
}
|
|
43
50
|
end
|
|
44
51
|
|
data/lib/abstract_finder.rb
CHANGED
|
@@ -43,7 +43,7 @@ class AbstractFinder < BaseFinder
|
|
|
43
43
|
|
|
44
44
|
# define #search_by method in query model and use this finder
|
|
45
45
|
def query
|
|
46
|
-
@collection =
|
|
46
|
+
@collection = @collection.includes(associations).search_by(@filters[:q]) if @collection.respond_to? :search_by
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
def filter; end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: abstract_finder
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Aleksei Ivanov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-01-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: kaminari
|
|
@@ -53,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
requirements: []
|
|
56
|
-
rubygems_version: 3.
|
|
56
|
+
rubygems_version: 3.3.3
|
|
57
57
|
signing_key:
|
|
58
58
|
specification_version: 4
|
|
59
59
|
summary: Abstract finder for rails api with gueries, sort, filter and pagination
|