query_string_search 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: 5750a3574b4f201d0e9274a96fa4e1a10aff5593
4
- data.tar.gz: 6bddcc98d4a95cd33a88ecd0d7d5adb49cc787ea
3
+ metadata.gz: 3b484ab328b2b5e889f3c0760ef857b3eccdddd8
4
+ data.tar.gz: d0071f6f1ca439042d640ce53271beda186375e2
5
5
  SHA512:
6
- metadata.gz: 97feeae7f780d9513c10b1861cee25a72297d4e6af9fddd2e341e922349d627fa11bd25c4b785a5323cbe805846d5dbdec514474c6a30e912a9312d8479c51fd
7
- data.tar.gz: 1f275d60e2f5b2075214b60e58546edbe261fc40db111734bb56584daac3088da502281314695fd3415a0c2ffae5c597ba1f8bbaaac30c4b4a9a19a2e4f5363e
6
+ metadata.gz: 44babe5feac2376030fe68edaa8a740c7f684959de01142558faa0d108ae86fc29ceeec5fd4a37896f38a19f6c95783c9da365afdea532632ab3e0ed110282f7
7
+ data.tar.gz: bc97993d98ba3a8fd352729a2bbbb3a329ee1d28d957c926e210f311fd42670526b538834a423092bdac947b519d0d3e4c99849cf47886b30722b908025d1bb5
data/.hound.yml ADDED
@@ -0,0 +1,3 @@
1
+ ruby:
2
+ enabled: true
3
+ config_file: .rubocop.yml
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.5
4
+ - 2.2.0
5
+ - 2.0.0-p598
6
+ addons:
7
+ code_climate:
8
+ repo_token:
9
+ secure: XnZ8VLwsAVr3lrJ3gInolfi1dALfyu0XF74t7VExawsSGuDJzFnx4lwqw139uQHqEUNOl/lj+SHMjgEIxtoM6LjX/JBiCQLTMyKKz5EMwUvFULz4vWaGy2mgyA48WDXZL/s1k0GW7/Q8wxpdQ7uU2izx2RaJ+PLmcYUNQhNBbMI=
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Query String Search
1
+ # Query String Search [![Build Status](https://api.travis-ci.org/umn-asr/query_string_search.svg?branch=master)](https://travis-ci.org/umn-asr/query_string_search) [![Code Climate](https://codeclimate.com/github/umn-asr/query_string_search/badges/gpa.svg)](https://codeclimate.com/github/umn-asr/query_string_search)
2
2
 
3
3
  Provides an easy way to implement searching in your API endpoints
4
4
 
@@ -28,6 +28,12 @@ Returns every movie without ratings.
28
28
 
29
29
  Returns every movie with a year of 1994
30
30
 
31
+ ### Return all data that matches one of many attributes
32
+
33
+ `movies?q=year=1994|1995`
34
+
35
+ Returns all movies with a year of 1994 or 1995
36
+
31
37
  ### Combining Searches
32
38
 
33
39
  Search criteria can be separated with commas
@@ -41,7 +47,7 @@ Records that match **all** the criteria will be returned. All un-rated movies ma
41
47
  Add this line to your application's Gemfile:
42
48
 
43
49
  ```ruby
44
- gem 'query_string_search', git: https://github.umn.edu/asrweb/query_string_search.git
50
+ gem 'query_string_search'
45
51
  ```
46
52
 
47
53
  And then execute:
@@ -4,10 +4,13 @@ class MatchAttribute < QueryStringSearch::AbstractMatcher
4
4
  end
5
5
 
6
6
  def self.reserved_words
7
- %w(true all)
7
+ [
8
+ /^true$/,
9
+ /^all$/
10
+ ]
8
11
  end
9
12
 
10
13
  def self.build_me?(_, search_param)
11
- reserved_words.include?(search_param)
14
+ reserved_words.any? { |r| r.match(search_param) }
12
15
  end
