Skip to content

Commit

Permalink
Fixed upcoming and distance sorting.
Browse files Browse the repository at this point in the history
  • Loading branch information
bcaplan committed Mar 19, 2009
1 parent 8d83290 commit 144e525
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 33 deletions.
20 changes: 15 additions & 5 deletions app/models/event.rb
@@ -1,5 +1,6 @@
class Event < ActiveRecord::Base
named_scope :upcoming, :conditions => ["start_time > ?", Time.now]
named_scope :ordered_by, lambda { |order, asc_or_desc| {:order => "#{order} #{asc_or_desc}", :include => ['group', 'location']} }

belongs_to :group
belongs_to :location
Expand All @@ -10,13 +11,22 @@ class Event < ActiveRecord::Base
SEARCH_RADIUS = 50 # miles

# TODO: Make this less redundant. It would be easier if upcoming could be called after paginate.
# def self.sort(page, order, upcoming = 'true', location = nil)
# if upcoming == 'true' && !location.nil?
# self.upcoming.find_within(SEARCH_RADIUS, :origin => [location[:latitude],location[:longitude]]).paginate({ :page => page, :per_page => 10, :order => order, :include => ['group', 'location'] })
# elsif upcoming == 'true' && location.nil?
# self.upcoming.paginate({ :page => page, :per_page => 10, :order => order, :include => ['group', 'location'] })
# else
# self.paginate({ :page => page, :per_page => 10, :order => order, :include => ['group', 'location'] })
# end
# end

def self.sort(page, order, upcoming = 'true', location = nil)
if upcoming == 'true' && !location.nil?
self.upcoming.find_within(SEARCH_RADIUS, :origin => [location[:latitude],location[:longitude]]).paginate({ :page => page, :per_page => 10, :order => order, :include => ['group', 'location'] })
elsif upcoming == 'true' && location.nil?
self.upcoming.paginate({ :page => page, :per_page => 10, :order => order, :include => ['group', 'location'] })
order ||= 'start_time'
if location.nil?
self.upcoming.ordered_by(order, 'ASC').paginate({ :page => page, :per_page => 10 })
else
self.paginate({ :page => page, :per_page => 10, :order => order, :include => ['group', 'location'] })
self.upcoming.ordered_by(order, 'ASC').find_within(SEARCH_RADIUS, :origin => [location[:latitude],location[:longitude]]).paginate({ :page => page, :per_page => 10 })
end
end

Expand Down
57 changes: 29 additions & 28 deletions test/unit/event_test.rb
Expand Up @@ -25,36 +25,37 @@ class EventTest < ActiveSupport::TestCase
assert event.errors.on(:end_time)
end

test "sorts fields correctly" do
actual = Event.sort(1, 'start_time', 'false')

expected = [
events(:one),
events(:two),
events(:three),
events(:five),
events(:four)
]

assert_equal expected, actual
end

test "sorts related fields correctly" do
actual = Event.sort(1, 'groups.name', 'false')

expected = [
events(:three),
events(:two),
events(:four),
events(:five),
events(:one)
]

assert_equal expected, actual
end
# Obsolete now that upcoming is mandatory
# test "sorts fields correctly" do
# actual = Event.sort(1, 'start_time', 'false')
#
# expected = [
# events(:one),
# events(:two),
# events(:three),
# events(:five),
# events(:four)
# ]
#
# assert_equal expected, actual
# end
#
# test "sorts related fields correctly" do
# actual = Event.sort(1, 'groups.name', 'false')
#
# expected = [
# events(:three),
# events(:two),
# events(:four),
# events(:five),
# events(:one)
# ]
#
# assert_equal expected, actual
# end

test "sorts fields hides past events" do
actual = Event.sort(1, 'start_time', 'true')
actual = Event.sort(1, 'start_time')

expected = [
events(:three),
Expand Down

0 comments on commit 144e525

Please sign in to comment.