jsonapi-query_builder 0.1.7 → 0.2.1

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: e613355258e5be273292baacd4b8c8aecba03b29005212749868412857feb678
4
- data.tar.gz: 46f0f548604944cb9572b90c44a9e3ca5f15e1f8a47985cb588135f8cade2794
3
+ metadata.gz: f47ebd86badc968ef8a79333f49ac496c067ad6a26c6563cca0257c1e8cdeba2
4
+ data.tar.gz: ff874753c9a7ba077bf7876a8a598dd01058a0e2f7a2a982dde2fc579342a5d0
5
5
  SHA512:
6
- metadata.gz: 58546d6561f997295a4505780acb1ad9ff210bd8f1c1390638283d9af62cb1f4d4e89b69e646a902851a1840590b49ce3480ef42f1fff6861a0b7d92f3f27e80
7
- data.tar.gz: 851a87dab11ee9194318f4fc5ea437d842ae561b2d5e10448adf796050cc0abb866a73c16ddde0e4b5f3d9757b583498344137d11ecdeaa793dc101a285af5f7
6
+ metadata.gz: fc7168dad1ea652617381662a8e75cadbb132addb9b78d6af052b15b590d3f031fa143a6508e6f2feb52f82ee9f333892551378fa5a969ac5232bb48ca8b0c8e
7
+ data.tar.gz: 6ead187ee07d7d9db557c2010b3d2c992c01d05c888ad6a777716380fa565fc9aff54fb39db54120131bbb544418f789f53cade618c55db86d2aec3d03c08a61
@@ -0,0 +1,31 @@
1
+ name: lint
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ standardrb:
11
+ runs-on: ubuntu-18.04
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - uses: ruby/setup-ruby@v1
16
+ with:
17
+ bundler-cache: true
18
+ - name: standardrb
19
+ run: bundle exec standardrb
20
+
21
+ rubocop-rspec:
22
+ runs-on: ubuntu-18.04
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - uses: ruby/setup-ruby@v1
27
+ with:
28
+ bundler-cache: true
29
+
30
+ - name: rubocop
31
+ run: bundle exec rubocop --only RSpec
@@ -0,0 +1,23 @@
1
+ name: spec
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ rake-spec:
11
+ runs-on: ubuntu-18.04
12
+ strategy:
13
+ matrix:
14
+ ruby: [2.5, 2.6, 2.7, 3.0]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: ${{ matrix.ruby }}
21
+ bundler-cache: true
22
+ - name: rake spec
23
+ run: bundle exec rake spec
data/.gitignore CHANGED
@@ -9,5 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
- Gemfile.lock
13
12
  *.gem
data/.rubocop.yml CHANGED
@@ -4,5 +4,8 @@ require:
4
4
  RSpec/NestedGroups:
5
5
  Max: 4
6
6
 
7
+ RSpec/MultipleMemoizedHelpers:
8
+ Max: 7
9
+
7
10
  AllCops:
8
11
  NewCops: enable
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.6
1
+ 3.0.2
data/CHANGELOG.md CHANGED
@@ -0,0 +1,20 @@
1
+ # Change log
2
+
3
+ ## 0.2.1 (2021-10-04)
4
+
5
+ - [#22](https://github.com/infinum/jsonapi-query_builder/pull/22): Bump allowed pagy version.
6
+
7
+ ## 0.2.0 (2021-09-29)
8
+ Added support for Kaminari and Keyset pagination strategies in addition to Pagy.
9
+
10
+ - [#21](https://github.com/infinum/jsonapi-query_builder/pull/21): Extract paginators.
11
+
12
+ ## 0.1.9 (2021-05-07)
13
+
14
+ - [#18](https://github.com/infinum/jsonapi-query_builder/pull/18): Remove Ruby `to` version.
15
+ - [#9](https://github.com/infinum/jsonapi-query_builder/pull/9): added github actions
16
+
17
+ ## 0.1.8 (2021-01-25)
18
+
19
+ - [#8](https://github.com/infinum/jsonapi-query_builder/pull/8): add support for ruby 3.0
20
+
data/Gemfile.lock ADDED
@@ -0,0 +1,140 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ jsonapi-query_builder (0.2.1)
5
+ activerecord (>= 5)
6
+ pagy (>= 3.5)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionview (6.1.4.1)
12
+ activesupport (= 6.1.4.1)
13
+ builder (~> 3.1)
14
+ erubi (~> 1.4)
15
+ rails-dom-testing (~> 2.0)
16
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
17
+ activemodel (6.1.4.1)
18
+ activesupport (= 6.1.4.1)
19
+ activerecord (6.1.4.1)
20
+ activemodel (= 6.1.4.1)
21
+ activesupport (= 6.1.4.1)
22
+ activesupport (6.1.4.1)
23
+ concurrent-ruby (~> 1.0, >= 1.0.2)
24
+ i18n (>= 1.6, < 2)
25
+ minitest (>= 5.1)
26
+ tzinfo (~> 2.0)
27
+ zeitwerk (~> 2.3)
28
+ ast (2.4.2)
29
+ builder (3.2.4)
30
+ bundler-audit (0.9.0.1)
31
+ bundler (>= 1.2.0, < 3)
32
+ thor (~> 1.0)
33
+ coderay (1.1.3)
34
+ concurrent-ruby (1.1.9)
35
+ crass (1.0.6)
36
+ diff-lcs (1.4.4)
37
+ erubi (1.10.0)
38
+ i18n (1.8.10)
39
+ concurrent-ruby (~> 1.0)
40
+ kaminari (1.2.1)
41
+ activesupport (>= 4.1.0)
42
+ kaminari-actionview (= 1.2.1)
43
+ kaminari-activerecord (= 1.2.1)
44
+ kaminari-core (= 1.2.1)
45
+ kaminari-actionview (1.2.1)
46
+ actionview
47
+ kaminari-core (= 1.2.1)
48
+ kaminari-activerecord (1.2.1)
49
+ activerecord
50
+ kaminari-core (= 1.2.1)
51
+ kaminari-core (1.2.1)
52
+ lefthook (0.7.6)
53
+ loofah (2.12.0)
54
+ crass (~> 1.0.2)
55
+ nokogiri (>= 1.5.9)
56
+ method_source (1.0.0)
57
+ mini_portile2 (2.6.1)
58
+ minitest (5.14.4)
59
+ nokogiri (1.12.5)
60
+ mini_portile2 (~> 2.6.1)
61
+ racc (~> 1.4)
62
+ pagy (3.11.0)
63
+ parallel (1.21.0)
64
+ parser (3.0.2.0)
65
+ ast (~> 2.4.1)
66
+ pry (0.14.1)
67
+ coderay (~> 1.1)
68
+ method_source (~> 1.0)
69
+ racc (1.5.2)
70
+ rails-dom-testing (2.0.3)
71
+ activesupport (>= 4.2.0)
72
+ nokogiri (>= 1.6)
73
+ rails-html-sanitizer (1.4.2)
74
+ loofah (~> 2.3)
75
+ rainbow (3.0.0)
76
+ rake (13.0.6)
77
+ regexp_parser (2.1.1)
78
+ rexml (3.2.5)
79
+ rspec (3.10.0)
80
+ rspec-core (~> 3.10.0)
81
+ rspec-expectations (~> 3.10.0)
82
+ rspec-mocks (~> 3.10.0)
83
+ rspec-core (3.10.1)
84
+ rspec-support (~> 3.10.0)
85
+ rspec-expectations (3.10.1)
86
+ diff-lcs (>= 1.2.0, < 2.0)
87
+ rspec-support (~> 3.10.0)
88
+ rspec-mocks (3.10.2)
89
+ diff-lcs (>= 1.2.0, < 2.0)
90
+ rspec-support (~> 3.10.0)
91
+ rspec-support (3.10.2)
92
+ rubocop (1.20.0)
93
+ parallel (~> 1.10)
94
+ parser (>= 3.0.0.0)
95
+ rainbow (>= 2.2.2, < 4.0)
96
+ regexp_parser (>= 1.8, < 3.0)
97
+ rexml
98
+ rubocop-ast (>= 1.9.1, < 2.0)
99
+ ruby-progressbar (~> 1.7)
100
+ unicode-display_width (>= 1.4.0, < 3.0)
101
+ rubocop-ast (1.12.0)
102
+ parser (>= 3.0.1.1)
103
+ rubocop-performance (1.11.5)
104
+ rubocop (>= 1.7.0, < 2.0)
105
+ rubocop-ast (>= 0.4.0)
106
+ rubocop-rspec (2.5.0)
107
+ rubocop (~> 1.19)
108
+ ruby-progressbar (1.11.0)
109
+ sqlite3 (1.4.2)
110
+ standard (1.3.0)
111
+ rubocop (= 1.20.0)
112
+ rubocop-performance (= 1.11.5)
113
+ standardrb (1.0.0)
114
+ standard
115
+ thor (1.1.0)
116
+ tzinfo (2.0.4)
117
+ concurrent-ruby (~> 1.0)
118
+ unicode-display_width (2.1.0)
119
+ zeitwerk (2.4.2)
120
+
121
+ PLATFORMS
122
+ ruby
123
+
124
+ DEPENDENCIES
125
+ activerecord
126
+ bundler (~> 2.0)
127
+ bundler-audit
128
+ jsonapi-query_builder!
129
+ kaminari (~> 1.2)
130
+ lefthook
131
+ pry
132
+ rake (~> 13.0)
133
+ rspec (~> 3.0)
134
+ rubocop-rspec
135
+ sqlite3
136
+ standard
137
+ standardrb
138
+
139
+ BUNDLED WITH
140
+ 2.2.22
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Jsonapi::QueryBuilder
1
+ # Jsonapi::QueryBuilder ![lint](https://github.com/infinum/jsonapi-query_builder/workflows/lint/badge.svg)![spec](https://github.com/infinum/jsonapi-query_builder/workflows/spec/badge.svg)
2
2
 
3
3
  `Jsonapi::QueryBuilder` serves the purpose of adding the json api query related SQL conditions to the already scoped
4
4
  collection, usually used in controller index actions.
@@ -27,6 +27,9 @@ Or install it yourself as:
27
27
 
28
28
  ```ruby
29
29
  class UserQuery < Jsonapi::QueryBuilder::BaseQuery
30
+ ## pagination
31
+ paginator Jsonapi::QueryBuilder::Paginator::Pagy # default paginator
32
+
30
33
  ## sorting
31
34
  default_sort created_at: :desc
32
35
  sorts_by :last_name
@@ -56,6 +59,29 @@ current user permissions, or for any other type of scoping. It's only responsibi
56
59
  querying. Use `pundit` or similar for policy scoping, custom query objects for other scoping, and then pass the scoped
57
60
  collection to the `Jsonapi::QueryBuilder::BaseQuery` object.
58
61
 
62
+ ### Pagination
63
+ Pagination support is configurable using the `paginator` method to define the paginator. It defaults to the `Pagy`
64
+ paginator, a lightweight and fast paginator. Other paginators currently supported are `Kaminari` and an implementation
65
+ of keyset pagination. Before using these paginators we need to explicitly require the gems in our Gemfile and the
66
+ paginator file in question.
67
+ Additionally one can implement it's own paginator by inheriting from `Jsonapi::QueryBuilder::Paginator::BasePaginator`.
68
+ The minimum required implementation is a `#paginate` method that receives page params and returns a page of the
69
+ collection. It can return the pagination details as the second item of the returned array, that can be used in the
70
+ serializer for pagination metadata.
71
+ #### Using the Kaminari Paginator
72
+ ```ruby
73
+ require "jsonapi/query_builder/paginator/kaminari"
74
+
75
+ paginator Jsonapi::QueryBuilder::Paginator::Kaminari
76
+ ```
77
+
78
+ #### Using the Keyset Paginator
79
+ ```ruby
80
+ require "jsonapi/query_builder/paginator/keyset"
81
+
82
+ paginator Jsonapi::QueryBuilder::Paginator::Keyset
83
+ ```
84
+
59
85
  ### Sorting
60
86
  #### Ensuring deterministic results
61
87
  Sorting has a fallback to an unique attribute which defaults to the `id` attribute. This ensures deterministic paginated
@@ -165,6 +191,9 @@ filters_by :type, TypeFilter, if: :correct_type?
165
191
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can
166
192
  also run `bin/console` for an interactive prompt that will allow you to experiment.
167
193
 
194
+ We're using `standardrb` and `lefthook`. You can install lefthook hooks via `lefthook install`. It will run linters and
195
+ standardrb checks before commits, and a bundle audit + whole spec suite before push.
196
+
168
197
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the
169
198
  version number in `version.rb`, and then run `LEFTHOOK=0 bundle exec rake release`, which will create a git tag for the
170
199
  version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
@@ -36,16 +36,21 @@ Gem::Specification.new do |spec|
36
36
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
37
  spec.require_paths = ["lib"]
38
38
 
39
- spec.required_ruby_version = "~> 2.5"
39
+ spec.required_ruby_version = ">= 2.5"
40
40
 
41
41
  spec.add_runtime_dependency "activerecord", ">= 5"
42
- spec.add_runtime_dependency "pagy", "~> 3.5"
42
+ spec.add_runtime_dependency "pagy", ">= 3.5"
43
43
 
44
44
  spec.add_development_dependency "bundler", "~> 2.0"
45
+ spec.add_development_dependency "bundler-audit"
45
46
  spec.add_development_dependency "rake", "~> 13.0"
46
47
  spec.add_development_dependency "rspec", "~> 3.0"
47
48
  spec.add_development_dependency "standardrb"
48
49
  spec.add_development_dependency "standard"
49
50
  spec.add_development_dependency "rubocop-rspec"
50
51
  spec.add_development_dependency "lefthook"
52
+ spec.add_development_dependency "kaminari", "~> 1.2"
53
+ spec.add_development_dependency "activerecord"
54
+ spec.add_development_dependency "sqlite3"
55
+ spec.add_development_dependency "pry"
51
56
  end
data/lefthook.yml CHANGED
@@ -2,13 +2,13 @@ lint:
2
2
  commands: &lint
3
3
  lint-frozen-strings:
4
4
  glob: "*.rb"
5
- run: bundle exec rubocop {staged_files} --only Style/FrozenStringLiteralComment,Layout/EmptyLineAfterMagicComment --format quiet --auto-correct
5
+ run: bundle exec rubocop --only Style/FrozenStringLiteralComment,Layout/EmptyLineAfterMagicComment --format quiet --auto-correct
6
6
 
7
7
  rubocop:
8
8
  commands: &rubocop
9
9
  rubocop-rspec:
10
10
  glob: "spec/*"
11
- run: bundle exec rubocop {staged_files} --only RSpec --format quiet
11
+ run: bundle exec rubocop --only RSpec --format quiet
12
12
 
13
13
  pre-commit:
14
14
  parallel: true
@@ -5,6 +5,8 @@ require "jsonapi/query_builder/mixins/include"
5
5
  require "jsonapi/query_builder/mixins/paginate"
6
6
  require "jsonapi/query_builder/mixins/sort"
7
7
 
8
+ require "jsonapi/query_builder/paginator"
9
+
8
10
  module Jsonapi
9
11
  module QueryBuilder
10
12
  class BaseQuery
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jsonapi
4
+ module QueryBuilder
5
+ module Errors
6
+ class UnpermittedSortParameters < ArgumentError
7
+ def initialize(unpermitted_parameters)
8
+ super [
9
+ unpermitted_parameters.to_sentence,
10
+ unpermitted_parameters.count == 1 ? "is not a" : "are not",
11
+ "permitted sort attribute".pluralize(unpermitted_parameters.count)
12
+ ].join(" ")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -4,7 +4,20 @@ module Jsonapi
4
4
  module QueryBuilder
5
5
  module Mixins
6
6
  module Paginate
7
- include Pagy::Backend
7
+ extend ActiveSupport::Concern
8
+
9
+ class_methods do
10
+ # Sets the paginator used to page the results. Defaults to Pagy
11
+ #
12
+ # @param [Jsonapi::QueryBuilder::Paginator::BasePaginator] paginator A subclass of BasePaginator
13
+ def paginator(paginator)
14
+ @paginator = paginator
15
+ end
16
+
17
+ def _paginator
18
+ @paginator || Paginator::Pagy
19
+ end
20
+ end
8
21
 
9
22
  attr_reader :pagination_details
10
23
 
@@ -14,9 +27,7 @@ module Jsonapi
14
27
  # @param [Object] page_params Optional explicit pagination params
15
28
  # @return [ActiveRecord::Relation] Paged collection
16
29
  def paginate(collection, page_params = send(:page_params))
17
- @pagination_details, records = pagy collection, page: page_params[:number],
18
- items: page_params[:size],
19
- outset: page_params[:offset]
30
+ records, @pagination_details = self.class._paginator.new(collection).paginate(page_params)
20
31
 
21
32
  records
22
33
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "jsonapi/query_builder/mixins/sort/param"
4
+ require "jsonapi/query_builder/errors/unpermitted_sort_parameters"
4
5
 
5
6
  module Jsonapi
6
7
  module QueryBuilder
@@ -8,8 +9,6 @@ module Jsonapi
8
9
  module Sort
9
10
  extend ActiveSupport::Concern
10
11
 
11
- UnpermittedSortParameters = Class.new ArgumentError
12
-
13
12
  class_methods do
14
13
  attr_reader :_default_sort
15
14
 
@@ -59,7 +58,7 @@ module Jsonapi
59
58
  # @param [ActiveRecord::Relation] collection
60
59
  # @param [Object] sort_params Optional explicit sort params
61
60
  # @return [ActiveRecord::Relation] Sorted relation
62
- # @raise [Jsonapi::QueryBuilder::Mixins::Sort::UnpermittedSortParameters] if not all sort parameters are
61
+ # @raise [Jsonapi::QueryBuilder::Errors::UnpermittedSortParameters] if not all sort parameters are
63
62
  # permitted
64
63
  def sort(collection, sort_params = send(:sort_params))
65
64
  sort_params = Param.deserialize_params(sort_params)
@@ -80,11 +79,7 @@ module Jsonapi
80
79
  unpermitted_parameters = sort_params.map(&:attribute).map(&:to_sym) - self.class.supported_sorts.keys
81
80
  return if unpermitted_parameters.size.zero?
82
81
 
83
- raise UnpermittedSortParameters, [
84
- unpermitted_parameters.to_sentence,
85
- unpermitted_parameters.count == 1 ? "is not a" : "are not",
86
- "permitted sort attribute".pluralize(unpermitted_parameters.count)
87
- ].join(" ")
82
+ raise Errors::UnpermittedSortParameters, unpermitted_parameters
88
83
  end
89
84
 
90
85
  def add_order_attributes(collection, sort_params)
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jsonapi
4
+ module QueryBuilder
5
+ module Paginator
6
+ class BasePaginator
7
+ attr_reader :collection
8
+
9
+ # @param [ActiveRecord::Relation] collection
10
+ def initialize(collection)
11
+ @collection = collection
12
+ end
13
+
14
+ # @param [Hash] page_params
15
+ # @return [[ActiveRecord::Relation, Hash]] Records and pagination details
16
+ def paginate(page_params)
17
+ raise NotImplementedError, "#{self.class} should implement ##{__method__}"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "kaminari"
4
+
5
+ module Jsonapi
6
+ module QueryBuilder
7
+ module Paginator
8
+ class Kaminari < BasePaginator
9
+ def paginate(page_params)
10
+ paged_collection = collection
11
+ .page(page_params[:number])
12
+ .per(page_params[:size])
13
+ .padding(page_params[:offset])
14
+
15
+ [paged_collection, pagination_details(paged_collection, page_params)]
16
+ end
17
+
18
+ private
19
+
20
+ def pagination_details(collection, page_params)
21
+ {
22
+ number: collection.current_page,
23
+ size: collection.limit_value,
24
+ offset: page_params[:offset],
25
+ total: collection.total_count,
26
+ total_pages: collection.total_pages,
27
+ next_page: collection.next_page,
28
+ prev_page: collection.prev_page
29
+ }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+
5
+ module Jsonapi
6
+ module QueryBuilder
7
+ module Paginator
8
+ class Keyset < BasePaginator
9
+ DEFAULT_DIRECTION = :after
10
+ DEFAULT_LIMIT = 25
11
+
12
+ def paginate(page_params)
13
+ page_params = extract_pagination_params(page_params)
14
+ records = apply_pagination(collection, page_params)
15
+
16
+ [records, page_params]
17
+ end
18
+
19
+ private
20
+
21
+ def extract_pagination_params(params)
22
+ {
23
+ column: params.fetch(:column, nil),
24
+ position: params.fetch(:position, nil),
25
+ direction: params.fetch(:direction, DEFAULT_DIRECTION),
26
+ limit: params.fetch(:limit, DEFAULT_LIMIT)
27
+ }
28
+ end
29
+
30
+ def apply_pagination(collection, pagination_params)
31
+ column = pagination_params[:column]
32
+ position = pagination_params[:position]
33
+ direction = pagination_params[:direction]
34
+ limit = pagination_params[:limit]
35
+
36
+ return collection unless column
37
+
38
+ collection = apply_order(collection, column, direction)
39
+ collection = collection.limit(limit.to_i)
40
+
41
+ return collection unless position
42
+
43
+ apply_filter(collection, column, position, direction)
44
+ end
45
+
46
+ def apply_order(collection, column, direction)
47
+ if direction.to_sym == DEFAULT_DIRECTION
48
+ collection.reorder(collection.arel_table[column].asc)
49
+ else
50
+ collection.reorder(collection.arel_table[column].desc)
51
+ end
52
+ end
53
+
54
+ def apply_filter(collection, column, position, direction)
55
+ if direction.to_sym == DEFAULT_DIRECTION
56
+ collection.where(collection.arel_table[column].gt(position))
57
+ else
58
+ collection.where(collection.arel_table[column].lt(position))
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pagy"
4
+ require "pagy/extras/items"
5
+
6
+ module Jsonapi
7
+ module QueryBuilder
8
+ module Paginator
9
+ class Pagy < BasePaginator
10
+ include ::Pagy::Backend
11
+
12
+ def paginate(page_params)
13
+ @params = {page: page_params}
14
+
15
+ pagination_details, records = pagy collection, page: page_params[:number],
16
+ items: page_params[:size],
17
+ outset: page_params[:offset]
18
+ [records, pagination_details]
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :params
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jsonapi/query_builder/paginator/base_paginator"
4
+ require "jsonapi/query_builder/paginator/pagy"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jsonapi
4
4
  module QueryBuilder
5
- VERSION = "0.1.7"
5
+ VERSION = "0.2.1"
6
6
  end
7
7
  end
@@ -4,8 +4,6 @@ require "active_support/concern"
4
4
  require "active_support/core_ext/array/conversions"
5
5
  require "active_support/core_ext/hash/keys"
6
6
  require "active_support/core_ext/string/inflections"
7
- require "pagy"
8
- require "pagy/extras/items"
9
7
 
10
8
  require "jsonapi/query_builder/version"
11
9
  require "jsonapi/query_builder/base_query"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-query_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jure Cindro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-19 00:00:00.000000000 Z
11
+ date: 2021-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -28,14 +28,14 @@ dependencies:
28
28
  name: pagy
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.5'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.5'
41
41
  - !ruby/object:Gem::Dependency
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler-audit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,62 @@ dependencies:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: kaminari
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.2'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.2'
167
+ - !ruby/object:Gem::Dependency
168
+ name: activerecord
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: sqlite3
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: pry
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
139
209
  description: |
140
210
  `Jsonapi::QueryBuilder` serves the purpose of adding the json api query related SQL conditions to the already scoped collection, usually used in controller index actions.
141
211
 
@@ -146,12 +216,15 @@ executables: []
146
216
  extensions: []
147
217
  extra_rdoc_files: []
148
218
  files:
219
+ - ".github/workflows/lint.yml"
220
+ - ".github/workflows/spec.yml"
149
221
  - ".gitignore"
150
222
  - ".rspec"
151
223
  - ".rubocop.yml"
152
224
  - ".ruby-version"
153
225
  - CHANGELOG.md
154
226
  - Gemfile
227
+ - Gemfile.lock
155
228
  - LICENSE.txt
156
229
  - README.md
157
230
  - Rakefile
@@ -163,11 +236,17 @@ files:
163
236
  - lib/jsonapi/query_builder/base_filter.rb
164
237
  - lib/jsonapi/query_builder/base_query.rb
165
238
  - lib/jsonapi/query_builder/base_sort.rb
239
+ - lib/jsonapi/query_builder/errors/unpermitted_sort_parameters.rb
166
240
  - lib/jsonapi/query_builder/mixins/filter.rb
167
241
  - lib/jsonapi/query_builder/mixins/include.rb
168
242
  - lib/jsonapi/query_builder/mixins/paginate.rb
169
243
  - lib/jsonapi/query_builder/mixins/sort.rb
170
244
  - lib/jsonapi/query_builder/mixins/sort/param.rb
245
+ - lib/jsonapi/query_builder/paginator.rb
246
+ - lib/jsonapi/query_builder/paginator/base_paginator.rb
247
+ - lib/jsonapi/query_builder/paginator/kaminari.rb
248
+ - lib/jsonapi/query_builder/paginator/keyset.rb
249
+ - lib/jsonapi/query_builder/paginator/pagy.rb
171
250
  - lib/jsonapi/query_builder/version.rb
172
251
  homepage: https://github.com/infinum/jsonapi-query_builder
173
252
  licenses:
@@ -182,7 +261,7 @@ require_paths:
182
261
  - lib
183
262
  required_ruby_version: !ruby/object:Gem::Requirement
184
263
  requirements:
185
- - - "~>"
264
+ - - ">="
186
265
  - !ruby/object:Gem::Version
187
266
  version: '2.5'
188
267
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -191,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
270
  - !ruby/object:Gem::Version
192
271
  version: '0'
193
272
  requirements: []
194
- rubygems_version: 3.0.3
273
+ rubygems_version: 3.2.22
195
274
  signing_key:
196
275
  specification_version: 4
197
276
  summary: Support `json:api` querying with ease!