diff --git a/app/models/event.rb b/app/models/event.rb index 6b3fa4d..dd60bba 100644 --- a/app/models/event.rb +++ b/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 @@ -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 diff --git a/test/unit/event_test.rb b/test/unit/event_test.rb index d6d2344..976963f 100644 --- a/test/unit/event_test.rb +++ b/test/unit/event_test.rb @@ -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),