13
16
  end
@@ -6,6 +6,8 @@ class MatchAttributeValue < QueryStringSearch::AbstractMatcher
6
6
  end
7
7
 
8
8
  def self.build_me?(search_type, search_param)
9
- search_param && search_type && !all_reserved_words.include?(search_param)
9
+ search_param &&
10
+ search_type &&
11
+ all_reserved_words.none? { |r| r.match(search_param) }
10
12
  end
11
13
  end
@@ -0,0 +1,21 @@
1
+ class MatchMultipleAttributeValues < QueryStringSearch::AbstractMatcher
2
+ def match?(target)
3
+ match_with_contingency do
4
+ value.include?(target.public_send(attribute).to_s.upcase)
5
+ end
6
+ end
7
+
8
+ def self.reserved_words
9
+ [
10
+ /^\w+\|\w+/
11
+ ]
12
+ end
13
+
14
+ def value=(x)
15
+ super(x.split("|").map(&:upcase))
16
+ end
17
+
18
+ def self.build_me?(_, search_param)
19
+ reserved_words.any? { |r| r.match(search_param) }
20
+ end
21
+ end
@@ -4,10 +4,13 @@ class MatchNoAttribute < QueryStringSearch::AbstractMatcher
4
4
  end
5
5
 
6
6
  def self.reserved_words
7
- %w(false none)
7
+ [
8
+ /^false$/,
9
+ /^none$/
10
+ ]
8
11
  end
9
12
 
10
13
  def self.build_me?(_, search_param)
11
- reserved_words.include?(search_param)
14
+ reserved_words.any? { |r| r.match(search_param) }
12
15
  end
13
16
  end
@@ -1,3 +1,3 @@
1
1
  module QueryStringSearch
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -6,8 +6,8 @@ require 'query_string_search/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "query_string_search"
8
8
  spec.version = QueryStringSearch::VERSION
9
- spec.authors = ["Ian Whitney"]
10
- spec.email = ["whit0694@umn.edu"]
9
+ spec.authors = ["Ian Whitney", "Debbie Gillespie", "Davin Lagerroos"]
10
+ spec.email = ["asrwebteam@umn.edu"]
11
11
  spec.summary = %q{Provides a standard way to do searches using query strings in an API endpoint}
12
12
  spec.homepage = "https://github.com/umn-asr/query_string_search"
13
13
  spec.license = ""
@@ -20,5 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler", "~> 1.7"
21
21
  spec.add_development_dependency "rake", "~> 10.0"
22
22
  spec.add_development_dependency "rspec", "~> 3"
23
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 0.4"
24
+ spec.add_development_dependency "travis", "~> 1.7"
23
25
  spec.add_development_dependency "rubocop"
24
26
  end
@@ -0,0 +1,6 @@
1
+ class SearchTarget
2
+ attr_accessor :property
3
+ def initialize(property: nil)
4
+ self.property = property
5
+ end
6
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "../../lib/query_string_search"
2
+ require_relative "../fixtures/movie"
3
+
4
+ RSpec.describe "Finding data that matches one of many attributes" do
5
+ let(:data_set) { Movie.random_collection }
6
+ let(:movies_in_1994_or_1995) { data_set.select { |d| %w(1994 1995).include?(d.year) } }
7
+
8
+ it "Returns records that match the requested value" do
9
+ results = QueryStringSearch.new(data_set, "year=1994|1995").results
10
+
11
+ expect(results).to eq(movies_in_1994_or_1995)
12
+ end
13
+ end
@@ -1,10 +1,11 @@
1
1
  require_relative "../../../../lib/query_string_search/abstract_matcher"
2
+ require_relative "../../../doubles/search_target"
2
3
 
3
4
  RSpec.describe MatchAttribute do
4
5
  describe "match?" do
5
6
  describe "if the target's attribute is not nil" do
