croods 0.3.1 → 0.3.2

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: b9fa939ee66088adb051cc63ee6f9cfc1206da7674dd6f2c48c524ea0ca8b931
4
- data.tar.gz: 9e9722e961a8b24760106965a385a5aad1a89d9b85369243d3497c2c3fc33784
3
+ metadata.gz: 63c99f117704edaa49eb759248b862eb75611b3cf97d0d539a70b946c94478fe
4
+ data.tar.gz: 377f6b1e1ba4619fb1004b31c9c23339fbaa47144f76dde57f58a6a09d4cf06e
5
5
  SHA512:
6
- metadata.gz: 65565603371e3e5d46d3c8f412af157bd4e50ca2c1f6afc57a3577f4dd77f294bd63624c7f02585973214ff978d7312367d520916f7497c4f29f49f582b28f1b
7
- data.tar.gz: 3d0f2872653a07a3edb49cdb3cc368e34eb153826a5066099ed250400000613ea128bbbf5dac4cc3563fffe87f67b94ac82d2854a8a30004010d4f6d200b9be5
6
+ metadata.gz: 7e16d6d4fdbab8d49a19f24561dc8018c91244373c5bd89de7667147c3186f55c29f183c90beb9a92164ef76392a2be1315db3f4ac0f4d7ef7d513f6c43b65d7
7
+ data.tar.gz: a01538c937bec85378379476e9d7948dfc87af86f5d952980875dea965e4352e2f14a0a94eae92145ed7730157523b544f12fefc16e44f5607407abfd3a305f7
@@ -6,11 +6,14 @@ require 'devise'
6
6
  require 'devise_token_auth'
7
7
  require 'kaminari'
8
8
  require 'api-pagination'
9
+ require 'pg_search'
9
10
  require 'pundit'
10
11
  require 'schema_associations'
11
12
  require 'schema_auto_foreign_keys'
12
13
  require 'schema_validations'
13
14
 
15
+ load 'pg_search/tasks.rb'
16
+
14
17
  module Croods
15
18
  cattr_accessor :namespaces, :json_schema, :multi_tenancy_by
16
19
 
@@ -9,10 +9,24 @@ module Croods
9
9
  params[resource.page_attribute_name]
10
10
  end
11
11
 
12
+ def search_param
13
+ params[resource.search_attribute_name]
14
+ end
15
+
12
16
  def paginate_collection(list)
13
17
  paginate(list.send(resource.page_method_name, page_param))
14
18
  end
15
19
 
20
+ def search_collection(list)
21
+ return list unless search_param.present?
22
+
23
+ if resource.search_block.present?
24
+ list.instance_exec(search_param, &resource.search_block)
25
+ else
26
+ list.public_send resource.search_method_name, search_param
27
+ end
28
+ end
29
+
16
30
  def sort(list)
17
31
  if list.respond_to? resource.sort_by
18
32
  list.public_send(resource.sort_by, params[:order_by], params[:order])
@@ -23,6 +37,7 @@ module Croods
23
37
 
24
38
  def collection
25
39
  list = resource.apply_filters(policy_scope(model), params)
40
+ list = search_collection(list) unless resource.skip_search?
26
41
  list = sort(list)
27
42
  list = paginate_collection(list) if page_param.present?
28
43
 
@@ -14,6 +14,7 @@ require_relative 'resource/authorization'
14
14
  require_relative 'resource/filters'
15
15
  require_relative 'resource/pagination'
16
16
  require_relative 'resource/sorting'
17
+ require_relative 'resource/search'
17
18
  require_relative 'resource/services'
18
19
 
19
20
  module Croods
@@ -35,6 +36,7 @@ module Croods
35
36
  include Filters
36
37
  include Pagination
37
38
  include Sorting
39
+ include Search
38
40
  include Services
39
41
  end
40
42
  end
@@ -36,7 +36,8 @@ module Croods
36
36
  def properties(resource)
37
37
  properties = {}
38
38
 
39
- params = resource.pagination_params + resource.order_params
39
+ params = resource.pagination_params + resource.order_params +
40
+ resource.search_params
40
41
 
41
42
  params.each do |attribute|
42
43
  properties[attribute.name] = definition(attribute)
@@ -17,9 +17,20 @@ module Croods
17
17
  model_name.constantize
18
18
  end
19
19
 
20
+ def configure_search
21
+ return unless table_exists?
22
+
23
+ model.send(:include, PgSearch::Model)
24
+ model.send(:pg_search_scope,
25
+ search_method_name,
26
+ search_options)
27
+ end
28
+
20
29
  def create_model!
21
30
  Object.const_set(model_name, Class.new(Croods::Model))
22
31
 
32
+ configure_search unless model.resource.skip_search?
33
+
23
34
  model_blocks.each do |block|
24
35
  model.instance_eval(&block)
25
36
  end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Croods
4
+ module Resource
5
+ module Search
6
+ def search_attribute
7
+ return if skip_search?
8
+
9
+ @search_attribute ||= Croods::Attribute.new(
10
+ 'query', :string, null: true
11
+ )
12
+ end
13
+
14
+ def search_params
15
+ return [] if skip_search?
16
+
17
+ @search_params ||= [search_attribute]
18
+ end
19
+
20
+ def search_attribute_name
21
+ return if skip_search?
22
+
23
+ @search_attribute.name
24
+ end
25
+
26
+ def search_method_name
27
+ @search_method_name ||= :search
28
+ end
29
+
30
+ def default_search_options
31
+ searchable = []
32
+
33
+ attributes.each do |key, value|
34
+ searchable << key if value.type.in? %i[string text]
35
+ end
36
+
37
+ {
38
+ against: searchable
39
+ }
40
+ end
41
+
42
+ def search_options
43
+ @search_options ||= default_search_options
44
+ end
45
+
46
+ def search_block
47
+ @search_block
48
+ end
49
+
50
+ def skip_search?
51
+ @skip_search
52
+ end
53
+
54
+ def skip_search
55
+ @skip_search ||= true
56
+ end
57
+
58
+ def search_by(name, options = {}, &block)
59
+ @search_method_name = name
60
+ @search_options = options
61
+ @search_block = block
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Croods
4
- VERSION = '0.3.1'
4
+ VERSION = '0.3.2'
5
5
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: croods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
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-10-14 00:00:00.000000000 Z
11
+ date: 2020-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: api-pagination
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 4.8.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 4.8.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: committee
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,16 +56,30 @@ dependencies:
56
56
  name: kaminari
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 1.2.1
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 1.2.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: pg_search
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 2.3.4
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 2.3.4
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: pundit
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +100,14 @@ dependencies:
86
100
  requirements:
87
101
  - - '='
88
102
  - !ruby/object:Gem::Version
89
- version: 5.2.4.3
103
+ version: 5.2.4.4
90
104
  type: :runtime
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - '='
95
109
  - !ruby/object:Gem::Version
96
- version: 5.2.4.3
110
+ version: 5.2.4.4
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: schema_associations
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -327,6 +341,7 @@ files:
327
341
  - lib/croods/resource/pagination.rb
328
342
  - lib/croods/resource/paths.rb
329
343
  - lib/croods/resource/policy.rb
344
+ - lib/croods/resource/search.rb
330
345
  - lib/croods/resource/services.rb
331
346
  - lib/croods/resource/sorting.rb
332
347
  - lib/croods/routes.rb