inquisitio 1.3.1 → 1.4.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: 67547bfc9d3965184e9755285695e3b77dbc89b2
4
- data.tar.gz: 422e0d69eeadb40dae78ce83fbd00017321b8138
3
+ metadata.gz: 27dadb327fcc1198c7659d113e0c497c8e2ed787
4
+ data.tar.gz: b074ca69a037d70633334e9b9c6fec1824ba5c5f
5
5
  SHA512:
6
- metadata.gz: 1b33be2d4a73a54d9794a41dff1abb7125b3e3f1f314651848377260f46ad55433f4d367e7ef6dc3a9fbb1279e814f83d450a3efe4c7a1bfcc9fdefa007055c8
7
- data.tar.gz: 9020cc0137072a4a6bf0a6a5671dc3d67e65e53e356f106affe62df0d4cfbfa2c09150087ba19245a2fda0662ae6a5a0f4dec20308e8dabc332162760f76da2b
6
+ metadata.gz: 26adef66c212f20277c36a9cdf8fb656fc8b844293e3284d6bdc9f2d54e03b78d1ff795e58309a263bc48999da8ed7cb8e5ba83ce0d6a7ae2136206723c47ff3
7
+ data.tar.gz: a5f8436b07dbfefcb928544e76196d61b2014a23b14162bfc87b32246b08c82e7813130f010390f70a3c92dd3cc5f7e8d45ece65b6a2645a5de68bc272ede2da
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ 1.4.0 / 2015-07-14
2
+ [FEATURE] Searcher now supports #options() to allow setting of the q.options parameter in the 2013 api
3
+
1
4
  1.3.1 / 2015-07-13
2
5
  [BUGFIX] Fixed failing tests
3
6
 
@@ -6,9 +6,10 @@ module Inquisitio
6
6
  end
7
7
 
8
8
  def initialize(options = {})
9
- @query = options[:query]
10
- @filters = options[:filters] || {}
11
- @arguments = options[:arguments] || {}
9
+ @query = options[:query]
10
+ @filters = options[:filters] || {}
11
+ @q_options = options[:q_options] || {}
12
+ @arguments = options[:arguments] || {}
12
13
  @return_fields = options[:return_fields]
13
14
  @size = options[:size] || Inquisitio.config.default_search_size
14
15
  @start = options[:start] || 0
@@ -21,15 +22,16 @@ module Inquisitio
21
22
  components << (is_simple ? simple_query : boolean_query)
22
23
  components << return_fields_query_string
23
24
  components << arguments
25
+ components << '&q.options=' + CGI::escape(@q_options.map { |k, v| "{#{k}:#{v}}" }.join('')) unless @q_options.empty?
24
26
  components << "&size=#{@size}" unless @arguments[:size]
25
27
  components << "&start=#{@start}" unless @arguments[:start] || @start == 0 || @start == '0'
26
- components << '&sort=' + @sort.map {|k,v| "#{k}%20#{v}"}.join(',') unless @sort.empty?
28
+ components << '&sort=' + @sort.map { |k, v| "#{k}%20#{v}" }.join(',') unless @sort.empty?
27
29
  components.join('')
28
30
  end
29
31
 
30
32
  private
31
33
  def simple_query
32
- "q=#{URI.encode(sanitise(@query.first)).gsub('&', '%26')}"
34
+ "q=#{CGI::escape(sanitise(@query.first)).gsub('&', '%26')}"
33
35
  end
34
36
 
35
37
  def boolean_query
@@ -41,42 +43,42 @@ module Inquisitio
41
43
  elsif @query.size == 1
42
44
  query_blocks << "'#{sanitise(@query.first)}'"
43
45
  else
44
- query_blocks << "(or #{@query.map{|q| "'#{sanitise(q)}'"}.join(' ')})"
46
+ query_blocks << "(or #{@query.map { |q| "'#{sanitise(q)}'" }.join(' ')})"
45
47
  end
46
48
 
47
- query_blocks += @filters.map do |key,value|
49
+ query_blocks += @filters.map do |key, value|
48
50
  if value.is_a?(String)
49
51
  "#{sanitise(key)}:'#{sanitise(value)}'"
50
52
  elsif value.is_a?(Array)