6
- let(:target) { Target.new("search_value") }
7
- let(:subject) { MatchAttribute.new(:search_attr) }
7
+ let(:target) { SearchTarget.new(property: "search_value") }
8
+ let(:subject) { MatchAttribute.new(:property) }
8
9
 
9
10
  it "is true" do
10
11
  expect(subject.match?(target)).to be_truthy
@@ -12,8 +13,8 @@ RSpec.describe MatchAttribute do
12
13
  end
13
14
 
14
15
  describe "if the target's attribute is true" do
15
- let(:target) { Target.new(true) }
16
- let(:subject) { MatchAttribute.new(:search_attr) }
16
+ let(:target) { SearchTarget.new(property: true) }
17
+ let(:subject) { MatchAttribute.new(:property) }
17
18
 
18
19
  it "is true" do
19
20
  expect(subject.match?(target)).to be_truthy
@@ -21,8 +22,8 @@ RSpec.describe MatchAttribute do
21
22
  end
22
23
 
23
24
  describe "if the target's attribute is nil" do
24
- let(:target) { Target.new(nil) }
25
- let(:subject) { MatchAttribute.new(:search_attr) }
25
+ let(:target) { SearchTarget.new(property: nil) }
26
+ let(:subject) { MatchAttribute.new(:property) }
26
27
 
27
28
  it "is false" do
28
29
  expect(subject.match?(target)).to be_falsey
@@ -30,8 +31,8 @@ RSpec.describe MatchAttribute do
30
31
  end
31
32
 
32
33
  describe "if the target's attribute is false" do
33
- let(:target) { Target.new(false) }
34
- let(:subject) { MatchAttribute.new(:search_attr) }
34
+ let(:target) { SearchTarget.new(property: false) }
35
+ let(:subject) { MatchAttribute.new(:property) }
35
36
 
36
37
  it "is true" do
37
38
  expect(subject.match?(target)).to be_falsey
@@ -39,7 +40,7 @@ RSpec.describe MatchAttribute do
39
40
  end
40
41
 
41
42
  describe "if the target doesn't have the attribute" do
42
- let(:target) { Target.new(rand) }
43
+ let(:target) { SearchTarget.new(property: rand) }
43
44
  let(:subject) { MatchAttribute.new(:bad_attr) }
44
45
 
45
46
  it "is false" do
@@ -1,11 +1,11 @@
1
1
  require_relative "../../../../lib/query_string_search/abstract_matcher"
2
+ require_relative "../../../doubles/search_target"
2
3
 
3
4
  RSpec.describe MatchAttributeValue do
4
5
  describe "match?" do
5
6
  describe "given a target with an attribute that matches the Parameter's attribute" do
6
- let(:target) { Target.new("search_value") }
7
- let(:value) { "search_value" }
8
- let(:subject) { MatchAttributeValue.new(:search_attr, value) }
7
+ let(:target) { SearchTarget.new(property: "search_value") }
8
+ let(:subject) { MatchAttributeValue.new(:property, "search_value") }
9
9
 
10
10
  it "returns true" do
11
11
  expect(subject.match?(target)).to be_truthy
@@ -13,9 +13,8 @@ RSpec.describe MatchAttributeValue do
13
13
  end
14
14
 
15
15
  describe "given a value with spaces" do
16
- let(:target) { Target.new("search value") }
17
- let(:value) { "search value" }
18
- let(:subject) { MatchAttributeValue.new(:search_attr, value) }
16
+ let(:target) { SearchTarget.new(property: "search value") }
17
+ let(:subject) { MatchAttributeValue.new(:property, "search value") }
19
18
 
20
19
  it "returns true" do
21
20
  expect(subject.match?(target)).to be_truthy
@@ -23,9 +22,8 @@ RSpec.describe MatchAttributeValue do
23
22
  end
24
23
 
25
24
  describe "given a target with an attribute that does not match the Parameter's attribute" do
