From afa5b7a72f6cf58de54fa2978c88aa6a1ca48838 Mon Sep 17 00:00:00 2001 From: Miles Gould Date: Fri, 29 Mar 2013 16:03:00 +0000 Subject: [PATCH] Find nearby members back-end (hardcoded to 100mi). --- Gemfile | 3 +++ app/controllers/members_controller.rb | 3 ++- spec/controllers/member_controller_spec.rb | 18 ++++++++++++++++-- spec/factories/member.rb | 9 ++++++++- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 414f71c20..39f3a06dd 100644 --- a/Gemfile +++ b/Gemfile @@ -69,7 +69,10 @@ gem 'friendly_id' # gravatars gem 'gravatar-ultimate' +# For geolocation gem 'geocoder' + +# For easy calendar selection gem 'bootstrap-datepicker-rails' # for phusion passenger (i.e. mod_rails) on the server diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 9abaeac53..870510420 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -27,7 +27,8 @@ class MembersController < ApplicationController def nearby @location = params[:location] || current_member.location - @nearby_members = [current_member] + @distance = 100 + @nearby_members = Member.near(@location, @distance) respond_to do |format| format.html # nearby.html.haml format.json { render json: @nearby_members } diff --git a/spec/controllers/member_controller_spec.rb b/spec/controllers/member_controller_spec.rb index 618308137..7056c4974 100644 --- a/spec/controllers/member_controller_spec.rb +++ b/spec/controllers/member_controller_spec.rb @@ -58,10 +58,24 @@ describe MembersController do end describe "GET nearby members" do - it "assigns the current member as nearby" do + before(:each) do + @member = FactoryGirl.create(:geolocated_member) + @member_near = FactoryGirl.create(:geolocated_member) + @member_far = FactoryGirl.create(:lonely_geolocated_member) controller.stub(:current_member) { @member } get :nearby, {:id => @member.id} - assigns(:nearby_members).should == [@member] + end + + it "assigns the current member as nearby" do + assigns(:nearby_members).should include @member + end + + it "assigns nearby members as nearby" do + assigns(:nearby_members).should include @member_near + end + + it "doesn't assign far-off members as nearby" do + assigns(:nearby_members).should_not include @member_far end end diff --git a/spec/factories/member.rb b/spec/factories/member.rb index 762a7f631..9c3531a1c 100644 --- a/spec/factories/member.rb +++ b/spec/factories/member.rb @@ -25,13 +25,20 @@ FactoryGirl.define do end factory :geolocated_member do - login_name 'JohnH' # for the astronomer who figured out longitude + sequence(:login_name) { |n| "JohnH#{n}" } # for the astronomer who figured out longitude location 'Greenwich, UK' # including lat/long explicitly because geocoder doesn't work with FG latitude 51.483 longitude 0.004 end + factory :lonely_geolocated_member do + sequence(:login_name) { |n| "ScottRF#{n}" } + location 'Amundsen-Scott Base, Antarctica' + latitude -90 + longitude 0 + end + factory :admin_member do roles { [ FactoryGirl.create(:admin) ] } end