abstract_finder 0.0.1 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77a7e235ebd8fd73ee68168acc1a73d22209d32b7279d1b1b2301f60ad95bdcf
4
- data.tar.gz: effe24917541a0e2f74ef5f8ba5f3033796e4fda372ca7def0508e5851e4035f
3
+ metadata.gz: 49fae0a173ce18d04cc4abf88445dcec29cd0452062ac82674a40eae90460a7c
4
+ data.tar.gz: 6ae4d1c35a546fb0b2bf77e6b82576bdb472aeffa44df6d94ffee98f207452d8
5
5
  SHA512:
6
- metadata.gz: c0f2e8cf4e7a50bf30abfc088d8c8f748451db1722ab62a3c15fa32c02a430e2b61282d5f24ebdbd0f16cc8f8e49b2807a2191f10b12c66cf7085e93c6bbfb8c
7
- data.tar.gz: 0b765daf8f62b5364ace03cfac75dd4554388cfb29bf31365a65c7593103da718b2a0e042a0d6d6ada3346d19c227a39e1e1a7292bdc02e837c2577f430a4d82
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.count
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
 
@@ -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 = model.includes(associations).search_by(@filters[:q]) if model.respond_to? :search_by
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.1
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: 2021-10-08 00:00:00.000000000 Z
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.1.2
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