26
- let(:target) { Target.new("other_value") }
27
- let(:value) { "search_value" }
28
- let(:subject) { MatchAttributeValue.new(:search_attr, value) }
25
+ let(:target) { SearchTarget.new(property: "other_value") }
26
+ let(:subject) { MatchAttributeValue.new(:property, "search_value") }
29
27
 
30
28
  it "returns false" do
31
29
  expect(subject.match?(target)).to be_falsey
@@ -33,9 +31,8 @@ RSpec.describe MatchAttributeValue do
33
31
  end
34
32
 
35
33
  describe "if the target doesn't have the attribute" do
36
- let(:value) { "search_value" }
37
- let(:target) { Target.new(value) }
38
- let(:subject) { MatchAttribute.new(:bad_attr, value) }
34
+ let(:target) { SearchTarget.new(property: "search_value") }
35
+ let(:subject) { MatchAttribute.new(:bad_attr, "search_value") }
39
36
 
40
37
  it "is false" do
41
38
  expect(subject.match?(target)).to be_falsey
@@ -46,14 +43,14 @@ RSpec.describe MatchAttributeValue do
46
43
  describe "build_me?" do
47
44
  describe "given a non-nil search_type and search_param" do
48
45
  it "is true" do
49
- expect(MatchAttributeValue.build_me?(rand, rand)).to be_truthy
46
+ expect(MatchAttributeValue.build_me?(rand.to_s, rand.to_s)).to be_truthy
50
47
  end
51
48
  end
52
49
 
53
50
  describe "given a nil search_type or search_param" do
54
51
  it "is false" do
55
- expect(MatchAttributeValue.build_me?(rand, nil)).to be_falsey
56
- expect(MatchAttributeValue.build_me?(nil, rand)).to be_falsey
52
+ expect(MatchAttributeValue.build_me?(rand.to_s, nil)).to be_falsey
53
+ expect(MatchAttributeValue.build_me?(nil, rand.to_s)).to be_falsey
57
54
  expect(MatchAttributeValue.build_me?(nil, nil)).to be_falsey
58
55
  end
59
56
  end
@@ -0,0 +1,47 @@
1
+ require_relative "../../../../lib/query_string_search/abstract_matcher"
2
+ require_relative "../../../doubles/search_target"
3
+
4
+ RSpec.describe MatchMultipleAttributeValues do
5
+ describe "match?" do
6
+ it "matches if the target's attribute is one of the values" do
7
+ target = SearchTarget.new(property: "1994")
8
+ matcher = MatchMultipleAttributeValues.new(:property, "1994|1995")
9
+ expect(matcher.match?(target)).to be_truthy
10
+ end
11
+
12
+ it "does not match if the target's attribute is not one of the values" do
13
+ target = SearchTarget.new(property: "199")
14
+ matcher = MatchMultipleAttributeValues.new(:property, "1994|1995")
15
+ expect(matcher.match?(target)).to be_falsey
16
+ end
17
+
18
+ describe "if the target doesn't have the attribute" do
19
+ it "is false" do
20
+ target = SearchTarget.new(property: "1994")
21
+ subject = MatchAttribute.new(:bad_attr, "1994|1995")
22
+
23
+ expect(subject.match?(target)).to be_falsey
24
+ end
25
+ end
26
+ end
27
+
28
+ describe "build_me?" do
29
+ describe "given a search type and search param that contains a pipe" do
30
+ it "is true" do
31
+ expect(MatchMultipleAttributeValues.build_me?(rand, "x|y")).to be_truthy
32
+ end
33
+ end
34
+
35
+ describe "given a search type and search param that starts with a pipe" do
36
+ it "is false" do
37
+ expect(MatchMultipleAttributeValues.build_me?(rand, "|x|y")).to be_falsey
38
+ end
39
+ end
40
+
41
+ describe "given a search type without a pipe" do
42
+ it "is false" do
43
+ expect(MatchMultipleAttributeValues.build_me?(rand, "xy")).to be_falsey
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,10 +1,11 @@
1
1
  require_relative "../../../../lib/query_string_search/abstract_matcher"
