diff --git a/Rakefile b/Rakefile index 83a17d0..1c403c8 100644 --- a/Rakefile +++ b/Rakefile @@ -78,9 +78,7 @@ namespace :seinfeld do desc "Update the calendar of USER" task :update => :init do if ENV['USER'].blank? - Seinfeld::User.paginated_each do |user| - user.update_progress - end + Rake::Task["cron"].invoke else user = Seinfeld::User.find_by_login(ENV['USER']) if user @@ -100,7 +98,7 @@ end desc "cron task for keeping the CAN updated. Run once every hour." task :cron => 'seinfeld:init' do - Seinfeld::User.paginated_each do |user| + Seinfeld::User.active.paginated_each do |user| user.update_progress end end diff --git a/db/migrate/20100508161031_add_disabled_users.rb b/db/migrate/20100508161031_add_disabled_users.rb new file mode 100644 index 0000000..a9fd3a9 --- /dev/null +++ b/db/migrate/20100508161031_add_disabled_users.rb @@ -0,0 +1,9 @@ +class AddDisabledUsers < ActiveRecord::Migration + def self.up + add_column :seinfeld_users, :disabled, :boolean, :default => false + end + + def self.down + remove_column :seinfeld_users, :disabled, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index 57a2b5f..c866e3e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -9,7 +9,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 0) do +ActiveRecord::Schema.define(:version => 20100508161031) do create_table "seinfeld_progressions", :force => true do |t| t.date "created_at" @@ -26,6 +26,7 @@ t.date "longest_streak_start" t.date "longest_streak_end" t.string "time_zone", :limit => 50 + t.boolean "disabled", :default => false end add_index "seinfeld_users", ["current_streak"], :name => "index_seinfeld_users_current_streak" diff --git a/lib/seinfeld/user.rb b/lib/seinfeld/user.rb index c28960b..f2941f5 100644 --- a/lib/seinfeld/user.rb +++ b/lib/seinfeld/user.rb @@ -2,6 +2,7 @@ class Seinfeld class User < ActiveRecord::Base has_many :progressions, :order => 'seinfeld_progressions.created_at', :dependent => :delete_all + scope :active, where(:disabled => false) scope :best_current_streak, where('current_streak > 0').order('current_streak desc, login').limit(15) scope :best_alltime_streak, where('longest_streak > 0').order('longest_streak desc, login').limit(15) @@ -16,7 +17,7 @@ def self.paginated_each(limit = 30) end def self.first_page(limit = 30, since = 0) - users = all(:order => 'id', :limit => 30, :conditions => ['id > ?', since]) + users = where('id > ?', since).order('id').limit(limit) users.blank? ? nil : users end diff --git a/test/user_test.rb b/test/user_test.rb index 2caaf70..fb2a66f 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -2,8 +2,9 @@ class UserTest < ActiveSupport::TestCase fixtures do - @newb = Seinfeld::User.create! :login => 'newb' - @user = Seinfeld::User.create! :login => 'user', + @disabled = Seinfeld::User.create! :login => 'disabled', :disabled => true + @newb = Seinfeld::User.create! :login => 'newb' + @user = Seinfeld::User.create! :login => 'user', :streak_start => Date.civil(2007, 12, 30), :streak_end => Date.civil(2007, 12, 31), :current_streak => 2, :longest_streak_start => Date.civil(2007, 12, 30), :longest_streak_end => Date.civil(2007, 12, 31), :longest_streak => 2 @user.progressions.create!(:created_at => Date.civil(2007, 12, 30)) @@ -12,6 +13,29 @@ class UserTest < ActiveSupport::TestCase @today = Date.civil(2008, 1, 3) end + test "#first_page finds the first page of all users" do + assert_equal [@disabled, @newb], Seinfeld::User.first_page(2) + assert_equal [@user], Seinfeld::User.first_page(2, @newb.id) + assert_nil Seinfeld::User.first_page(2, @user.id) + end + + test "#first_page finds the first page of active users" do + assert_equal [@newb, @user], Seinfeld::User.active.first_page(2) + assert_nil Seinfeld::User.active.first_page(2, @user.id) + end + + test "#paginated_each pages through available users" do + users = [] + Seinfeld::User.paginated_each(2) { |u| users << u } + assert_equal [@disabled, @newb, @user], users + end + + test "#paginated_each pages through active users" do + users = [] + Seinfeld::User.active.paginated_each(2) { |u| users << u } + assert_equal [@newb, @user], users + end + test "#update_progress with newb, keeping the streak" do parsed_dates = [Date.civil(2007, 12, 31), Date.civil(2008, 1, 1), Date.civil(2008, 1, 2)]