diff --git a/lib/data_magic/query_builder.rb b/lib/data_magic/query_builder.rb index f558f506..bb324dbd 100644 --- a/lib/data_magic/query_builder.rb +++ b/lib/data_magic/query_builder.rb @@ -83,8 +83,8 @@ def search_fields_and_ranges(squery, params, config) elsif match = /(.+)__(range|ne|not)\z/.match(param) field, operator = match.captures.map(&:to_sym) squery = range_query(squery, operator, field, value) - elsif field_type == "integer" && value.is_a?(String) && /,/.match(value) # list of integers - squery = integer_list_query(squery, param, value) + elsif (field_type == "string" || field_type == "integer") && value.is_a?(String) && /,/.match(value) # lists of integers or strings + squery = list_query(squery, param, value, field_type) else # field equality squery = squery.filter.match(param => value) end @@ -121,10 +121,16 @@ def autocomplete_query(squery, field, value) }) end - def integer_list_query(squery, field, value) + def list_query(squery, field, value, field_type) + if ( field_type == "string") + filter = value.split(',').map(&:to_str) + else + filter = value.split(',').map(&:to_i) + end + squery.filter( terms: { - field => value.split(',').map(&:to_i) } + field => filter } ) end diff --git a/spec/lib/data_magic/query_builder_spec.rb b/spec/lib/data_magic/query_builder_spec.rb index 2fda6aad..f159f3d1 100644 --- a/spec/lib/data_magic/query_builder_spec.rb +++ b/spec/lib/data_magic/query_builder_spec.rb @@ -68,6 +68,15 @@ it_correctly "builds a query" end + describe "can create a query from a list of numbers as strings with leading zeros" do + before do + allow(DataMagic.config).to receive(:field_type).with(:ope8_id).and_return("string") + end + subject { { ope8_id: '00303600,01092300,00122000' } } + let(:expected_query) { { terms: { ope8_id: ['00303600','01092300','00122000'] } } } + it_correctly "builds a query" + end + describe "can search within a location" do subject { {} } let(:options) { { zip: "94132", distance: "30mi" } } diff --git a/spec/lib/data_magic/search_spec.rb b/spec/lib/data_magic/search_spec.rb index 3c3b1a6a..643321d2 100644 --- a/spec/lib/data_magic/search_spec.rb +++ b/spec/lib/data_magic/search_spec.rb @@ -226,6 +226,14 @@ expect(response["results"][1]['name']).to eq("Los Angeles") expect(response["results"][2]['name']).to eq("Chicago") end + + it "can match a string field on multiple numbers with leading zeros" do + response = DataMagic.search({code: "02395220,02410877,00428803,"}, sort: "code:desc") + expect(response["results"].length).to eq(3) + expect(response["results"][0]['name']).to eq("Los Angeles") + expect(response["results"][1]['name']).to eq("New York") + expect(response["results"][2]['name']).to eq("Chicago") + end end describe "with null fields in the data" do