hoodoo 1.8.3 → 1.9.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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Mjk5NDIwYzU1NDI1ODFiYTcxM2FkYTBiZmQwOTg4NmJjMWJhYjFmOQ==
4
+ MjcxZjFkMGM3YThmNjZiN2ZiZjdiYTY4ZDVmM2MxYjFiYmNkMTJlMA==
5
5
  data.tar.gz: !binary |-
6
- YjhkNjVjZDMxYWE2NWZlZDNmMWI0ZjEyMTRiZmY0NjA0MDMyMTVlYQ==
6
+ MjcxMWU3NjQ0YmZkYTE4YjY3MWMyOWM5NjMwNWI1YTU2ODc4MGQ4Mw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YjRjNzFlZTNhMmEyN2Y1NzQzNjQzYjc5NzUyNjJjNDRkZmEwZDE5NzIwMTY3
10
- OTZhYWE3Mzk0MmQ1MzVlNDdiZjE1ZTc3MDUyOGQ2NDMyYTk4MDdmMzJlZGMz
11
- NzQ3NWY1OTMzNGFlNDg1MDJjMTI0NDYwZTNmMzAzYmUwNjY5YTg=
9
+ YjVmNDgwNmQyMTQzZjY2ODg1YTkwYzFlZjMwYzE1NmJkMzdlMzM2MGYwNDAw
10
+ Y2M4Nzk0MTUyNmFmM2E2MjMyZmU3MjE1NWNjNWQwOTMwYmJiNDNmZTI2MWNi
11
+ YzBiM2JkYjVlOTk4YjBhZWQwZGE4MTcyMWQzYTI4ZDczZmQyZGE=
12
12
  data.tar.gz: !binary |-
13
- ZjM5MjVjYmY4NDI2MjVjOTJmNzYxYWJiZWI0YjFkODUwMWNhNmE4NmUxMjNl
14
- NzJmNjM1OTI5ODVmNzU1MjhkYWUzMDBlNThlZDBiZWNiMWNjN2VkY2E2Y2Vi
15
- ZDRmMzU3M2Q0MWRiZDYwMzIzZGRmMzMzNDM3NTY0Y2Y4NWI2MGY=
13
+ YzkxN2NhN2QxZDg5ODMxZWEyZTU4MGY3ZGZhNTJiMzQxMTBkNzU3NDBiZjY4
14
+ OGVlMmJmNGFkNTk1NWQ1NzdiOTNjZWMzMzMzNDI4ZmIzYjQ3YmI0ZWEyYmI1
15
+ MWJmMjNlNThkNzY3MWQ3YjI3OTA1Njk3ODBjNzdlYWViMTE3N2Y=
@@ -113,6 +113,18 @@ module Hoodoo
113
113
  }
114
114
  end
115
115
 
116
+ # As #cs_match, but adds wildcards at the front and end of the string
117
+ # for a case-sensitive-all-wildcard match.
118
+ #
119
+ def self.csaw_match( model_field_name = nil )
120
+ Proc.new { | attr, value |
121
+ column = model_field_name || attr
122
+ value = ( value || '' ).to_s
123
+
124
+ [ "#{ column } LIKE ? AND #{ column } IS NOT NULL", "%#{ value }%" ]
125
+ }
126
+ end
127
+
116
128
  # Case-insensitive match which should be fairly database independent
117
129
  # but will run relatively slowly as a result. If you are using
118
130
  # PostgreSQL, consider using the faster #ci_match_postgres method
@@ -12,6 +12,6 @@ module Hoodoo
12
12
  # The Hoodoo gem version. If this changes, ensure that the date in
13
13
  # "hoodoo.gemspec" is correct and run "bundle install" (or "update").
14
14
  #
15
- VERSION = '1.8.3'
15
+ VERSION = '1.9.0'
16
16
 
17
17
  end
@@ -288,6 +288,54 @@ describe Hoodoo::ActiveRecord::Finder::SearchHelper do
288
288
 
289
289
  #############################################################################
290
290
 
291
+ context '#csaw_match' do
292
+ it 'generates expected no-input-parameter output' do
293
+ result = described_class.csaw_match()
294
+ expect( result.call( 'a', 'B' ) ).to eq( [ 'a LIKE ? AND a IS NOT NULL', '%B%' ] )
295
+ end
296
+
297
+ it 'generates expected one-input-parameter output' do
298
+ result = described_class.csaw_match( :bar )
299
+ expect( result.call( 'a', 'B' ) ).to eq( [ 'bar LIKE ? AND bar IS NOT NULL', '%B%' ] )
300
+ end
301
+
302
+ it 'finds expected things' do
303
+ result = find( described_class.csaw_match.call( 'field', 'hello' ) )
304
+ expect( result ).to match_array( [ @f2, @f3 ] )
305
+
306
+ result = find( described_class.csaw_match.call( 'field', 'HELLO' ) )
307
+ expect( result ).to match_array( [ @f4 ] )
308
+
309
+ result = find( described_class.csaw_match.call( 'field', 'hell' ) )
310
+ expect( result ).to match_array( [ @f2, @f3 ] )
311
+
312
+ result = find( described_class.csaw_match.call( 'field', 'llo' ) )
313
+ expect( result ).to match_array( [ @f2, @f3 ] )
314
+
315
+ result = find( described_class.csaw_match.call( 'field', 'heLLo' ) )
316
+ expect( result ).to match_array( [ ] )
317
+ end
318
+
319
+ it 'finds expected things negated' do
320
+ result = find_not( described_class.csaw_match.call( 'field', 'hello' ) )
321
+ expect( result ).to match_array( [ @f1, @f4, @f5, @f6, @f7, @f8 ] )
322
+
323
+ result = find_not( described_class.csaw_match.call( 'field', 'HELLO' ) )
324
+ expect( result ).to match_array( [ @f1, @f2, @f3, @f5, @f6, @f7, @f8 ] )
325
+
326
+ result = find_not( described_class.csaw_match.call( 'field', 'hell' ) )
327
+ expect( result ).to match_array( [ @f1, @f4, @f5, @f6, @f7, @f8 ] )
328
+
329
+ result = find_not( described_class.csaw_match.call( 'field', 'llo' ) )
330
+ expect( result ).to match_array( [ @f1, @f4, @f5, @f6, @f7, @f8 ] )
331
+
332
+ result = find_not( described_class.csaw_match.call( 'field', 'heLLo' ) )
333
+ expect( result ).to match_array( [ @f1, @f2, @f3, @f4, @f5, @f6, @f7, @f8 ] )
334
+ end
335
+ end
336
+
337
+ #############################################################################
338
+
291
339
  context '#ci_match_postgres' do
292
340
  it 'generates expected no-input-parameter output' do
293
341
  result = described_class.ci_match_postgres()
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hoodoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.3
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loyalty New Zealand
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-06 00:00:00.000000000 Z
11
+ date: 2016-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kgio