croods 0.2.10 → 0.3.0

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