inquisitio 1.4.1 → 1.5.0

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
  SHA1:
3
- metadata.gz: e181e4e047d9916fb1ddac624160bdecfa655023
4
- data.tar.gz: 98f870ea6089651bf63186bc4f17279ce01f6c7a
3
+ metadata.gz: 44d14d9abac6f0abd9b664a401bdf7f1b33669d6
4
+ data.tar.gz: 96cbec3963eabe249499d6b1f127d484419c8292
5
5
  SHA512:
6
- metadata.gz: ddf6c8e4108945fa0b6114efe04456e6aeff4bebb2c0298b1af1142f20e0d0807b031bf543677f25dcc62d4e04b866ba6fe27c79b1956d424b08e7b1b3a2f492
7
- data.tar.gz: 0cfd15e583f38a96f838cdb3547685b82591c1f5f6e01eb6c092d823b98f2a2e86486ee1c436980868cf03a0caeccb815ab85465778363e8c37d863d056a2be3
6
+ metadata.gz: 0f21bef26aaabfb05976b59383fc37eca267808167a45fb2ef821cb4a3c095bfb88e3a0ed33e02af69e89f4f2c61760f70cc3b5b6cbe8999939b7a70136d6758
7
+ data.tar.gz: 4b53556037160c92ed3c8f824473ce08b8e7b71155d703fef576b1d18ef08f1b0a3354aca1733690c3e2fe865135b24bcf3d84a88e59bd3fc306c224db5648ff
@@ -1,3 +1,7 @@
1
+ 1.5.0 / 2015-07-17
2
+ [FEATURE] Searcher now supports q.parser option as Search#parser
3
+ [BUGFIX] Searcher no longer removes ' from simple queries
4
+
1
5
  1.4.1 / 2015-07-15
2
6
  [FEATURE] Searcher now supports #expressions(hash) which maps to expr. expressions in the 2013 api
3
7
 
@@ -15,16 +15,17 @@ module Inquisitio
15
15
  @size = options[:size] || Inquisitio.config.default_search_size
16
16
  @start = options[:start] || 0
17
17
  @sort = options[:sort] || {}
18
+ @q_parser = options[:q_parser] || (is_simple? ? nil : :structured)
18
19
  end
19
20
 
20
21
  def build
21
22
  components = [url_root]
22
- is_simple = @filters.empty? && Array(@query).size == 1
23
- components << (is_simple ? simple_query : boolean_query)
23
+ components << (is_simple? ? simple_query : boolean_query)
24
+ components << "&q.parser=#{@q_parser}" if @q_parser && Inquisitio.config.api_version == '2013-01-01'
24
25
  components << return_fields_query_string
25
26
  components << arguments
26
- components << '&q.options=' + CGI::escape(@q_options.map { |k, v| "{#{k}:#{v}}" }.join('')) unless @q_options.empty?
27
- @expressions.each do |name,expression|
27
+ components << '&q.options=' + CGI::escape(@q_options.to_json) unless @q_options.empty?
28
+ @expressions.each do |name, expression|
28
29
  components << "&expr.#{name}=" + CGI::escape(expression)
29
30
  end
30
31
  components << "&size=#{@size}" unless @arguments[:size]
@@ -33,9 +34,13 @@ module Inquisitio
33
34
  components.join('')
34
35
  end
35
36
 
37
+ def is_simple?
38
+ @filters.empty? && Array(@query).size == 1
39
+ end
40
+
36
41
  private
37
42
  def simple_query
38
- "q=#{CGI::escape(sanitise(@query.first)).gsub('&', '%26')}"
43
+ "q=#{CGI::escape(@query.first)}"
39
44
  end
40
45
 
41
46
  def boolean_query
@@ -63,7 +68,7 @@ module Inquisitio
63
68
  if Inquisitio.config.api_version == '2011-02-01'
