segugio 0.1.1 → 0.1.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: 75c6f491d3b5e6ac863da40c504e652717b383f5943d6d75c253f30f9aa74440
4
- data.tar.gz: f6b0bd2745f8b528ceaa90eb5e57b4f37a3039155abb27f77883b36dcc89a8fa
3
+ metadata.gz: a9713c2995c3372521c1ce92a3423697a502040bfb9b59eac27764da5429c36f
4
+ data.tar.gz: faabfc804ba1716489d3c05682410fe4c17e4ae77e103c3e08065db092b0d2b3
5
5
  SHA512:
6
- metadata.gz: f7dfbec33e08af5ac152288b68c8209744a6378767f5f284345b8449f9b275441cd3eaa37a53395ab72e6c0d94e7687ee69910605d68fb51fea342a83790ee5b
7
- data.tar.gz: f98c8b440752df6f7503945e80bbe1f81834800ac4ba729eba765146896a009fdc0af4c7000598685ee284154bc3889948f37c5ace1c761ef4cd55552f4d5683
6
+ metadata.gz: a4e40a80b422a75ffc093199522bc138f8141ebdcb2d5b5ac8752db51de607dc00aa61e01556b68b84c73eb37900413ae97c94b76adbf0beffefb712dfdc0fc6
7
+ data.tar.gz: 9bad96136056c2de795496ebaba25a24e4ab757e0d9035e63607a2dfa150ccf22d6f5b9beed3dfea0bd01dc3e8c6d8eeb376af8a0d9d64b348bba6866ff2d565
data/.ci.database.yml ADDED
@@ -0,0 +1,9 @@
1
+ test:
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ database: postgres
5
+ host: localhost
6
+ port: 5432
7
+ user: postgres
8
+ password: postgres
9
+ min_messages: warning
data/Gemfile CHANGED
@@ -1,10 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in segugio.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 13.0"
9
-
10
- gem "rspec", "~> 3.0"
8
+ gem 'database_cleaner'
9
+ gem 'factory_bot'
10
+ gem 'faker'
11
+ gem 'pg'
12
+ gem 'pry'
13
+ gem 'rake'
14
+ gem 'rspec'
15
+ gem 'shoulda-matchers'
data/Gemfile.lock CHANGED
@@ -1,27 +1,44 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- segugio (0.1.1)
5
- activerecord (~> 7, >= 4.0)
4
+ segugio (0.1.2)
5
+ activerecord (>= 4.0)
6
+ service-utils (~> 0.2)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- activemodel (7.0.4)
11
- activesupport (= 7.0.4)
12
- activerecord (7.0.4)
13
- activemodel (= 7.0.4)
14
- activesupport (= 7.0.4)
15
- activesupport (7.0.4)
11
+ activemodel (7.0.4.1)
12
+ activesupport (= 7.0.4.1)
13
+ activerecord (7.0.4.1)
14
+ activemodel (= 7.0.4.1)
15
+ activesupport (= 7.0.4.1)
16
+ activesupport (7.0.4.1)
16
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
18
  i18n (>= 1.6, < 2)
18
19
  minitest (>= 5.1)
19
20
  tzinfo (~> 2.0)
21
+ coderay (1.1.3)
20
22
  concurrent-ruby (1.1.10)
23
+ database_cleaner (2.0.1)
24
+ database_cleaner-active_record (~> 2.0.0)
25
+ database_cleaner-active_record (2.0.1)
26
+ activerecord (>= 5.a)
27
+ database_cleaner-core (~> 2.0.0)
28
+ database_cleaner-core (2.0.1)
21
29
  diff-lcs (1.5.0)
30
+ factory_bot (6.2.1)
31
+ activesupport (>= 5.0.0)
32
+ faker (3.1.0)
33
+ i18n (>= 1.8.11, < 2)
22
34
  i18n (1.12.0)
23
35
  concurrent-ruby (~> 1.0)
36
+ method_source (1.0.0)
24
37
  minitest (5.17.0)
38
+ pg (1.4.5)
39
+ pry (0.14.2)
40
+ coderay (~> 1.1)
41
+ method_source (~> 1.0)
25
42
  rake (13.0.6)
26
43
  rspec (3.12.0)
27
44
  rspec-core (~> 3.12.0)
@@ -29,13 +46,16 @@ GEM
29
46
  rspec-mocks (~> 3.12.0)
30
47
  rspec-core (3.12.0)
31
48
  rspec-support (~> 3.12.0)
32
- rspec-expectations (3.12.1)
49
+ rspec-expectations (3.12.2)
33
50
  diff-lcs (>= 1.2.0, < 2.0)
34
51
  rspec-support (~> 3.12.0)
35
- rspec-mocks (3.12.1)
52
+ rspec-mocks (3.12.3)
36
53
  diff-lcs (>= 1.2.0, < 2.0)
37
54
  rspec-support (~> 3.12.0)
38
55
  rspec-support (3.12.0)
56
+ service-utils (0.2.0)
57
+ shoulda-matchers (5.3.0)
58
+ activesupport (>= 5.2.0)
39
59
  tzinfo (2.0.5)
40
60
  concurrent-ruby (~> 1.0)
41
61
 
@@ -44,9 +64,15 @@ PLATFORMS
44
64
 
