croods 0.2.10 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47184f50917d2e0f8d4c16826c1d056b783813bfc6c54a0831bc8fb333155ba8
4
- data.tar.gz: 38f8082f8019604ac318d7308b87c5bf167eb85b2b3c85b1e58795a46e2a4895
3
+ metadata.gz: abd8dafdfb10c2b936a894dcb6da1057c6bfe3646f6e6d5af0f58d59d0be7bab
4
+ data.tar.gz: 8da5a9b8c82bacefae7d736610d7ba4e0e3305ecf832a602dd61cff0edc1b53c
5
5
  SHA512:
6
- metadata.gz: 7bac77110662f6d9cbf664c3d59bb02a82f7a486cafc36a1ffa0e392772aff15ef78085b5e5f1f1ff60dd8a3235dba5e6a4c10cabb76ee70ce3364f5a1eaecbe
7
- data.tar.gz: b7f08e87e4e51aa32067b805853f5fef004d4f8bd3b0163f63fec3abb7f797806cadf58da24b28a77709b8fb9b2c988aa7e606764ee702afd03a5aecf968e94a
6
+ metadata.gz: deac1ff6c8763d738b8ccd20149632df9be2425690a1550d57172e3a922a1b685f484d848f39fa5f3a8a29b3bd596c4c8c27e6f7356dbd4d56d40ff0abf879a2
7
+ data.tar.gz: 7a7342dba26327dc7e1422b26adf56b08747a20a3062d1c1090b941c6d3cf4030f2953975fceb770fb1127cc15097e7398ee35ec0ca017c1a4a6b18ba3a78a4a
@@ -4,6 +4,8 @@ require 'rack/cors'
4
4
  require 'committee'
5
5
  require 'devise'
6
6
  require 'devise_token_auth'
7
+ require 'kaminari'
8
+ require 'api-pagination'
7
9
  require 'pundit'
8
10
  require 'schema_associations'
9
11
  require 'schema_auto_foreign_keys'
@@ -5,10 +5,22 @@ module Croods
5
5
  module Collection
6
6
  protected
7
7
 
8
+ def page_param
9
+ params[resource.page_attribute_name]
10
+ end
11
+
12
+ def paginate_collection(list)
13
+ paginate(list.send(resource.page_method_name, page_param))
14
+ end
15
+
8
16
  def collection
9
- resource
17
+ list = resource
10
18
  .apply_filters(policy_scope(model), params)
11
19
  .order(resource.sort_by)
20
+
21
+ list = paginate_collection(list) if page_param.present?
22
+
23
+ list
12
24
  end
13
25
  end
14
26
  end
@@ -12,6 +12,7 @@ require_relative 'resource/json_schema'
12
12
  require_relative 'resource/authentication'
13
13
  require_relative 'resource/authorization'
14
14
  require_relative 'resource/filters'
15
+ require_relative 'resource/pagination'
15
16
  require_relative 'resource/sorting'
16
17
  require_relative 'resource/services'
17
18
 
@@ -32,6 +33,7 @@ module Croods
32
33
  include Authentication
33
34
  include Authorization
34
35
  include Filters
36
+ include Pagination
35
37
  include Sorting
36
38
  include Services
37
39
  end
@@ -33,6 +33,16 @@ module Croods
33
33
  filters
34
34
  end
35
35
 
36
+ def properties(resource)
37
+ properties = {}
38
+
39
+ resource.pagination_params.each do |attribute|
40
+ properties[attribute.name] = definition(attribute)
41
+ end
42
+
43
+ properties.merge(filters(resource))
44
+ end
45
+
36
46
  def definition(attribute)
37
47
  definition = Definition.schema(attribute)
38
48
 
@@ -42,13 +52,16 @@ module Croods
42
52
  end
43
53
 
44
54
  def required(resource)
45
- resource.filters.reject(&:null).map(&:name)
55
+ collection_properties = resource.filters +
56
+ resource.pagination_params
57
+
58
+ collection_properties.reject(&:null).map(&:name)
46
59
  end
47
60
 
48
61
  def schema(resource)
49
62
  {
50
63
  additionalProperties: false,
51
- properties: filters(resource),
64
+ properties: properties(resource),
52
65
  required: required(resource),
53
66
  type: ['object']
54
67
  }
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Croods
4
+ module Resource
5
+ module Pagination
6
+ def page_attribute
7
+ @page_attribute ||= Croods::Attribute.new(
8
+ Kaminari.config.param_name, :string, null: true
9
+ )
10
+ end
11
+
12
+ def per_page_attribute
13
+ @per_page_attribute ||= Croods::Attribute.new(
14
+ 'per_page', :string, null: true
15
+ )
16
+ end
17
+
18
+ def pagination_params
19
+ @pagination_params ||= [page_attribute, per_page_attribute]
20
+ end
21
+
22
+ def page_attribute_name
23
+ @page_attribute.name
24
+ end
25
+
26
+ def page_method_name
27
+ @page_method_name ||= Kaminari.config.page_method_name
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Croods
4
- VERSION = '0.2.10'
4
+ VERSION = '0.3.0'
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: croods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Weinmann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-22 00:00:00.000000000 Z
11
+ date: 2020-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: api-pagination
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: committee
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - '='
39
53
  - !ruby/object:Gem::Version
40
54
  version: 1.1.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: kaminari
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: pundit
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -296,6 +324,7 @@ files:
296
324
  - lib/croods/resource/json_schema/required.rb
297
325
  - lib/croods/resource/model.rb
298
326
  - lib/croods/resource/names.rb
327
+ - lib/croods/resource/pagination.rb
299
328
  - lib/croods/resource/paths.rb
300
329
  - lib/croods/resource/policy.rb
301
330
  - lib/croods/resource/services.rb