64
69
  "bq=#{CGI::escape("(and #{query_blocks.join(' ')})").gsub('&', '%26')}"
65
70
  elsif Inquisitio.config.api_version == '2013-01-01'
66
- "q=#{CGI::escape("(and #{query_blocks.join(' ')})").gsub('&', '%26')}&q.parser=structured"
71
+ "q=#{CGI::escape("(and #{query_blocks.join(' ')})").gsub('&', '%26')}"
67
72
  end
68
73
  end
69
74
 
@@ -97,6 +97,12 @@ module Inquisitio
97
97
  end
98
98
  end
99
99
 
100
+ def parser(value)
101
+ clone do |s|
102
+ s.params[:q_parser] = value
103
+ end
104
+ end
105
+
100
106
  def per(value)
101
107
  clone do |s|
102
108
  s.params[:per] = value.to_i
@@ -182,6 +188,7 @@ module Inquisitio
182
188
  sort: params[:sort],
183
189
  q_options: params[:q_options],
184
190
  expressions: params[:expressions],
191
+ q_parser: params[:q_parser],
185
192
  return_fields: return_fields
186
193
  )
187
194
  end
@@ -1,3 +1,3 @@
1
1
  module Inquisitio
2
- VERSION = '1.4.1'
2
+ VERSION = '1.5.0'
3
3
  end
@@ -109,7 +109,13 @@ module Inquisitio
109
109
 
110
110
  def test_create_search_url_with_query_options
111
111
  url = SearchUrlBuilder.build(query: ['Star Wars'], q_options: {fields: %w(title^2.0 plot^0.5)})
112
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&q.options=%7Bfields%3A%5B%22title%5E2.0%22%2C+%22plot%5E0.5%22%5D%7D&size=10'
112
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&q.options=%7B%22fields%22%3A%5B%22title%5E2.0%22%2C%22plot%5E0.5%22%5D%7D&size=10'
113
+ assert_equal expected_url, url
114
+ end
115
+
116
+ def test_create_search_url_with_query_defaultoperator_option
117
+ url = SearchUrlBuilder.build(query: ['Star Wars'], q_options: {defaultOperator: 'or'})
118
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&q.options=%7B%22defaultOperator%22%3A%22or%22%7D&size=10'
113
119
  assert_equal expected_url, url
114
120
  end
115
121
 
@@ -118,5 +124,18 @@ module Inquisitio
118
124
  expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&expr.rank1=log10%28clicks%29%2A_score&expr.rank2=cos%28+_score%29&size=10'
119
125
  assert_equal expected_url, url
120
126
  end
127
+
128
+ def test_create_url_with_parser
129
+ url = SearchUrlBuilder.build(query: ['Star Wars'], q_parser: :structured)
130
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&q.parser=structured&size=10'
131
+ assert_equal expected_url, url
132
+ end
133
+
134
+ def test_create_url_with_overridden_parser
135
+ url = SearchUrlBuilder.build(query: ['Star Wars', 'Star Trek'], q_parser: :simple)
136
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+%28or+%27Star+Wars%27+%27Star+Trek%27%29%29&q.parser=simple&size=10'
137
+ assert_equal expected_url, url
138
+ end
139
+
121
140
  end
122
141
  end
@@ -396,7 +396,13 @@ module Inquisitio
396
396
  def test_should_support_options
397
397
  searcher = Searcher.where('Star Wars').options(fields: %w(title^2 plot^0.5))
398
398
  search_url = searcher.send(:search_url)
399
- assert search_url.include?('q.options=%7Bfields%3A%5B%22title%5E2%22%2C+%22plot%5E0.5%22%5D%7D'), "search url should include q.options parameter:\n#{search_url}"
399
+ assert search_url.include?('q.options=%7B%22fields%22%3A%5B%22title%5E2%22%2C%22plot%5E0.5%22%5D%7D'), "search url should include q.options parameter:\n#{search_url}"
400
+ end
401
+
402
+ def test_should_support_operator_in_options
403
+ searcher = Searcher.where('Star Wars').options(defaultOperator: 'or')
404
+ search_url = searcher.send(:search_url)
405
+ assert search_url =~ /(\?|&)q.options=%7B%22defaultOperator%22%3A%22or%22%7D(&|$)/, "search url should include q.options parameter:\n#{search_url}"
400
406
  end
401
407
 
402
408
  def test_options_doesnt_mutate_searcher
@@ -432,5 +438,19 @@ module Inquisitio
432
438
  assert search_url =~ /(\?|&)expr\.rank1=log10%28clicks%29%2A_score(&|$)/, "search url should include expr.rank1 parameter:\n#{search_url}"
433
439
  assert search_url =~ /(\?|&)expr\.rank2=cos%28\+_score%29(&|$)/, "search url should include expr.rank1 parameter:\n#{search_url}"
434
440
  end
441
+
442
+ def test_should_support_structured_parser
443
+ Inquisitio.config.api_version = '2013-01-01'
444
+ searcher = Searcher.where('star wars').parser(:structured)
445
+ search_url = searcher.send(:search_url)
446
+ assert search_url =~ /(\?|&)q\.parser=structured(&|$)/, "search url should include q.parser parameter:\n#{search_url}"
447
+ end
448
+
449
+ def test_should_support_any_parser
450
+ Inquisitio.config.api_version = '2013-01-01'
451
+ searcher = Searcher.where('star wars').parser(:foo_bar_baz)
452
+ search_url = searcher.send(:search_url)
453
+ assert search_url =~ /(\?|&)q\.parser=foo_bar_baz(&|$)/, "search url should include q.parser parameter:\n#{search_url}"
454
+ end
435
455
  end
436
456
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inquisitio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Walker
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-07-15 00:00:00.000000000 Z
14
+ date: 2015-07-17 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: excon