45
65
  DEPENDENCIES
46
66
  bundler (~> 2.0)
47
- rake (~> 13.0)
48
- rspec (~> 3.0)
67
+ database_cleaner
68
+ factory_bot
69
+ faker
70
+ pg
71
+ pry
72
+ rake
73
+ rspec
49
74
  segugio!
75
+ shoulda-matchers
50
76
 
51
77
  BUNDLED WITH
52
- 2.3.24
78
+ 2.3.6
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'service/utils'
4
+
3
5
  module Segugio
4
6
  # Implements a feature for generic search, that allows to search using ILIKE operator, filter records by exact value
5
7
  # and specify result order.
@@ -25,7 +27,7 @@ module Segugio
25
27
  end
26
28
 
27
29
  def logger
28
- @logger ||= Rails.logger
30
+ @logger ||= ActiveRecord::Base.logger
29
31
  end
30
32
 
31
33
  private
@@ -71,7 +73,7 @@ module Segugio
71
73
 
72
74
  # Generate an array with conditions (ex. ['name ILIKE ? OR title ILIKE ?', '%xyz%', '%xyz%'])
73
75
  conditions = []
74
- conditions << @query_fields.map { |field| "#{@relation.table_name}.#{field}::text ILIKE ?" }.join(' OR ')
76
+ conditions << @query_fields.map { |field| %("#{collection_name}"."#{field}"::text ILIKE ?) }.join(' OR ')
75
77
  @query_fields.each do
76
78
  conditions << "%#{@query}%"
77
79
  end
@@ -85,7 +87,7 @@ module Segugio
85
87
  # Iterate over @filter_fields and set filter conditions on result
86
88
  @filter_fields.each do |column|
87
89
  # TODO: handle filters on array columns
88
- @result = @result.where(@collection_name => { column => @filters[column] }) if @filters[column]
90
+ @result = @result.where(collection_name => { column => @filters[column] }) if @filters[column]
89
91
  end
90
92
 
91
93
  # Warn about invalid filter fields
@@ -97,7 +99,7 @@ module Segugio
97
99
  def apply_exclude!
98
100
  # Iterate over @filter_fields and set exclude conditions on result
99
101
  @filter_fields.each do |column|
100
- @result = @result.where.not(@collection_name => { column => @exclude[column] }) if @exclude[column]
102
+ @result = @result.where.not(collection_name => { column => @exclude[column] }) if @exclude[column]
101
103
  end
102
104
 
103
105
  # Warn about invalid exclude fields
@@ -120,7 +122,7 @@ module Segugio
120
122
  # When order item is a String or a Symbol, just check
121
123
  # if it's valid and use that value as order field
122
124
  if @order_fields.include?(item.to_s)
123
- result << "#{@relation.table_name}.#{item}"
125
+ result << %("#{collection_name}"."#{item}" ASC)
124
126
  else
125
127
  # Report invalid order item
126
128
  logger.warn "Invalid order item: #{item.inspect}"
@@ -146,7 +148,7 @@ module Segugio
146
148
  # Build order field from a hash like { field: 'name', asc: true|false|nil, nulls_first: true|false|nil }
147
149
  def build_order_field_from_hash(data)
148
150
  # Use field name as base for order field
149
- field = "#{@relation.table_name}.#{data[:field]}"
151
+ field = %("#{collection_name}"."#{data[:field]}")
150
152
 
151
153
  if data.key?(:asc)
152
154
  # When :asc is specified, add "ASC" or "DESC" when its value is "true" or "false" respectively
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Segugio
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
5
5
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_record'
4
+
3
5
  module ActiveRecord
4
6
  # Wraps ActiveRecord::Base to add `search` method and `query_fields`,
5
7
  # `filter_fields` and `order_fields` helper class methods.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: segugio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Groza Sergiu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-19 00:00:00.000000000 Z
11
+ date: 2023-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,9 +28,6 @@ dependencies:
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '7'
34
31
  - - ">="
35
32
  - !ruby/object:Gem::Version
36
33
  version: '4.0'
@@ -38,12 +35,23 @@ dependencies:
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - "~>"
42
- - !ruby/object:Gem::Version
43
- version: '7'
44
38
  - - ">="
45
39
  - !ruby/object:Gem::Version
46
40
  version: '4.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: service-utils
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
47
55
  description: |
48
56
  Segugio is a Ruby gem that simplifies the implementation of search functionality in Rails using ActiveRecord.
49
57
  With this gem, you can easily search, filter and sort results in a simple and intuitive way.
@@ -61,6 +69,7 @@ executables: []
61
69
  extensions: []
62
70
  extra_rdoc_files: []
63
71
  files:
72
+ - ".ci.database.yml"
64
73
  - ".rspec"
65
74
  - ".rubocop.yml"
66
75
  - CHANGELOG.md
@@ -75,7 +84,6 @@ files:
75
84
  - lib/segugio/searchable.rb
76
85
  - lib/segugio/version.rb
77
86
  - lib/segugio/wrappers/active_record/base.rb
78
- - sig/segugio.rbs
79
87
  homepage: https://github.com/demetra-it/segugio
80
88
  licenses:
81
89
  - MIT
data/sig/segugio.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Segugio
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end