diff --git a/app/models/category_finder.rb b/app/models/category_finder.rb index 0879bad..1a5b802 100644 --- a/app/models/category_finder.rb +++ b/app/models/category_finder.rb @@ -18,8 +18,17 @@ class CategoryFinder date_range = options.delete(:date_range) options = {:page => 1, :per_page => options.delete(:limit)}.merge(options) + + if asset == :events + finder_method = 'find' + options.delete(:page) + options.delete(:per_page) + else + finder_method = 'paginate' + end + if query.blank? - asset_class(asset).paginate(:all, options_for_find(asset_class(asset), {:order => "#{asset_table(asset)}.name"}.merge(options), date_range)) + asset_class(asset).send(finder_method, :all, options_for_find(asset_class(asset), {:order => "#{asset_table(asset)}.name"}.merge(options), date_range)) else ferret_options = {:page => options.delete(:page), :per_page => options.delete(:per_page)} asset_class(asset).find_by_contents(query, ferret_options, options_for_find(asset_class(asset), options, date_range)) @@ -36,16 +45,19 @@ class CategoryFinder end def current_events(year, month, options={}) - options = {:page => 1}.merge(options) + options.delete(:page) + options.delete(:per_page) + range = Event.date_range(year, month) - Event.paginate(:all, {:include => :categories, :conditions => { 'categories.id' => category_id, :start_date => range }}.merge(options)) + Event.find(:all, {:include => :categories, :conditions => { 'categories.id' => category_id, :start_date => range }}.merge(options)) end def upcoming_events(options = {}) - options = { :page => 1}.merge(options) + options.delete(:page) + options.delete(:per_page) - Event.paginate(:all, {:include => :categories, :conditions => [ 'categories.id = ? and start_date >= ?', category_id, Date.today ], :order => 'start_date' }.merge(options)) + Event.find(:all, {:include => :categories, :conditions => [ 'categories.id = ? and start_date >= ?', category_id, Date.today ], :order => 'start_date' }.merge(options)) end def product_categories_count(asset, product_categories_ids, objects_ids=nil) diff --git a/app/models/environment_finder.rb b/app/models/environment_finder.rb index 809d1d2..17050fd 100644 --- a/app/models/environment_finder.rb +++ b/app/models/environment_finder.rb @@ -31,11 +31,18 @@ class EnvironmentFinder elsif product_category && asset == :enterprises @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])) else - if (asset == :events) && date_range - @environment.send(asset).send(finder_method, :all, options.merge(:conditions => [ - 'start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day', - {:start_day => date_range.first, :end_day => date_range.last} - ])) + if asset == :events + # Ignore pagination for asset events + options.delete(:per_page) + options.delete(:page) + if date_range + @environment.send(asset).send('find', :all, options.merge(:conditions => [ + 'start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day', + {:start_day => date_range.first, :end_day => date_range.last} + ])) + else + @environment.send(asset).send('find', :all, options) + end else @environment.send(asset).send(finder_method, :all, options) end diff --git a/test/unit/category_finder_test.rb b/test/unit/category_finder_test.rb index 264bf73..5752234 100644 --- a/test/unit/category_finder_test.rb +++ b/test/unit/category_finder_test.rb @@ -234,7 +234,6 @@ class CategoryFinderTest < ActiveSupport::TestCase events = finder.current_events(2008, 1) assert_includes events, e1 assert_not_includes events, e2 - assert_respond_to events, :total_entries end should 'list upcoming events' do @@ -252,19 +251,6 @@ class CategoryFinderTest < ActiveSupport::TestCase assert_equal [upcoming_event_1, upcoming_event_2], @finder.upcoming_events end - should 'limit events' do - person = create_user('testuser').person - - Date.expects(:today).returns(Date.new(2008, 1, 15)).at_least_once - - past_event = Event.create!(:name => 'past event', :profile => person, :start_date => Date.new(2008,1,1), :category_ids => [@category.id]) - upcoming_event_1 = Event.create!(:name => 'upcoming event 1', :profile => person, :start_date => Date.new(2008,1,20), :category_ids => [@category.id]) - upcoming_event_2 = Event.create!(:name => 'upcoming event 2', :profile => person, :start_date => Date.new(2008,1,25), :category_ids => [@category.id]) - not_in_category = Event.create!(:name => 'e1', :profile => person, :start_date => Date.new(2008,1,20)) - - assert_equal [upcoming_event_1], @finder.upcoming_events(:per_page => 1) - end - should 'find person and enterprise in category by radius and region even without query' do cat = Category.create!(:name => 'test category', :environment => Environment.default) finder = CategoryFinder.new(cat) @@ -478,4 +464,59 @@ class CategoryFinderTest < ActiveSupport::TestCase assert_not_includes events_found, event_out_of_range end + should 'not paginate events' do + person = create_user('testuser').person + + create(:event, :profile_id => person.id, :category_ids => [@category.id]) + create(:event, :profile_id => person.id, :category_ids => [@category.id]) + + assert_equal 2, @finder.find(:events, '', :per_page => 1).size + end + + should 'not paginate events within a range' do + person = create_user('testuser').person + + create(:event, :profile_id => person.id, :category_ids => [@category.id]) + create(:event, :profile_id => person.id, :category_ids => [@category.id]) + + date_range = Date.today..Date.today + assert_equal 2, @finder.find(:events, '', :date_range => date_range, :per_page => 1).size + end + + should 'not paginate current events' do + person = create_user('testuser').person + + create(:event, :profile_id => person.id, :category_ids => [@category.id]) + create(:event, :profile_id => person.id, :category_ids => [@category.id]) + + assert_equal 2, @finder.current_events(Date.today.year, Date.today.month, :per_page => 1).size + end + + should 'not paginate upcoming events' do + person = create_user('testuser').person + + create(:event, :profile_id => person.id, :category_ids => [@category.id]) + create(:event, :profile_id => person.id, :category_ids => [@category.id]) + + assert_equal 2, @finder.upcoming_events(:per_page => 1).size + end + + should 'not paginate searching for specific event' do + person = create_user('teste').person + + today = Date.today + + event_to_found1 = Event.create!(:name => 'ToFound 1', :profile => person, :category_ids => [@category.id], :start_date => today) + event_to_found2 = Event.create!(:name => 'ToFound 2', :profile => person, :category_ids => [@category.id], :start_date => today) + event_to_not_found1 = Event.create!(:name => 'ToNotFound 1', :profile => person, :category_ids => [@category.id], :start_date => today) + event_to_not_found2 = Event.create!(:name => 'ToNotFound 2', :profile => person, :category_ids => [@category.id], :start_date => today) + + result = @finder.find(:events, 'ToFound', :per_page => 1) + + assert_includes result, event_to_found1 + assert_includes result, event_to_found2 + assert_not_includes result, event_to_not_found1 + assert_not_includes result, event_to_not_found2 + end + end diff --git a/test/unit/environment_finder_test.rb b/test/unit/environment_finder_test.rb index 24cd435..c1856d6 100644 --- a/test/unit/environment_finder_test.rb +++ b/test/unit/environment_finder_test.rb @@ -338,4 +338,25 @@ class EnvironmentFinderTest < ActiveSupport::TestCase assert_not_includes events_found, event_out_of_range end + should 'not paginate events' do + finder = EnvironmentFinder.new(Environment.default) + person = create_user('testuser').person + + fast_create(:event, :profile_id => person.id) + fast_create(:event, :profile_id => person.id) + + assert_equal 2, finder.find(:events, '', :per_page => 1, :page => 1).size + end + + should 'not paginate events within date range' do + finder = EnvironmentFinder.new(Environment.default) + person = create_user('testuser').person + + fast_create(:event, :profile_id => person.id) + fast_create(:event, :profile_id => person.id) + + date_range = Date.today..Date.today + assert_equal 2, finder.find(:events, '', :date_range => date_range, :per_page => 1, :page => 1).size + end + end -- libgit2 0.21.2