Description:
added codejom_status model for computing level with basic user update
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r219:95cc49d72ca8 - - 9 files changed: 79 inserted, 1 deleted

@@ -0,0 +1,5
1 + class CodejomStatus < ActiveRecord::Base
2 +
3 + belongs_to :user
4 +
5 + end
@@ -0,0 +1,15
1 + class CreateCodejomStatuses < ActiveRecord::Migration
2 + def self.up
3 + create_table :codejom_statuses do |t|
4 + t.integer :user_id
5 + t.boolean :alive
6 + t.integer :num_problems_passed
7 +
8 + t.timestamps
9 + end
10 + end
11 +
12 + def self.down
13 + drop_table :codejom_statuses
14 + end
15 + end
@@ -0,0 +1,11
1 + # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2 +
3 + one:
4 + user_id: 1
5 + alive: false
6 + num_problems_passed: 1
7 +
8 + two:
9 + user_id: 1
10 + alive: false
11 + num_problems_passed: 1
@@ -0,0 +1,8
1 + require 'test_helper'
2 +
3 + class CodejomStatusTest < ActiveSupport::TestCase
4 + # Replace this with your real tests.
5 + test "the truth" do
6 + assert true
7 + end
8 + end
@@ -240,6 +240,7
240 240
241 241 if passed
242 242 flash[:notice] = 'Correct solution.'
243 + user.update_codejom_status
243 244 else
244 245 flash[:notice] = 'Incorrect solution.'
245 246 end
@@ -29,6 +29,11
29 29 find(:all, :conditions => {:available => true}, :order => "date_added DESC")
30 30 end
31 31
32 + # TODO: may try to optimize this using cache
33 + def self.available_problem_count
34 + return Problem.find_available_problems.length
35 + end
36 +
32 37 def self.create_from_import_form_params(params, old_problem=nil)
33 38 problem = old_problem || Problem.new
34 39 import_params = Problem.extract_params_and_check(params, problem)
@@ -24,6 +24,9
24 24 belongs_to :site
25 25 belongs_to :country
26 26
27 + # For Code Jom
28 + has_one :codejom_status
29 +
27 30 named_scope :activated_users, :conditions => {:activated => true}
28 31
29 32 validates_presence_of :login
@@ -221,6 +224,24
221 224 end
222 225 end
223 226
227 + # For Code Jom
228 + def update_codejom_status
229 + status = codejom_status || CodejomStatus.new(:user => self)
230 + problem_count = Problem.available_problem_count
231 + status.num_problems_passed = (self.submission_statuses.find_all {|s| s.passed}).length
232 + status.alive = (problem_count - (status.num_problems_passed)) <= CODEJOM_MAX_ALIVE_LEVEL
233 + status.save
234 + end
235 +
236 + def codejom_level
237 + problem_count = Problem.available_problem_count
238 + if codejom_status!=nil
239 + return problem_count - codejom_status.num_problems_passed
240 + else
241 + return problem_count
242 + end
243 + end
244 +
224 245 protected
225 246 def encrypt_new_password
226 247 return if password.blank?
@@ -103,3 +103,7
103 103
104 104 # Uncomment so that configuration is read only once when the server is loaded
105 105 # Configuration.enable_caching
106 +
107 + # OPTIONS FOR CODE JOM
108 + # --------------------
109 + CODEJOM_MAX_ALIVE_LEVEL = 10
@@ -9,7 +9,7
9 9 #
10 10 # It's strongly recommended to check this file into your version control system.
11 11
12 - ActiveRecord::Schema.define(:version => 20100124054458) do
12 + ActiveRecord::Schema.define(:version => 20100124191250) do
13 13
14 14 create_table "announcements", :force => true do |t|
15 15 t.string "author"
@@ -22,6 +22,14
22 22 t.string "title"
23 23 end
24 24
25 + create_table "codejom_statuses", :force => true do |t|
26 + t.integer "user_id"
27 + t.boolean "alive"
28 + t.integer "num_problems_passed"
29 + t.datetime "created_at"
30 + t.datetime "updated_at"
31 + end
32 +
25 33 create_table "configurations", :force => true do |t|
26 34 t.string "key"
27 35 t.string "value_type"
You need to be logged in to leave comments. Login now