51
- "(or #{value.map {|v| "#{sanitise(key)}:'#{sanitise(v)}'" }.join(" ")})"
53
+ "(or #{value.map { |v| "#{sanitise(key)}:'#{sanitise(v)}'" }.join(" ")})"
52
54
  else
53
55
  raise InquisitioError.new('Filter values must be strings or arrays.')
54
56
  end
55
57
  end
56
58
 
57
59
  if Inquisitio.config.api_version == '2011-02-01'
58
- "bq=#{URI.encode("(and #{query_blocks.join(' ')})").gsub('&', '%26')}"
60
+ "bq=#{CGI::escape("(and #{query_blocks.join(' ')})").gsub('&', '%26')}"
59
61
  elsif Inquisitio.config.api_version == '2013-01-01'
60
- "q=#{URI.encode("(and #{query_blocks.join(' ')})").gsub('&', '%26')}&q.parser=structured"
62
+ "q=#{CGI::escape("(and #{query_blocks.join(' ')})").gsub('&', '%26')}&q.parser=structured"
61
63
  end
62
64
  end
63
65
 
64
66
  def sanitise(value)
65
- value.to_s.gsub('\'','')
67
+ value.to_s.gsub('\'', '')
66
68
  end
67
69
 
68
70
  def return_fields_query_string
69
71
  return '' if @return_fields.nil?
70
72
  if Inquisitio.config.api_version == '2011-02-01'
71
- "&return-fields=#{URI::encode(@return_fields.join(',').gsub('\'',''))}"
73
+ "&return-fields=#{CGI::escape(@return_fields.join(',').gsub('\'', ''))}"
72
74
  elsif Inquisitio.config.api_version == '2013-01-01'
73
- "&return=#{URI::encode(@return_fields.join(',').gsub('\'',''))}"
75
+ "&return=#{CGI::escape(@return_fields.join(',').gsub('\'', ''))}"
74
76
  end
75
77
  end
76
78
 
77
79
  def arguments
78
80
  return '' if @arguments.nil?
79
- @arguments.map{|key,value| "&#{key.to_s.gsub('\'','')}=#{value.to_s.gsub('\'','')}"}.join("")
81
+ @arguments.map { |key, value| "&#{key.to_s.gsub('\'', '')}=#{value.to_s.gsub('\'', '')}" }.join("")
80
82
  end
81
83
 
82
84
  def url_root
@@ -7,7 +7,7 @@ module Inquisitio
7
7
  Searcher.new.send(name, *args)
8
8
  end
9
9
 
10
- attr_reader :params
10
+ attr_reader :params, :options
11
11
 
12
12
  def initialize(params = nil)
13
13
  @params = params || {
@@ -17,7 +17,8 @@ module Inquisitio
17
17
  page: 1,
18
18
  returns: [],
19
19
  with: {},
20
- sort: {}
20
+ sort: {},
21
+ q_options: {}
21
22
  }
22
23
  @failed_attempts = 0
23
24
 
@@ -83,6 +84,12 @@ module Inquisitio
83
84
  end
84
85
  end
85
86
 
87
+ def options(value)
88
+ clone do |s|
89
+ s.params[:q_options] = value
90
+ end
91
+ end
92
+
86
93
  def per(value)
87
94
  clone do |s|
88
95
  s.params[:per] = value.to_i
@@ -166,6 +173,7 @@ module Inquisitio
166
173
  size: params[:per],
167
174
  start: params[:per] * (params[:page] - 1),
168
175
  sort: params[:sort],
176
+ q_options: params[:q_options],
169
177
  return_fields: return_fields
170
178
  )
171
179
  end
@@ -1,3 +1,3 @@
1
1
  module Inquisitio
2
- VERSION = '1.3.1'
2
+ VERSION = '1.4.0'
3
3
  end
@@ -11,7 +11,7 @@ module Inquisitio
11
11
 
12
12
  def test_create_correct_search_url_with_single_criteria_query
13
13
  url = SearchUrlBuilder.build(query: ['Star Wars'])
14
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star%20Wars&size=10'
14
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star+Wars&size=10'
15
15
  assert_equal expected_url, url
16
16
  end
17
17
 
@@ -23,80 +23,80 @@ module Inquisitio
23
23
 
24
24
  def test_create_correct_search_url_with_multiple_criteria_should_create_boolean_query
25
25
  url = SearchUrlBuilder.build(query: ['Star Wars', 'Episode One'])
26
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=(and%20(or%20\'Star%20Wars\'%20\'Episode%20One\'))&size=10'
26
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=%28and+%28or+%27Star+Wars%27+%27Episode+One%27%29%29&size=10'
27
27
  assert_equal expected_url, url
28
28
  end
29
29
 
30
30
  def test_create_correct_search_url_with_multiple_criteria_with_ampersand
31
31
  url = SearchUrlBuilder.build(query: ['Star&Wars', 'Episode One'])
32
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=(and%20(or%20\'Star%26Wars\'%20\'Episode%20One\'))&size=10'
32
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=%28and+%28or+%27Star%26Wars%27+%27Episode+One%27%29%29&size=10'
33
33
  assert_equal expected_url, url
34
34
  end
35
35
 
36
36
 
37
37
  def test_create_correct_search_url_including_return_fields
38
38
  url = SearchUrlBuilder.build(query: ['Star Wars'], return_fields: [ 'title', 'year', '%' ] )
39
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star%20Wars&return-fields=title,year,%25&size=10'
39
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star+Wars&return-fields=title%2Cyear%2C%25&size=10'
40
40
  assert_equal expected_url, url
41
41
  end
42
42
 
43
43
  def test_create_boolean_query_search_url_with_only_filters
44
44
  url = SearchUrlBuilder.build(filters: {title: 'Star Wars'})
45
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=(and%20title:\'Star%20Wars\')&size=10'
45
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=%28and+title%3A%27Star+Wars%27%29&size=10'
46
46
  assert_equal expected_url, url
47
47
  end
48
48
 
49
49
  def test_create_boolean_query_search_url_with_query_and_filters
50
50
  url = SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: 'Animation'})
51
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=(and%20\'Star%20Wars\'%20genre:\'Animation\')&size=10'
51
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=%28and+%27Star+Wars%27+genre%3A%27Animation%27%29&size=10'
52
52
  assert_equal expected_url, url
53
53
  end
54
54
 
55
55
  def test_create_boolean_query_search_url_with_query_and_filters_and_return_fields
56
56
  url = SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: 'Animation'}, return_fields: [ 'title', 'year', '%' ])
57
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=(and%20\'Star%20Wars\'%20genre:\'Animation\')&return-fields=title,year,%25&size=10'
57
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=%28and+%27Star+Wars%27+genre%3A%27Animation%27%29&return-fields=title%2Cyear%2C%25&size=10'
58
58
  assert_equal expected_url, url
59
59
  end
60
60
 
61
61
  def test_create_search_url_with_added_arguments
62
62
  url = SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: 'Animation'}, :arguments => { facet: 'genre', 'facet-genre-constraints' => 'Animation', 'facet-genre-top-n' => '5'})
63
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=(and%20\'Star%20Wars\'%20genre:\'Animation\')&facet=genre&facet-genre-constraints=Animation&facet-genre-top-n=5&size=10'
63
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=%28and+%27Star+Wars%27+genre%3A%27Animation%27%29&facet=genre&facet-genre-constraints=Animation&facet-genre-top-n=5&size=10'
64
64
  assert_equal expected_url, url
65
65
  end
66
66
 
67
67
  def test_create_search_url_with_default_size
68
68
  url = SearchUrlBuilder.build(query: ['Star Wars'])
69
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star%20Wars&size=10'
69
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star+Wars&size=10'
70
70
  assert_equal expected_url, url
71
71
  end
72
72
 
73
73
  def test_create_search_url_overriding_default_size
74
74
  url = SearchUrlBuilder.build(query: ['Star Wars'], :arguments => { size: '200' })
75
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star%20Wars&size=200'
75
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star+Wars&size=200'
76
76
  assert_equal expected_url, url
77
77
  end
78
78
 
79
79
  def test_create_search_url_with_start_and_default_size
80
80
  url = SearchUrlBuilder.build(query: ['Star Wars'], :arguments => { start: '20' })
81
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star%20Wars&start=20&size=10'
81
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star+Wars&start=20&size=10'
82
82
  assert_equal expected_url, url
83
83
  end
84
84
 
85
85
  def test_create_search_url_with_start_and_size
86
86
  url = SearchUrlBuilder.build(query: ['Star Wars'], :arguments => { start: '2', size: '200' })
87
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star%20Wars&start=2&size=200'
87
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?q=Star+Wars&start=2&size=200'
88
88
  assert_equal expected_url, url
89
89
  end
90
90
 
91
91
  def test_create_correct_search_url_with_sanatised_query_string
92
92
  url = SearchUrlBuilder.build(query: ['Star\' Wars'], filters: {genre: 'Anim\'ation'}, :arguments => { facet: 'ge\'nre', 'facet-genr\'e-constraints' => 'Anim\'ation', 'facet-gen\'re-top-n' => '\'5'}, return_fields: [ 't\'itle', 'y\'ear' ])
93
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=(and%20\'Star%20Wars\'%20genre:\'Animation\')&return-fields=title,year&facet=genre&facet-genre-constraints=Animation&facet-genre-top-n=5&size=10'
93
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=%28and+%27Star+Wars%27+genre%3A%27Animation%27%29&return-fields=title%2Cyear&facet=genre&facet-genre-constraints=Animation&facet-genre-top-n=5&size=10'
94
94
  assert_equal expected_url, url
95
95
  end
96
96
 
97
97
  def test_create_search_url_with_filter_array
98
98
  url = SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: ['Animation', 'Action']})
99
- expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=(and%20\'Star%20Wars\'%20(or%20genre:\'Animation\'%20genre:\'Action\'))&size=10'
99
+ expected_url = 'http://my.search-endpoint.com/2011-02-01/search?bq=%28and+%27Star+Wars%27+%28or+genre%3A%27Animation%27+genre%3A%27Action%27%29%29&size=10'
100
100
  assert_equal expected_url, url
101
101
  end
102
102
 
@@ -12,7 +12,7 @@ module Inquisitio
12
12
 
13
13
  def test_create_correct_search_url_with_single_criteria_query
14
14
  url = SearchUrlBuilder.build(query: ['Star Wars'])
15
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star%20Wars&size=10'
15
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&size=10'
16
16
  assert_equal expected_url, url
17
17
  end
18
18
 
@@ -24,80 +24,80 @@ module Inquisitio
24
24
 
25
25
  def test_create_correct_search_url_with_multiple_criteria_should_create_boolean_query
26
26
  url = SearchUrlBuilder.build(query: ['Star Wars', 'Episode One'])
27
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=(and%20(or%20\'Star%20Wars\'%20\'Episode%20One\'))&q.parser=structured&size=10'
27
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+%28or+%27Star+Wars%27+%27Episode+One%27%29%29&q.parser=structured&size=10'
28
28
  assert_equal expected_url, url
29
29
  end
30
30
 
31
31
  def test_create_correct_search_url_with_multiple_criteria_with_ampersand
32
32
  url = SearchUrlBuilder.build(query: ['Star&Wars', 'Episode One'])
33
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=(and%20(or%20\'Star%26Wars\'%20\'Episode%20One\'))&q.parser=structured&size=10'
33
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+%28or+%27Star%26Wars%27+%27Episode+One%27%29%29&q.parser=structured&size=10'
34
34
  assert_equal expected_url, url
35
35
  end
36
36
 
37
37
 
38
38
  def test_create_correct_search_url_including_return_fields
39
39
  url = SearchUrlBuilder.build(query: ['Star Wars'], return_fields: [ 'title', 'year', '%' ] )
40
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star%20Wars&return=title,year,%25&size=10'
40
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&return=title%2Cyear%2C%25&size=10'
41
41
  assert_equal expected_url, url
42
42
  end
43
43
 
44
44
  def test_create_boolean_query_search_url_with_only_filters
45
45
  url = SearchUrlBuilder.build(filters: {title: 'Star Wars'})
46
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=(and%20title:\'Star%20Wars\')&q.parser=structured&size=10'
46
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+title%3A%27Star+Wars%27%29&q.parser=structured&size=10'
47
47
  assert_equal expected_url, url
48
48
  end
49
49
 
50
50
  def test_create_boolean_query_search_url_with_query_and_filters
51
51
  url = SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: 'Animation'})
52
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=(and%20\'Star%20Wars\'%20genre:\'Animation\')&q.parser=structured&size=10'
52
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+%27Star+Wars%27+genre%3A%27Animation%27%29&q.parser=structured&size=10'
53
53
  assert_equal expected_url, url
54
54
  end
55
55
 
56
56
  def test_create_boolean_query_search_url_with_query_and_filters_and_return_fields
57
57
  url = SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: 'Animation'}, return_fields: [ 'title', 'year', '%' ])
58
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=(and%20\'Star%20Wars\'%20genre:\'Animation\')&q.parser=structured&return=title,year,%25&size=10'
58
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+%27Star+Wars%27+genre%3A%27Animation%27%29&q.parser=structured&return=title%2Cyear%2C%25&size=10'
59
59
  assert_equal expected_url, url
60
60
  end
61
61
 
62
62
  def test_create_search_url_with_added_arguments
63
63
  url = SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: 'Animation'}, :arguments => { facet: 'genre', 'facet-genre-constraints' => 'Animation', 'facet-genre-top-n' => '5'})
64
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=(and%20\'Star%20Wars\'%20genre:\'Animation\')&q.parser=structured&facet=genre&facet-genre-constraints=Animation&facet-genre-top-n=5&size=10'
64
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+%27Star+Wars%27+genre%3A%27Animation%27%29&q.parser=structured&facet=genre&facet-genre-constraints=Animation&facet-genre-top-n=5&size=10'
65
65
  assert_equal expected_url, url
66
66
  end
67
67
 
68
68
  def test_create_search_url_with_default_size
69
69
  url = SearchUrlBuilder.build(query: ['Star Wars'])
70
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star%20Wars&size=10'
70
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&size=10'
71
71
  assert_equal expected_url, url
72
72
  end
73
73
 
74
74
  def test_create_search_url_overriding_default_size
75
75
  url = SearchUrlBuilder.build(query: ['Star Wars'], :arguments => { size: '200' })
76
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star%20Wars&size=200'
76
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&size=200'
77
77
  assert_equal expected_url, url
78
78
  end
79
79
 
80
80
  def test_create_search_url_with_start_and_default_size
81
81
  url = SearchUrlBuilder.build(query: ['Star Wars'], :arguments => { start: '20' })
82
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star%20Wars&start=20&size=10'
82
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&start=20&size=10'
83
83
  assert_equal expected_url, url
84
84
  end
85
85
 
86
86
  def test_create_search_url_with_start_and_size
87
87
  url = SearchUrlBuilder.build(query: ['Star Wars'], :arguments => { start: '2', size: '200' })
88
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star%20Wars&start=2&size=200'
88
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=Star+Wars&start=2&size=200'
89
89
  assert_equal expected_url, url
90
90
  end
91
91
 
92
92
  def test_create_correct_search_url_with_sanatised_query_string
93
93
  url = SearchUrlBuilder.build(query: ['Star\' Wars'], filters: {genre: 'Anim\'ation'}, :arguments => { facet: 'ge\'nre', 'facet-genr\'e-constraints' => 'Anim\'ation', 'facet-gen\'re-top-n' => '\'5'}, return_fields: [ 't\'itle', 'y\'ear' ])
94
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=(and%20\'Star%20Wars\'%20genre:\'Animation\')&q.parser=structured&return=title,year&facet=genre&facet-genre-constraints=Animation&facet-genre-top-n=5&size=10'
94
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+%27Star+Wars%27+genre%3A%27Animation%27%29&q.parser=structured&return=title%2Cyear&facet=genre&facet-genre-constraints=Animation&facet-genre-top-n=5&size=10'
95
95
  assert_equal expected_url, url
96
96
  end
97
97
 
98
98
  def test_create_search_url_with_filter_array
99
99
  url = SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: ['Animation', 'Action']})
100
- expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=(and%20\'Star%20Wars\'%20(or%20genre:\'Animation\'%20genre:\'Action\'))&q.parser=structured&size=10'
100
+ expected_url = 'http://my.search-endpoint.com/2013-01-01/search?q=%28and+%27Star+Wars%27+%28or+genre%3A%27Animation%27+genre%3A%27Action%27%29%29&q.parser=structured&size=10'
101
101
  assert_equal expected_url, url
102
102
  end
103
103
 
@@ -106,5 +106,11 @@ module Inquisitio
106
106
  SearchUrlBuilder.build(query: ['Star Wars'], filters: {genre: {}})
107
107
  end
108
108
  end
109
+
110
+ def test_create_search_url_with_query_options
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'
113
+ assert_equal expected_url, url
114
+ end
109
115
  end
110
116
  end
@@ -98,18 +98,21 @@ module Inquisitio
98
98
 
99
99
  def test_where_gets_correct_url
100
100
  searcher = Searcher.where('Star Wars')
101
- assert searcher.send(:search_url).include? 'q=Star%20Wars'
101
+ search_url = searcher.send(:search_url)
102
+ assert(search_url.include?('q=Star+Wars'), "Search url should include search term: #{search_url}")
102
103
  end
103
104
 
104
105
  def test_where_gets_correct_url_with_filters_for_2011
105
106
  searcher = Searcher.where(title: 'Star Wars')
106
- assert searcher.send(:search_url).include? "bq=(and%20(or%20title:'Star%20Wars'))"
107
+ search_url = searcher.send(:search_url)
108
+ assert(search_url.include?('bq=%28and+%28or+title%3A%27Star+Wars%27%29%29'), "Search url should include query: #{search_url}")
107
109
  end
108
110
 
109
111
  def test_where_gets_correct_url_with_filters_for_2013
110
112
  Inquisitio.config.api_version = '2013-01-01'
111
113
  searcher = Searcher.where(title: 'Star Wars')
112
- assert searcher.send(:search_url).include? "q=(and%20(or%20title:'Star%20Wars'))&q.parser=structured"
114
+ search_url = searcher.send(:search_url)
115
+ assert(search_url.include?('q=%28and+%28or+title%3A%27Star+Wars%27%29%29&q.parser=structured'), "Search url should include query: #{search_url}")
113
116
  end
114
117
 
115
118
  def test_where_works_with_array_in_a_hash
@@ -220,13 +223,15 @@ module Inquisitio
220
223
 
221
224
  def test_returns_with_array_gets_correct_url_for_2011
222
225
  searcher = Searcher.returns('id', 'foobar')
223
- assert searcher.send(:search_url).include? '&return-fields=id,foobar'
226
+ search_url = searcher.send(:search_url)
227
+ assert(search_url.include?('&return-fields=id%2Cfoobar'), "Search url should include return fields: #{search_url}")
224
228
  end
225
229
 
226
230
  def test_returns_with_array_gets_correct_url_for_2013
227
231
  Inquisitio.config.api_version = '2013-01-01'
228
232
  searcher = Searcher.returns('id', 'foobar')
229
- assert searcher.send(:search_url).include? '&return=id,foobar'
233
+ search_url = searcher.send(:search_url)
234
+ assert(search_url.include?('&return=id%2Cfoobar'), "Search url should include return: #{search_url}")
230
235
  end
231
236
 
232
237
  def test_returns_appends_variable
@@ -327,7 +332,8 @@ module Inquisitio
327
332
  def test_should_return_type_and_id_by_default_for_2011
328
333
  searcher = Searcher.where('Star Wars')
329
334
  assert_equal [], searcher.params[:returns]
330
- assert searcher.send(:search_url).include? '&return-fields=type,id'
335
+ search_url = searcher.send(:search_url)
336
+ assert(search_url.include?('&return-fields=type%2Cid'), "Search url should include return for type and id: #{search_url}")
331
337
  end
332
338
 
333
339
  def test_should_not_specify_return_by_default_for_2013
@@ -381,5 +387,24 @@ module Inquisitio
381
387
  assert search_url.include?('sort=year%20desc,foo%20asc'), "search url should include sort parameter:\n#{search_url}"
382
388
  end
383
389
 
390
+ def test_should_default_to_empty_options
391
+ searcher = Searcher.where('Star Wars')
392
+ search_url = searcher.send(:search_url)
393
+ refute search_url.include?('q.options='), "search url should not include q.options parameter:\n#{search_url}"
394
+ end
395
+
396
+ def test_should_support_options
397
+ searcher = Searcher.where('Star Wars').options(fields: %w(title^2 plot^0.5))
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}"
400
+ end
401
+
402
+ def test_options_doesnt_mutate_searcher
403
+ searcher = Searcher.where('star wars')
404
+ searcher.options(fields: %w(title^2.0 plot^0.5))
405
+ search_url = searcher.send(:search_url)
406
+ refute search_url.include?('q.options='), "search url should not include q.options parameter:\n#{search_url}"
407
+ end
408
+
384
409
  end
385
410
  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.3.1
4
+ version: 1.4.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-13 00:00:00.000000000 Z
14
+ date: 2015-07-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: excon