2
+ require_relative "../../../doubles/search_target"
2
3
 
3
4
  RSpec.describe MatchNoAttribute do
4
5
  describe "match?" do
5
6
  describe "if the target's attribute is not nil" do
6
- let(:target) { Target.new("search_value") }
7
- let(:subject) { MatchNoAttribute.new(:search_attr) }
7
+ let(:target) { SearchTarget.new(property: "search_value") }
8
+ let(:subject) { MatchNoAttribute.new(:property) }
8
9
 
9
10
  it "is false" do
10
11
  expect(subject.match?(target)).to be_falsey
@@ -12,8 +13,8 @@ RSpec.describe MatchNoAttribute do
12
13
  end
13
14
 
14
15
  describe "if the target's attribute is true" do
15
- let(:target) { Target.new(true) }
16
- let(:subject) { MatchNoAttribute.new(:search_attr) }
16
+ let(:target) { SearchTarget.new(property: true) }
17
+ let(:subject) { MatchNoAttribute.new(:property) }
17
18
 
18
19
  it "is true" do
19
20
  expect(subject.match?(target)).to be_falsey
@@ -21,8 +22,8 @@ RSpec.describe MatchNoAttribute do
21
22
  end
22
23
 
23
24
  describe "if the target's attribute is false" do
24
- let(:target) { Target.new(false) }
25
- let(:subject) { MatchNoAttribute.new(:search_attr) }
25
+ let(:target) { SearchTarget.new(property: false) }
26
+ let(:subject) { MatchNoAttribute.new(:property) }
26
27
 
27
28
  it "is true" do
28
29
  expect(subject.match?(target)).to be_truthy
@@ -30,8 +31,8 @@ RSpec.describe MatchNoAttribute do
30
31
  end
31
32
 
32
33
  describe "if the target's attribute is nil" do
33
- let(:target) { Target.new(nil) }
34
- let(:subject) { MatchNoAttribute.new(:search_attr) }
34
+ let(:target) { SearchTarget.new(property: nil) }
35
+ let(:subject) { MatchNoAttribute.new(:property) }
35
36
 
36
37
  it "is true" do
37
38
  expect(subject.match?(target)).to be_truthy
@@ -39,7 +40,7 @@ RSpec.describe MatchNoAttribute do
39
40
  end
40
41
 
41
42
  describe "if the target doesn't have the attribute" do
42
- let(:target) { Target.new(rand) }
43
+ let(:target) { SearchTarget.new(property: rand) }
43
44
  let(:subject) { MatchNoAttribute.new(:bad_attr) }
44
45
 
45
46
  it "is false" do
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
1
4
  # This file was generated by the `rails generate rspec:install` command. Conventionally, all
2
5
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
6
  # The generated `.rspec` file contains `--require spec_helper` which will cause this
@@ -81,5 +84,3 @@ RSpec.configure do |config|
81
84
  # as the one that triggered the failure.
82
85
  Kernel.srand config.seed
83
86
  end
84
-
85
- Target = Struct.new(:search_attr)
metadata CHANGED
@@ -1,14 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: query_string_search
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
  - Ian Whitney
8
+ - Debbie Gillespie
9
+ - Davin Lagerroos
8
10
  autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
- date: 2015-01-03 00:00:00.000000000 Z
13
+ date: 2015-02-11 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
16
  name: bundler
@@ -52,6 +54,34 @@ dependencies:
52
54
  - - "~>"
53
55
  - !ruby/object:Gem::Version
54
56
  version: '3'
57
+ - !ruby/object:Gem::Dependency
58
+ name: codeclimate-test-reporter
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.4'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '0.4'
71
+ - !ruby/object:Gem::Dependency
72
+ name: travis
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '1.7'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '1.7'
55
85
  - !ruby/object:Gem::Dependency
56
86
  name: rubocop
57
87
  requirement: !ruby/object:Gem::Requirement
@@ -68,15 +98,17 @@ dependencies:
68
98
  version: '0'
69
99
  description:
70
100
  email:
71
- - whit0694@umn.edu
101
+ - asrwebteam@umn.edu
72
102
  executables: []
73
103
  extensions: []
74
104
  extra_rdoc_files: []
75
105
  files:
76
106
  - ".gitignore"
107
+ - ".hound.yml"
77
108
  - ".rspec"
78
109
  - ".rubocop.yml"
79
110
  - ".ruby-version"
111
+ - ".travis.yml"
80
112
  - Gemfile
81
113
  - LICENSE.txt
82
114
  - README.md
@@ -87,13 +119,16 @@ files:
87
119
  - lib/query_string_search/matchers/match_all.rb
88
120
  - lib/query_string_search/matchers/match_attribute.rb
89
121
  - lib/query_string_search/matchers/match_attribute_value.rb
122
+ - lib/query_string_search/matchers/match_multiple_attribute_values.rb
90
123
  - lib/query_string_search/matchers/match_no_attribute.rb
91
124
  - lib/query_string_search/search_options.rb
92
125
  - lib/query_string_search/search_parameters.rb
93
126
  - lib/query_string_search/version.rb
94
127
  - query_string_search.gemspec
128
+ - spec/doubles/search_target.rb
95
129
  - spec/features/find_all_data_spec.rb
96
130
  - spec/features/find_records_that_match_multiple_parameters_spec.rb
131
+ - spec/features/find_records_that_match_one_of_many_attributes_spec.rb
97
132
  - spec/features/find_records_with_matching_attribute_values_spec.rb
98
133
  - spec/features/find_records_with_nil_attributes_spec.rb
99
134
  - spec/features/find_records_with_nonnil_attributes_spec.rb
@@ -104,6 +139,7 @@ files:
104
139
  - spec/lib/query_string_search/matchers/match_all_spec.rb
105
140
  - spec/lib/query_string_search/matchers/match_attribute_spec.rb
106
141
  - spec/lib/query_string_search/matchers/match_attribute_value_spec.rb
142
+ - spec/lib/query_string_search/matchers/match_multiple_attribute_values_spec.rb
107
143
  - spec/lib/query_string_search/matchers/match_no_attribute_spec.rb
108
144
  - spec/lib/query_string_search/search_options_spec.rb
109
145
  - spec/lib/query_string_search/search_parameters_spec.rb
@@ -133,8 +169,10 @@ signing_key:
133
169
  specification_version: 4
134
170
  summary: Provides a standard way to do searches using query strings in an API endpoint
135
171
  test_files:
172
+ - spec/doubles/search_target.rb
136
173
  - spec/features/find_all_data_spec.rb
137
174
  - spec/features/find_records_that_match_multiple_parameters_spec.rb
175
+ - spec/features/find_records_that_match_one_of_many_attributes_spec.rb
138
176
  - spec/features/find_records_with_matching_attribute_values_spec.rb
139
177
  - spec/features/find_records_with_nil_attributes_spec.rb
140
178
  - spec/features/find_records_with_nonnil_attributes_spec.rb
@@ -145,6 +183,7 @@ test_files:
145
183
  - spec/lib/query_string_search/matchers/match_all_spec.rb
146
184
  - spec/lib/query_string_search/matchers/match_attribute_spec.rb
147
185
  - spec/lib/query_string_search/matchers/match_attribute_value_spec.rb
186
+ - spec/lib/query_string_search/matchers/match_multiple_attribute_values_spec.rb
148
187
  - spec/lib/query_string_search/matchers/match_no_attribute_spec.rb
149
188
  - spec/lib/query_string_search/search_options_spec.rb
150
189
  - spec/lib/query_string_search/search_parameters_spec.rb