Skip to content

Commit

Permalink
Merge pull request pinballmap#1273 from RyanTG/master
Browse files Browse the repository at this point in the history
no details flag for closest_by_lat_lon endpoint, for app
  • Loading branch information
RyanTG committed Jan 19, 2021
2 parents cfbb217 + 161fbfd commit 808afe4
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
7 changes: 5 additions & 2 deletions app/controllers/api/v1/locations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -131,17 +131,20 @@ def update
param :by_operator_id, Integer, desc: 'Operator ID to search by', required: false
param :by_at_least_n_machines_type, Integer, desc: 'Only locations with N or more machines', required: false
param :max_distance, String, desc: 'Closest location within "max_distance" miles', required: false
param :no_details, Integer, desc: 'Omit data that app does not need from pull', required: false
param :send_all_within_distance, String, desc: "Send all locations within max_distance param, or #{MAX_MILES_TO_SEARCH_FOR_CLOSEST_LOCATION} miles.", required: false
formats ['json']
def closest_by_lat_lon
max_distance = params[:max_distance] ||= MAX_MILES_TO_SEARCH_FOR_CLOSEST_LOCATION

except = params[:no_details] ? %i[country is_stern_army last_updated_by_user_id description region_id zone_id website phone] : nil

closest_locations = apply_scopes(Location).includes(:machines).near([params[:lat], params[:lon]], max_distance)

if !closest_locations.empty? && !params[:send_all_within_distance]
return_response(closest_locations.first, 'location', [], %i[machine_names machine_ids])
return_response(closest_locations.first, 'location', [], %i[machine_names machine_ids], 200, except)
elsif !closest_locations.empty?
return_response(closest_locations, 'locations', [], %i[machine_names machine_ids])
return_response(closest_locations, 'locations', [], %i[machine_names machine_ids], 200, except)
else
return_response("No locations within #{max_distance} miles.", 'errors')
end
Expand Down
23 changes: 23 additions & 0 deletions spec/requests/api/v1/locations_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,29 @@
expect(locations[1]['id']).to eq(close_location_two.id)
expect(locations[2]['id']).to eq(close_location_three.id)
end

it 'respects no_details and shows fewer location fields' do
close_location_one = FactoryBot.create(:location, region: @region, lat: 45.49, lon: -122.63)
close_location_two = FactoryBot.create(:location, region: @region, lat: 45.49, lon: -122.631)
FactoryBot.create(:location, region: @region, lat: 5.49, lon: 22.63)

get '/api/v1/locations/closest_by_lat_lon.json', params: { lat: close_location_one.lat, lon: close_location_one.lon, send_all_within_distance: 1, no_details: 1 }

expect(response.body.scan('country').size).to eq(0)
expect(response.body.scan('is_stern_army').size).to eq(0)
expect(response.body.scan('last_updated_by_user_id').size).to eq(0)
expect(response.body.scan('description').size).to eq(0)
expect(response.body.scan('region_id').size).to eq(0)
expect(response.body.scan('zone_id').size).to eq(0)
expect(response.body.scan('website').size).to eq(0)
expect(response.body.scan('phone').size).to eq(0)

expect(response.body.scan('id').size).to_not eq(0)
expect(response.body.scan('name').size).to_not eq(0)
expect(response.body.scan('lat').size).to_not eq(0)
expect(response.body.scan('lon').size).to_not eq(0)
expect(response.body.scan('city').size).to_not eq(0)
end

it 'respects filters' do
location_type = FactoryBot.create(:location_type)
Expand Down

0 comments on commit 808afe4

Please sign in to comment.