Commit 4e597889861695e5d919903d5b15957772cd5b80
Committed by
Antonio Terceiro
1 parent
39e82e74
Exists in
master
and in
28 other branches
Ignore pagination for events in global agenda
(ActionItem1255)
Showing
4 changed files
with
105 additions
and
24 deletions
Show diff stats
app/models/category_finder.rb
| @@ -18,8 +18,17 @@ class CategoryFinder | @@ -18,8 +18,17 @@ class CategoryFinder | ||
| 18 | date_range = options.delete(:date_range) | 18 | date_range = options.delete(:date_range) |
| 19 | 19 | ||
| 20 | options = {:page => 1, :per_page => options.delete(:limit)}.merge(options) | 20 | options = {:page => 1, :per_page => options.delete(:limit)}.merge(options) |
| 21 | + | ||
| 22 | + if asset == :events | ||
| 23 | + finder_method = 'find' | ||
| 24 | + options.delete(:page) | ||
| 25 | + options.delete(:per_page) | ||
| 26 | + else | ||
| 27 | + finder_method = 'paginate' | ||
| 28 | + end | ||
| 29 | + | ||
| 21 | if query.blank? | 30 | if query.blank? |
| 22 | - asset_class(asset).paginate(:all, options_for_find(asset_class(asset), {:order => "#{asset_table(asset)}.name"}.merge(options), date_range)) | 31 | + asset_class(asset).send(finder_method, :all, options_for_find(asset_class(asset), {:order => "#{asset_table(asset)}.name"}.merge(options), date_range)) |
| 23 | else | 32 | else |
| 24 | ferret_options = {:page => options.delete(:page), :per_page => options.delete(:per_page)} | 33 | ferret_options = {:page => options.delete(:page), :per_page => options.delete(:per_page)} |
| 25 | asset_class(asset).find_by_contents(query, ferret_options, options_for_find(asset_class(asset), options, date_range)) | 34 | asset_class(asset).find_by_contents(query, ferret_options, options_for_find(asset_class(asset), options, date_range)) |
| @@ -36,16 +45,19 @@ class CategoryFinder | @@ -36,16 +45,19 @@ class CategoryFinder | ||
| 36 | end | 45 | end |
| 37 | 46 | ||
| 38 | def current_events(year, month, options={}) | 47 | def current_events(year, month, options={}) |
| 39 | - options = {:page => 1}.merge(options) | 48 | + options.delete(:page) |
| 49 | + options.delete(:per_page) | ||
| 50 | + | ||
| 40 | range = Event.date_range(year, month) | 51 | range = Event.date_range(year, month) |
| 41 | 52 | ||
| 42 | - Event.paginate(:all, {:include => :categories, :conditions => { 'categories.id' => category_id, :start_date => range }}.merge(options)) | 53 | + Event.find(:all, {:include => :categories, :conditions => { 'categories.id' => category_id, :start_date => range }}.merge(options)) |
| 43 | end | 54 | end |
| 44 | 55 | ||
| 45 | def upcoming_events(options = {}) | 56 | def upcoming_events(options = {}) |
| 46 | - options = { :page => 1}.merge(options) | 57 | + options.delete(:page) |
| 58 | + options.delete(:per_page) | ||
| 47 | 59 | ||
| 48 | - Event.paginate(:all, {:include => :categories, :conditions => [ 'categories.id = ? and start_date >= ?', category_id, Date.today ], :order => 'start_date' }.merge(options)) | 60 | + Event.find(:all, {:include => :categories, :conditions => [ 'categories.id = ? and start_date >= ?', category_id, Date.today ], :order => 'start_date' }.merge(options)) |
| 49 | end | 61 | end |
| 50 | 62 | ||
| 51 | def product_categories_count(asset, product_categories_ids, objects_ids=nil) | 63 | def product_categories_count(asset, product_categories_ids, objects_ids=nil) |
app/models/environment_finder.rb
| @@ -31,11 +31,18 @@ class EnvironmentFinder | @@ -31,11 +31,18 @@ class EnvironmentFinder | ||
| 31 | elsif product_category && asset == :enterprises | 31 | elsif product_category && asset == :enterprises |
| 32 | @environment.send(asset).send(finder_method, :all, options.merge( :order => 'profiles.name', :joins => 'inner join products on (products.enterprise_id = profiles.id) inner join product_categorizations on (product_categorizations.product_id = products.id)', :conditions => ['product_categorizations.category_id = (?)', product_category.id])) | 32 | @environment.send(asset).send(finder_method, :all, options.merge( :order => 'profiles.name', :joins => 'inner join products on (products.enterprise_id = profiles.id) inner join product_categorizations on (product_categorizations.product_id = products.id)', :conditions => ['product_categorizations.category_id = (?)', product_category.id])) |
| 33 | else | 33 | else |
| 34 | - if (asset == :events) && date_range | ||
| 35 | - @environment.send(asset).send(finder_method, :all, options.merge(:conditions => [ | ||
| 36 | - 'start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day', | ||
| 37 | - {:start_day => date_range.first, :end_day => date_range.last} | ||
| 38 | - ])) | 34 | + if asset == :events |
| 35 | + # Ignore pagination for asset events | ||
| 36 | + options.delete(:per_page) | ||
| 37 | + options.delete(:page) | ||
| 38 | + if date_range | ||
| 39 | + @environment.send(asset).send('find', :all, options.merge(:conditions => [ | ||
| 40 | + 'start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day', | ||
| 41 | + {:start_day => date_range.first, :end_day => date_range.last} | ||
| 42 | + ])) | ||
| 43 | + else | ||
| 44 | + @environment.send(asset).send('find', :all, options) | ||
| 45 | + end | ||
| 39 | else | 46 | else |
| 40 | @environment.send(asset).send(finder_method, :all, options) | 47 | @environment.send(asset).send(finder_method, :all, options) |
| 41 | end | 48 | end |
test/unit/category_finder_test.rb
| @@ -234,7 +234,6 @@ class CategoryFinderTest < ActiveSupport::TestCase | @@ -234,7 +234,6 @@ class CategoryFinderTest < ActiveSupport::TestCase | ||
| 234 | events = finder.current_events(2008, 1) | 234 | events = finder.current_events(2008, 1) |
| 235 | assert_includes events, e1 | 235 | assert_includes events, e1 |
| 236 | assert_not_includes events, e2 | 236 | assert_not_includes events, e2 |
| 237 | - assert_respond_to events, :total_entries | ||
| 238 | end | 237 | end |
| 239 | 238 | ||
| 240 | should 'list upcoming events' do | 239 | should 'list upcoming events' do |
| @@ -252,19 +251,6 @@ class CategoryFinderTest < ActiveSupport::TestCase | @@ -252,19 +251,6 @@ class CategoryFinderTest < ActiveSupport::TestCase | ||
| 252 | assert_equal [upcoming_event_1, upcoming_event_2], @finder.upcoming_events | 251 | assert_equal [upcoming_event_1, upcoming_event_2], @finder.upcoming_events |
| 253 | end | 252 | end |
| 254 | 253 | ||
| 255 | - should 'limit events' do | ||
| 256 | - person = create_user('testuser').person | ||
| 257 | - | ||
| 258 | - Date.expects(:today).returns(Date.new(2008, 1, 15)).at_least_once | ||
| 259 | - | ||
| 260 | - past_event = Event.create!(:name => 'past event', :profile => person, :start_date => Date.new(2008,1,1), :category_ids => [@category.id]) | ||
| 261 | - upcoming_event_1 = Event.create!(:name => 'upcoming event 1', :profile => person, :start_date => Date.new(2008,1,20), :category_ids => [@category.id]) | ||
| 262 | - upcoming_event_2 = Event.create!(:name => 'upcoming event 2', :profile => person, :start_date => Date.new(2008,1,25), :category_ids => [@category.id]) | ||
| 263 | - not_in_category = Event.create!(:name => 'e1', :profile => person, :start_date => Date.new(2008,1,20)) | ||
| 264 | - | ||
| 265 | - assert_equal [upcoming_event_1], @finder.upcoming_events(:per_page => 1) | ||
| 266 | - end | ||
| 267 | - | ||
| 268 | should 'find person and enterprise in category by radius and region even without query' do | 254 | should 'find person and enterprise in category by radius and region even without query' do |
| 269 | cat = Category.create!(:name => 'test category', :environment => Environment.default) | 255 | cat = Category.create!(:name => 'test category', :environment => Environment.default) |
| 270 | finder = CategoryFinder.new(cat) | 256 | finder = CategoryFinder.new(cat) |
| @@ -478,4 +464,59 @@ class CategoryFinderTest < ActiveSupport::TestCase | @@ -478,4 +464,59 @@ class CategoryFinderTest < ActiveSupport::TestCase | ||
| 478 | assert_not_includes events_found, event_out_of_range | 464 | assert_not_includes events_found, event_out_of_range |
| 479 | end | 465 | end |
| 480 | 466 | ||
| 467 | + should 'not paginate events' do | ||
| 468 | + person = create_user('testuser').person | ||
| 469 | + | ||
| 470 | + create(:event, :profile_id => person.id, :category_ids => [@category.id]) | ||
| 471 | + create(:event, :profile_id => person.id, :category_ids => [@category.id]) | ||
| 472 | + | ||
| 473 | + assert_equal 2, @finder.find(:events, '', :per_page => 1).size | ||
| 474 | + end | ||
| 475 | + | ||
| 476 | + should 'not paginate events within a range' do | ||
| 477 | + person = create_user('testuser').person | ||
| 478 | + | ||
| 479 | + create(:event, :profile_id => person.id, :category_ids => [@category.id]) | ||
| 480 | + create(:event, :profile_id => person.id, :category_ids => [@category.id]) | ||
| 481 | + | ||
| 482 | + date_range = Date.today..Date.today | ||
| 483 | + assert_equal 2, @finder.find(:events, '', :date_range => date_range, :per_page => 1).size | ||
| 484 | + end | ||
| 485 | + | ||
| 486 | + should 'not paginate current events' do | ||
| 487 | + person = create_user('testuser').person | ||
| 488 | + | ||
| 489 | + create(:event, :profile_id => person.id, :category_ids => [@category.id]) | ||
| 490 | + create(:event, :profile_id => person.id, :category_ids => [@category.id]) | ||
| 491 | + | ||
| 492 | + assert_equal 2, @finder.current_events(Date.today.year, Date.today.month, :per_page => 1).size | ||
| 493 | + end | ||
| 494 | + | ||
| 495 | + should 'not paginate upcoming events' do | ||
| 496 | + person = create_user('testuser').person | ||
| 497 | + | ||
| 498 | + create(:event, :profile_id => person.id, :category_ids => [@category.id]) | ||
| 499 | + create(:event, :profile_id => person.id, :category_ids => [@category.id]) | ||
| 500 | + | ||
| 501 | + assert_equal 2, @finder.upcoming_events(:per_page => 1).size | ||
| 502 | + end | ||
| 503 | + | ||
| 504 | + should 'not paginate searching for specific event' do | ||
| 505 | + person = create_user('teste').person | ||
| 506 | + | ||
| 507 | + today = Date.today | ||
| 508 | + | ||
| 509 | + event_to_found1 = Event.create!(:name => 'ToFound 1', :profile => person, :category_ids => [@category.id], :start_date => today) | ||
| 510 | + event_to_found2 = Event.create!(:name => 'ToFound 2', :profile => person, :category_ids => [@category.id], :start_date => today) | ||
| 511 | + event_to_not_found1 = Event.create!(:name => 'ToNotFound 1', :profile => person, :category_ids => [@category.id], :start_date => today) | ||
| 512 | + event_to_not_found2 = Event.create!(:name => 'ToNotFound 2', :profile => person, :category_ids => [@category.id], :start_date => today) | ||
| 513 | + | ||
| 514 | + result = @finder.find(:events, 'ToFound', :per_page => 1) | ||
| 515 | + | ||
| 516 | + assert_includes result, event_to_found1 | ||
| 517 | + assert_includes result, event_to_found2 | ||
| 518 | + assert_not_includes result, event_to_not_found1 | ||
| 519 | + assert_not_includes result, event_to_not_found2 | ||
| 520 | + end | ||
| 521 | + | ||
| 481 | end | 522 | end |
test/unit/environment_finder_test.rb
| @@ -338,4 +338,25 @@ class EnvironmentFinderTest < ActiveSupport::TestCase | @@ -338,4 +338,25 @@ class EnvironmentFinderTest < ActiveSupport::TestCase | ||
| 338 | assert_not_includes events_found, event_out_of_range | 338 | assert_not_includes events_found, event_out_of_range |
| 339 | end | 339 | end |
| 340 | 340 | ||
| 341 | + should 'not paginate events' do | ||
| 342 | + finder = EnvironmentFinder.new(Environment.default) | ||
| 343 | + person = create_user('testuser').person | ||
| 344 | + | ||
| 345 | + fast_create(:event, :profile_id => person.id) | ||
| 346 | + fast_create(:event, :profile_id => person.id) | ||
| 347 | + | ||
| 348 | + assert_equal 2, finder.find(:events, '', :per_page => 1, :page => 1).size | ||
| 349 | + end | ||
| 350 | + | ||
| 351 | + should 'not paginate events within date range' do | ||
| 352 | + finder = EnvironmentFinder.new(Environment.default) | ||
| 353 | + person = create_user('testuser').person | ||
| 354 | + | ||
| 355 | + fast_create(:event, :profile_id => person.id) | ||
| 356 | + fast_create(:event, :profile_id => person.id) | ||
| 357 | + | ||
| 358 | + date_range = Date.today..Date.today | ||
| 359 | + assert_equal 2, finder.find(:events, '', :date_range => date_range, :per_page => 1, :page => 1).size | ||
| 360 | + end | ||
| 361 | + | ||
| 341 | end | 362 | end |