keyword_search 1.4.1 → 1.5.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.
@@ -1,17 +1,17 @@
1
1
  module KeywordSearch
2
-
2
+
3
3
  class Definition
4
-
4
+
5
5
  class Keyword
6
-
6
+
7
7
  attr_reader :name, :description, :handler
8
8
  def initialize(name, description=nil, &handler)
9
9
  @name, @description = name, description
10
10
  @handler = handler
11
11
  end
12
-
12
+
13
13
  def handle(value, sign)
14
- # If the handler is only expecting one argument,
14
+ # If the handler is only expecting one argument,
15
15
  # only give them the positive matches
16
16
  if handler.arity == 1
17
17
  handler.call(value) if sign
@@ -19,14 +19,14 @@ module KeywordSearch
19
19
  handler.call(value, sign)
20
20
  end
21
21
  end
22
-
22
+
23
23
  end
24
24
 
25
25
  def initialize
26
26
  @default_keyword = nil
27
27
  yield self if block_given?
28
28
  end
29
-
29
+
30
30
  def keywords
31
31
  @keywords ||= []
32
32
  end
@@ -34,24 +34,24 @@ module KeywordSearch
34
34
  def keyword(name, description=nil, &block)
35
35
  keywords << Keyword.new(name, description, &block)
36
36
  end
37
-
37
+
38
38
  def default_keyword(name)
39
39
  @default_keyword = name
40
40
  end
41
-
41
+
42
42
  def handle(key, values)
43
43
  key = @default_keyword if key == :default
44
44
  return false unless key
45
45
  true_values, false_values = *values.partition { |v| v[1] }
46
-
46
+
47
47
  # Get just the values
48
48
  true_values.collect! { |v| v[0] }
49
49
  false_values.collect! { |v| v[0] }
50
-
50
+
51
51
  if k = keywords.detect { |kw| kw.name == key.to_sym}
52
52
  k.handle(true_values, true) unless true_values.empty?
53
53
  k.handle(false_values, false) unless false_values.empty?
54
54
  end
55
55
  end
56
56
  end
57
- end
57
+ end
@@ -0,0 +1,3 @@
1
+ module KeywordSearch
2
+ VERSION = '1.5.0'
3
+ end
@@ -1,11 +1,9 @@
1
- require 'test/unit'
2
-
3
- require 'rubygems' rescue nil
4
- require 'test/spec'
1
+ require 'minitest/spec'
2
+ require 'minitest/autorun'
5
3
 
6
4
  require File.dirname(__FILE__) + '/../lib/keyword_search'
7
5
 
8
- context "KeywordSearch" do
6
+ describe "KeywordSearch" do
9
7
 
10
8
  NAME_AND_AGE = %<bruce williams age:26>
11
9
  NAME_QUOTED_AND_AGE = %<"bruce williams" age:26>
@@ -18,7 +16,7 @@ context "KeywordSearch" do
18
16
  NAME_AND_GROUPED_QUOTED_AGES = %<coda hale age:("27" 34 '48')>
19
17
  GROUPED_NAMES_AND_AGE = %<(coda bruce 'hale' "williams") age:20>
20
18
 
21
- specify "default keyword" do
19
+ it "default keyword" do
22
20
  result = nil
23
21
  KeywordSearch.search(NAME_AND_AGE) do |with|
24
22
  with.default_keyword :name
@@ -26,10 +24,11 @@ context "KeywordSearch" do
26
24
  result = values.join(' ')
27
25
  end
28
26
  end
27
+ result.must_equal 'bruce williams'
29
28
  assert_equal 'bruce williams', result
30
29
  end
31
30
 
32
- specify "grouped default keywords" do
31
+ it "grouped default keywords" do
33
32
  result = nil
34
33
  KeywordSearch.search(GROUPED_NAMES_AND_AGE) do |with|
35
34
  with.default_keyword :name
@@ -40,7 +39,7 @@ context "KeywordSearch" do
40
39
  assert_equal ['coda', 'bruce', 'hale', 'williams'], result
41
40
  end
42
41
 
43
- specify "unquoted keyword term" do
42
+ it "unquoted keyword term" do
44
43
  result = nil
45
44
  KeywordSearch.search(NAME_AND_AGE) do |with|
46
45
  with.keyword :age do |values|
