croods 0.3.1 → 0.3.2

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