searrrch 0.0.3 → 0.0.4

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
  SHA1:
3
- metadata.gz: d09b5d8e6f036dd50cf0f303f87346c3c1967077
4
- data.tar.gz: 2f01701c39014e9dd276cac28f9fd0e235f2ecaf
3
+ metadata.gz: 1e77f9cbe9ea3dcc47a1e5f2131d7b14c23941a2
4
+ data.tar.gz: 2d6c952923e46581935cb4198dfb95fc9e286814
5
5
  SHA512:
6
- metadata.gz: 6d5789e921c87da3095e2d7ee6be39fc36373f75a893188eaa464abe7d9c583648b533c64c6667af1f47eb9ea1536e79f55a2267e6ccda32fbc6744582ff8135
7
- data.tar.gz: 2db9a6f516284a81deed2b258ff538a89096b9ecbebea761ca738f99b3999d4b1f1ecf2241fcd3f5a8d7edf64b6c238ffa39cfebd9cfee0648174868033a5812
6
+ metadata.gz: ff903fa346b90435014938dca517748ebe8b53ad127bb8758bac65af8e1df5aa1c950103a4d88639aae85857c86f9ce636ee7be021849a0319d2fe5f534f78e0
7
+ data.tar.gz: ba11675321951b27fe94ad6091b5df4220db246bb1594f4488d5b2cb401d7ec585f36c40b17bf69ff70c9e977db2dec607ee7ac4fe4f62d44374936569b9933f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- searrrch (0.0.3)
4
+ searrrch (0.0.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -16,17 +16,29 @@ The user can also put the value between quotes, in which case nested escaped quo
16
16
  Usage:
17
17
 
18
18
  ```ruby
19
-
20
- search = Searrrch.new query
21
- search.each_value('user_id', :integer) do |val|
19
+ search = Searrrch.new 'user_id: 123 user_id: 124 free text here'
20
+ search.each_value(:user_id, :integer) do |val|
22
21
  # this block will be called twice with val being set to '123' and '124'
23
22
  end
24
23
 
25
24
  # this return all values from user_id in an array
26
- search.to_array('user_id')
25
+ search.to_array(:user_id)
26
+
27
+ # or, if you preffer:
28
+ search.as_array(:user_id) do |user_ids|
29
+ # this is called once and only if user_id is set
30
+ end
27
31
 
28
32
  # this returns the remaining text
29
33
  search.freetext
34
+
35
+
36
+ # as a final note, this also works:
37
+
38
+ search = Searrrch.new 'user_id: 123,124 free text here', true
39
+ search.each_value(:user_id, :integer) do |val|
40
+ # the same as previous example; but now every value get cut on ','
41
+ end
30
42
  ```
31
43
 
32
44
  This is particular useful for appending search criteria to your rails query ;)
data/lib/searrrch.rb CHANGED
@@ -12,7 +12,7 @@ class Searrrch
12
12
  # also support ',' for you cool kids that expect something like a "list of ids"
13
13
  # 3. and also accept any char if quoted - in which case the same quotation should be quoted as well
14
14
 
15
- VERSION = '0.0.3'
15
+ VERSION = '0.0.4'
16
16
 
17
17
  # iterates over the entire string identifying each of the elements
18
18
  # this code only checks for:
@@ -25,7 +25,7 @@ class Searrrch
25
25
  # Both key and value must have only the other regular chars.
26
26
  #
27
27
  # Everything after the last option will be considered free text search
28
- def initialize(query)
28
+ def initialize(query, explode_comma=false)
29
29
  query = query.to_s
30
30
  @operators = {}
31
31
 
@@ -36,7 +36,12 @@ class Searrrch
36
36
  value = value[1, value.length - 2] if ["'", '"'].include?(value[0])
37
37
  offset = m.end(2)
38
38
  @operators[key] ||= []
39
- @operators[key] << value
39
+
40
+ if explode_comma
41
+ value.split(',').each{ |v| @operators[key] << v }
42
+ else
43
+ @operators[key] << value
44
+ end
40
45
  end
41
46
  @freetext = query[offset, query.length].strip
42
47
  end
@@ -56,6 +61,13 @@ class Searrrch
56
61
  res
57
62
  end
58
63
 
64
+ # Same as to_array, but yield the value of the array to a block if a value is
65
+ # found
66
+ def as_array(key, expects = :string)
67
+ arr =to_array(key, expects)
68
+ yield arr if arr.length > 0
69
+ end
70
+
59
71
  def freetext(expects = :string)
60
72
  convert(@freetext, expects)
61
73
  end
@@ -87,4 +87,24 @@ RSpec.describe 'operators' do
87
87
  search = Searrrch.new query
88
88
  expect(search.to_array(:operator)).to eq values
89
89
  end
90
+
91
+ it 'explodes the comma' do
92
+ query = 'user_id: 1,2,3,4'
93
+ search = Searrrch.new query, true
94
+ expect(search.to_array(:user_id, :integer)).to eq [1,2,3,4]
95
+ end
96
+
97
+ it 'uses as_array instead of to_array' do
98
+ query = 'user_id: 1,2,3,4'
99
+ search = Searrrch.new query, true
100
+ search.as_array(:user_id, :integer) do |value|
101
+ expect(value).to eq [1,2,3,4]
102
+ end
103
+
104
+ search.as_array(:unset_value, :integer) do |value|
105
+ # this is an error .. meaning if this guy is called, fails!
106
+ # idk how to do this yet using rspec, so I am using this ugly but effective shortcut
107
+ expect(0).to eq [1,2,3,4]
108
+ end
109
+ end
90
110
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searrrch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcelo Coraça de Freitas