@@ -50,7 +49,7 @@ context "KeywordSearch" do
50
49
  assert_equal 26, result
51
50
  end
52
51
 
53
- specify "unquoted grouped keyword term" do
52
+ it "unquoted grouped keyword term" do
54
53
  result = nil
55
54
  KeywordSearch.search(NAME_AND_GROUPED_AGE) do |with|
56
55
  with.keyword :age do |values|
@@ -60,7 +59,7 @@ context "KeywordSearch" do
60
59
  assert_equal 27, result
61
60
  end
62
61
 
63
- specify "quoted grouped keyword term" do
62
+ it "quoted grouped keyword term" do
64
63
  result = nil
65
64
  KeywordSearch.search(NAME_AND_GROUPED_QUOTED_AGE) do |with|
66
65
  with.keyword :age do |values|
@@ -70,7 +69,7 @@ context "KeywordSearch" do
70
69
  assert_equal 27, result
71
70
  end
72
71
 
73
- specify "mixed grouped keyword terms" do
72
+ it "mixed grouped keyword terms" do
74
73
  result = nil
75
74
  KeywordSearch.search(NAME_AND_GROUPED_QUOTED_AGES) do |with|
76
75
  with.keyword :age do |values|
@@ -80,7 +79,7 @@ context "KeywordSearch" do
80
79
  assert_equal [27, 34, 48], result
81
80
  end
82
81
 
83
- specify "quoted default keyword term" do
82
+ it "quoted default keyword term" do
84
83
  result = nil
85
84
  KeywordSearch.search(NAME_QUOTED_AND_AGE) do |with|
86
85
  with.default_keyword :name
@@ -91,7 +90,7 @@ context "KeywordSearch" do
91
90
  assert_equal 'bruce williams', result
92
91
  end
93
92
 
94
- specify "quoted keyword term" do
93
+ it "quoted keyword term" do
95
94
  result = nil
96
95
  KeywordSearch.search(NAME_AND_QUOTED_AGE) do |with|
97
96
  with.keyword :age do |values|
@@ -101,7 +100,7 @@ context "KeywordSearch" do
101
100
  assert_equal 26, result
102
101
  end
103
102
 
104
- specify "quoted keyword term with whitespace" do
103
+ it "quoted keyword term with whitespace" do
105
104
  result = nil
106
105
  KeywordSearch.search(DEFAULT_AGE_WITH_QUOTED_AGE) do |with|
107
106
  with.default_keyword :age
@@ -112,7 +111,7 @@ context "KeywordSearch" do
112
111
  assert_equal 'bruce williams', result
113
112
  end
114
113
 
115
- specify "single quoted keyword term with whitespace" do
114
+ it "single quoted keyword term with whitespace" do
116
115
  result = nil
117
116
  r = KeywordSearch.search(DEFAULT_AGE_WITH_SINGLE_QUOTED_AGE) do |with|
118
117
  with.default_keyword :age
@@ -123,7 +122,7 @@ context "KeywordSearch" do
123
122
  assert_equal 'bruce williams', result
124
123
  end
125
124
 
126
- specify "nested single quote is accumulated" do
125
+ it "nested single quote is accumulated" do
127
126
  result = nil
128
127
  KeywordSearch.search(NAME_WITH_NESTED_SINGLE_QUOTES) do |with|
129
128
  with.default_keyword :name
@@ -134,7 +133,7 @@ context "KeywordSearch" do
134
133
  assert_equal %<d'arcy d'uberville>, result
135
134
  end
136
135
 
137
- specify "nested double quote is accumulated" do
136
+ it "nested double quote is accumulated" do
138
137
  result = nil
139
138
  KeywordSearch.search(%<'he was called "jake"'>) do |with|
140
139
  with.default_keyword :text
@@ -145,7 +144,7 @@ context "KeywordSearch" do
145
144
  assert_equal %<he was called "jake">, result
146
145
  end
147
146
 
148
- specify "bare single quote in unquoted literal is accumulated" do
147
+ it "bare single quote in unquoted literal is accumulated" do
149
148
  result = nil
