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 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