150
149
  KeywordSearch.search(%<bruce's age:27>) do |with|
151
150
  with.default_keyword :text
@@ -156,7 +155,7 @@ context "KeywordSearch" do
156
155
  assert_equal %<bruce's>, result
157
156
  end
158
157
 
159
- specify "single quoted literal is accumulated" do
158
+ it "single quoted literal is accumulated" do
160
159
  result = nil
161
160
  KeywordSearch.search(%<foo 'bruce williams' age:27>) do |with|
162
161
  with.default_keyword :text
@@ -167,7 +166,7 @@ context "KeywordSearch" do
167
166
  assert_equal %<bruce williams>, result
168
167
  end
169
168
 
170
- specify "period in literal is accumulated" do
169
+ it "period in literal is accumulated" do
171
170
  result = nil
172
171
  KeywordSearch.search(%<okay... age:27>) do |with|
173
172
  with.default_keyword :text
@@ -178,7 +177,7 @@ context "KeywordSearch" do
178
177
  assert_equal %<okay...>, result
179
178
  end
180
179
 
181
- specify "parse error results in exception" do
180
+ it "parse error results in exception" do
182
181
  assert_raises(KeywordSearch::ParseError) do
183
182
  KeywordSearch.search(%<we_do_not_allow:! or ::>) do |with|
184
183
  with.default_keyword :text
@@ -189,7 +188,7 @@ context "KeywordSearch" do
189
188
  end
190
189
  end
191
190
 
192
- specify "can use apostrophes in unquoted literal" do
191
+ it "can use apostrophes in unquoted literal" do
193
192
  result = nil
194
193
  KeywordSearch.search(%<d'correct>) do |with|
195
194
  with.default_keyword :text
@@ -200,7 +199,7 @@ context "KeywordSearch" do
200
199
  assert_equal "d'correct", result
201
200
  end
202
201
 
203
- specify "can use apostrophes in unquoted literal values" do
202
+ it "can use apostrophes in unquoted literal values" do
204
203
  result = nil
205
204
  KeywordSearch.search(%<text:d'correct>) do |with|
206
205
  with.default_keyword :text
@@ -211,7 +210,7 @@ context "KeywordSearch" do
211
210
  assert_equal "d'correct", result
212
211
  end
213
212
 
214
- specify "cannot use an apostrophe at the beginning on an unquoted literal" do
213
+ it "cannot use an apostrophe at the beginning on an unquoted literal" do
215
214
  assert_raises(KeywordSearch::ParseError) do
216
215
  KeywordSearch.search(%<'thisiswrong>) do |with|
217
216
  with.default_keyword :text
@@ -222,7 +221,7 @@ context "KeywordSearch" do
222
221
  end
223
222
  end
224
223
 
225
- specify "keywords are case sensitive" do
224
+ it "keywords are case sensitive" do
226
225
  result = nil
227
226
  KeywordSearch.search(%<Text:justtesting>) do |with|
228
227
  with.keyword :text do |values|
@@ -235,7 +234,7 @@ context "KeywordSearch" do
235
234
  assert_equal :big, result
236
235
  end
237
236
 
238
- specify "values are case sensitive" do
237
+ it "values are case sensitive" do
239
238
  result = nil
240
239
  KeywordSearch.search(%<text:Big>) do |with|
241
240
  with.keyword :text do |values|
@@ -245,7 +244,7 @@ context "KeywordSearch" do
245
244
  assert_equal 'Big', result
246
245
  end
247
246
 
248
- specify "spaces are condensed" do
247
+ it "spaces are condensed" do
249
248
  result = nil
250
249
  KeywordSearch.search(%< this is some text >) do |with|
251
250
  with.default_keyword :text
@@ -256,7 +255,7 @@ context "KeywordSearch" do
256
255
  assert_equal %w(this is some text), result
257
256
  end
258
257
 
259
- specify "an empty search is successful" do
258
+ it "an empty search is successful" do
260
259
  result = nil
261
260
  KeywordSearch.search(%<>) do |with|
262
261
  with.default_keyword :text
@@ -267,7 +266,7 @@ context "KeywordSearch" do
267
266
  assert_nil result
268
267
  end
269
268
 
270
- specify 'a negative search' do
269
+ it 'a negative search' do
271
270
  result = nil
272
271
 
273
272
  KeywordSearch.search(%<-site:google.com>) do |with|
@@ -278,7 +277,7 @@ context "KeywordSearch" do
278
277
  assert_equal [ [ 'google.com' ], false ], result
279
278
  end
280
279
 
281
- specify 'a positive search' do
280
+ it 'a positive search' do
282
281
  result = nil
283
282
 
284
283
  KeywordSearch.search(%<+site:google.com>) do |with|
@@ -289,7 +288,7 @@ context "KeywordSearch" do
289
288
  assert_equal [ [ 'google.com' ], true ], result
290
289
  end
291
290
 
292
- specify 'a search with no sign' do
291
+ it 'a search with no sign' do
293
292
  result = nil
294
293
 
295
294
  KeywordSearch.search(%<site:google.com>) do |with|
@@ -300,7 +299,7 @@ context "KeywordSearch" do
300
299
  assert_equal [ [ 'google.com' ], true ], result
301
300
  end
302
301
 
303
- specify 'a term should default to positive with no sign' do
302
+ it 'a term should default to positive with no sign' do
304
303
  result = nil
305
304
 
306
305
  KeywordSearch.search(%<-site:google.com inurl:atom>) do |with|
@@ -311,7 +310,7 @@ context "KeywordSearch" do
311
310
  assert_equal [ %w(atom), true ], result
312
311
  end
313
312
 
314
- specify 'a negative and positive search to the default keyword' do
313
+ it 'a negative and positive search to the default keyword' do
315
314
  result = []
316
315
 
317
316
  KeywordSearch.search(%<text -google.com search>) do |with|
@@ -323,7 +322,7 @@ context "KeywordSearch" do
323
322
  assert_equal [ [ %w(text search), true ], [ %w(google.com), false ] ], result
324
323
  end
325
324
 
326
- specify 'a negative search to the default keyword with quotes' do
325
+ it 'a negative search to the default keyword with quotes' do
327
326
  result = []
328
327
 
329
328
  KeywordSearch.search(%<-google.com>) do |with|
metadata CHANGED
@@ -1,67 +1,91 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: keyword_search
3
- version: !ruby/object:Gem::Version
4
- version: 1.4.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.5.0
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Bruce Williams
8
8
  - Eric Lindvall
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2009-10-22 00:00:00 -07:00
14
- default_executable:
15
- dependencies: []
16
-
12
+ date: 2013-05-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
17
42
  description:
18
- email:
19
- - bruce@codefluency.com
43
+ email:
44
+ - brwcodes@gmail.com
20
45
  - eric@sevenscale.com
21
46
  executables: []
22
-
23
47
  extensions: []
24
-
25
- extra_rdoc_files:
26
- - README.markdown
27
- files:
28
- - History.txt
48
+ extra_rdoc_files: []
49
+ files:
50
+ - .gitignore
51
+ - .travis.yml
52
+ - Gemfile
53
+ - LICENSE
29
54
  - Manifest
30
- - README.markdown
55
+ - README.md
31
56
  - Rakefile
32
- - VERSION
33
57
  - keyword_search.gemspec
34
58
  - lib/keyword_search.rb
35
59
  - lib/keyword_search.rl
36
60
  - lib/keyword_search/definition.rb
61
+ - lib/keyword_search/version.rb
37
62
  - test/test_keyword_search.rb
38
- has_rdoc: true
39
63
  homepage: http://github.com/bruce/keyword_search
40
- licenses: []
41
-
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
42
67
  post_install_message:
43
- rdoc_options:
68
+ rdoc_options:
44
69
  - --charset=UTF-8
45
- require_paths:
70
+ require_paths:
46
71
  - lib
47
- required_ruby_version: !ruby/object:Gem::Requirement
48
- requirements:
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- version: "0"
52
- version:
53
- required_rubygems_version: !ruby/object:Gem::Requirement
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
58
- version:
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
59
82
  requirements: []
60
-
61
- rubyforge_project: codefluency
62
- rubygems_version: 1.3.5
83
+ rubyforge_project:
84
+ rubygems_version: 2.0.3
63
85
  signing_key:
64
- specification_version: 3
65
- summary: Generic library to parse GMail-style search strings for keyword/value pairs; supports definition of valid keywords and handling of quoted values.
66
- test_files:
86
+ specification_version: 4
87
+ summary: Generic library to parse GMail-style search strings for keyword/value pairs;
88
+ supports definition of valid keywords and handling of quoted values.
89
+ test_files:
67
90
  - test/test_keyword_search.rb
91
+ has_rdoc: