Description:
fix compiler message add testing database
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r621:3b5645cfc80e - - 9 files changed: 130 inserted, 111 deleted

@@ -1,23 +1,24
1 1 source 'https://rubygems.org'
2 2
3 3 gem 'rails', '~>4.2.0'
4 4 gem 'activerecord-session_store'
5 5
6 6 gem 'select2-rails'
7 7
8 8 # Bundle edge Rails instead:
9 9 # gem 'rails', :git => 'git://github.com/rails/rails.git'
10 10
11 11 gem 'mysql2'
12 + gem 'sqlite3'
12 13
13 14 # Gems used only for assets and not required
14 15 # in production environments by default.
15 16 group :assets do
16 17 gem 'sass-rails'
17 18 gem 'coffee-rails'
18 19
19 20 # See https://github.com/sstephenson/execjs#readme for more supported runtimes
20 21 # gem 'therubyracer', :platforms => :ruby
21 22
22 23 gem 'uglifier'
23 24 end
@@ -36,25 +37,25
36 37 # Deploy with Capistrano
37 38 # gem 'capistrano'
38 39
39 40 # To use debugger
40 41 # gem 'debugger'
41 42 #
42 43
43 44 #in-place editor
44 45 gem 'best_in_place', '~> 3.0.1'
45 46
46 47 # jquery addition
47 48 gem 'jquery-rails'
48 - gem 'jquery-ui-sass-rails'
49 + gem 'jquery-ui-rails'
49 50 gem 'jquery-timepicker-addon-rails'
50 51 gem 'jquery-tablesorter'
51 52 gem 'jquery-countdown-rails'
52 53
53 54 #syntax highlighter
54 55 gem 'rouge'
55 56
56 57 #add bootstrap
57 58 gem 'bootstrap-sass', '~> 3.2.0'
58 59 gem 'bootstrap-switch-rails'
59 60 gem 'bootstrap-toggle-rails'
60 61 gem 'autoprefixer-rails'
@@ -94,28 +94,24
94 94 jquery-countdown-rails (2.0.2)
95 95 jquery-rails (4.2.1)
96 96 rails-dom-testing (>= 1, < 3)
97 97 railties (>= 4.2.0)
98 98 thor (>= 0.14, < 2.0)
99 99 jquery-tablesorter (1.23.1)
100 100 railties (>= 3.2, < 6)
101 101 jquery-timepicker-addon-rails (1.4.1)
102 102 railties (>= 3.1)
103 103 jquery-ui-rails (4.0.3)
104 104 jquery-rails
105 105 railties (>= 3.1.0)
106 - jquery-ui-sass-rails (4.0.3.0)
107 - jquery-rails
108 - jquery-ui-rails (= 4.0.3)
109 - railties (>= 3.1.0)
110 106 json (1.8.3)
111 107 loofah (2.0.3)
112 108 nokogiri (>= 1.5.9)
113 109 mail (2.6.4)
114 110 mime-types (>= 1.16, < 4)
115 111 mime-types (3.1)
116 112 mime-types-data (~> 3.2015)
117 113 mime-types-data (3.2016.0521)
118 114 mini_portile2 (2.1.0)
119 115 minitest (5.10.1)
120 116 momentjs-rails (2.15.1)
121 117 railties (>= 3.1)
@@ -183,24 +179,25
183 179 sprockets-rails (>= 2.0, < 4.0)
184 180 tilt (>= 1.1, < 3)
185 181 select2-rails (4.0.3)
186 182 thor (~> 0.14)
187 183 sexp_processor (4.7.0)
188 184 sprockets (3.7.0)
189 185 concurrent-ruby (~> 1.0)
190 186 rack (> 1, < 3)
191 187 sprockets-rails (3.2.0)
192 188 actionpack (>= 4.0)
193 189 activesupport (>= 4.0)
194 190 sprockets (>= 3.0.0)
191 + sqlite3 (1.3.12)
195 192 test-unit (3.2.3)
196 193 power_assert
197 194 thor (0.19.4)
198 195 thread_safe (0.3.5)
199 196 tilt (2.0.5)
200 197 tzinfo (1.2.2)
201 198 thread_safe (~> 0.1)
202 199 uglifier (3.0.4)
203 200 execjs (>= 0.3.0, < 3)
204 201 will_paginate (3.0.12)
205 202
206 203 PLATFORMS
@@ -214,30 +211,31
214 211 bootstrap-sass (~> 3.2.0)
215 212 bootstrap-switch-rails
216 213 bootstrap-toggle-rails
217 214 coffee-rails
218 215 dynamic_form
219 216 haml
220 217 haml-rails
221 218 in_place_editing
222 219 jquery-countdown-rails
223 220 jquery-rails
224 221 jquery-tablesorter
225 222 jquery-timepicker-addon-rails
226 - jquery-ui-sass-rails
223 + jquery-ui-rails
227 224 mail
228 225 momentjs-rails
229 226 mysql2
230 227 rails (~> 4.2.0)
231 228 rails_bootstrap_sortable
232 229 rdiscount
233 230 rouge
234 231 rspec-rails
235 232 sass-rails
236 233 select2-rails
234 + sqlite3
237 235 test-unit
238 236 uglifier
239 237 verification!
240 238 will_paginate (~> 3.0.7)
241 239
242 240 BUNDLED WITH
243 241 1.13.6
@@ -1,15 +1,15
1 1 class SubmissionsController < ApplicationController
2 2 before_filter :authenticate
3 - before_filter :submission_authorization, only: [:show, :direct_edit_submission]
3 + before_filter :submission_authorization, only: [:show, :direct_edit_submission, :download]
4 4
5 5 # GET /submissions
6 6 # GET /submissions.json
7 7 # Show problem selection and user's submission of that problem
8 8 def index
9 9 @user = @current_user
10 10 @problems = @user.available_problems
11 11
12 12 if params[:problem_id]==nil
13 13 @problem = nil
14 14 @submissions = nil
15 15 else
@@ -24,24 +24,36
24 24 end
25 25
26 26 # GET /submissions/1
27 27 # GET /submissions/1.json
28 28 def show
29 29 @submission = Submission.find(params[:id])
30 30
31 31 #log the viewing
32 32 user = User.find(session[:user_id])
33 33 SubmissionViewLog.create(user_id: session[:user_id],submission_id: @submission.id) unless user.admin?
34 34 end
35 35
36 + def download
37 + @submission = Submission.find(params[:id])
38 + send_data(@submission.source, {:filename => @submission.download_filename, :type => 'text/plain'})
39 + end
40 +
41 + def compiler_msg
42 + @submission = Submission.find(params[:id])
43 + respond_to do |format|
44 + format.js
45 + end
46 + end
47 +
36 48 #on-site new submission on specific problem
37 49 def direct_edit_problem
38 50 @problem = Problem.find(params[:problem_id])
39 51 @source = ''
40 52 render 'edit'
41 53 end
42 54
43 55 # GET /submissions/1/edit
44 56 def edit
45 57 @submission = Submission.find(params[:id])
46 58 @source = @submission.source.to_s
47 59 @problem = @submission.problem
@@ -53,24 +65,25
53 65 @problem = Problem.find(params[:pid])
54 66 @submission = Submission.find_last_by_user_and_problem(params[:uid],params[:pid])
55 67 puts User.find(params[:uid]).login
56 68 puts Problem.find(params[:pid]).name
57 69 puts 'nil' unless @submission
58 70 respond_to do |format|
59 71 format.js
60 72 end
61 73 end
62 74
63 75
64 76 protected
77 +
65 78 def submission_authorization
66 79 #admin always has privileged
67 80 if @current_user.admin?
68 81 return true
69 82 end
70 83
71 84 sub = Submission.find(params[:id])
72 85 if sub.problem.available?
73 86 puts "sub = #{sub.user.id}, current = #{@current_user.id}"
74 87 return true if GraderConfiguration["right.user_view_submission"] or sub.user == @current_user
75 88 end
76 89
@@ -1,26 +1,26
1 1
2 2 - if submission.nil?
3 3 = "-"
4 4 - else
5 5 - unless submission.graded_at
6 6 = t 'main.submitted_at'
7 7 = format_short_time(submission.submitted_at.localtime)
8 8 - else
9 - = t 'main.graded_at'
10 - = "#{format_short_time(submission.graded_at.localtime)}, "
9 + %strong= t 'main.graded_at'
10 + = "#{format_short_time(submission.graded_at.localtime)} "
11 + %br
11 12 - if GraderConfiguration['ui.show_score']
12 - = t 'main.score'
13 + %strong=t 'main.score'
13 14 = "#{(submission.points*100/submission.problem.full_score).to_i} "
14 15 = " ["
15 16 %tt
16 17 = submission.grader_comment
17 18 = "]"
19 + %br
20 + %strong View:
18 21 - if GraderConfiguration.show_grading_result
19 - = " | "
20 22 = link_to '[detailed result]', :action => 'result', :id => submission.id
21 - = " | "
22 - = link_to("[#{t 'main.cmp_msg'}]", {:action => 'compiler_msg', :id => submission.id}, {:popup => true})
23 - = " | "
24 - = link_to("[#{t 'main.src_link'}]",{:action => 'source', :id => submission.id})
25 - //= " | "
26 - //= link_to "[#{t 'main.submissions_link'}]", main_submission_path(submission.problem.id)
23 + = link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'}
24 + = link_to "#{t 'main.src_link'}", download_submission_path(submission.id), class: 'btn btn-xs btn-info'
25 + = link_to "#{t 'main.submissions_link'}", problem_submissions_path(problem_id), class: 'btn btn-xs btn-info'
26 +
@@ -11,16 +11,17
11 11 %br
12 12 - if GraderConfiguration['ui.show_score']
13 13 %strong=t 'main.score'
14 14 = "#{(submission.points*100/submission.problem.full_score).to_i} "
15 15 = " ["
16 16 %tt
17 17 = submission.grader_comment
18 18 = "]"
19 19 %br
20 20 %strong View:
21 21 - if GraderConfiguration.show_grading_result
22 22 = link_to '[detailed result]', :action => 'result', :id => submission.id
23 - = link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'}
23 + /= link_to "#{t 'main.cmp_msg'}", {:action => 'compiler_msg', :id => submission.id}, {popup: true,class: 'btn btn-xs btn-info'}
24 + = link_to "#{t 'main.cmp_msg'}", compiler_msg_submission_path(submission.id), {popup: true,remote: true,class: 'btn btn-xs btn-info'}
24 25 = link_to "#{t 'main.src_link'}",{:action => 'source', :id => submission.id}, class: 'btn btn-xs btn-info'
25 26 = link_to "#{t 'main.submissions_link'}", problem_submissions_path(problem_id), class: 'btn btn-xs btn-info'
26 27
@@ -19,28 +19,29
19 19 = label_tag "Task:"
20 20 = text_field_tag 'asdf', "#{@problem.long_name}", class: 'form-control', disabled: true
21 21
22 22 .form-group
23 23 = label_tag 'Language'
24 24 = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px"
25 25 .form-group
26 26 = submit_tag 'Submit', class: 'btn btn-success', id: 'live_submit',
27 27 data: {confirm: "Submitting this source code for task #{@problem.long_name}?"}
28 28 .panel.panel-info
29 29 .panel-heading
30 30 Latest Submission Status
31 + = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn-default btn-sm", remote: true
31 32 .panel-body
32 33 - if @submission
33 34 = render :partial => 'submission_short',
34 - :locals => {:submission => @submission, :problem_name => @problem.name }
35 + :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id }
35 36 .row
36 37 .col-md-12
37 38 %h2 Console
38 39 %textarea#console{style: 'height: 100%; width: 100%;background-color:#000;color:#fff;font-family: consolas, monaco, "Droid Sans Mono";',rows: 20}
39 40
40 41 :javascript
41 42 $(document).ready(function() {
42 43 e = ace.edit("editor")
43 44 e.setValue($("#text_haha").val());
44 45 e.gotoLine(1);
45 46 $("#language_id").trigger('change');
46 47 brython();
@@ -76,28 +76,29
76 76 %strong Runtime (s)
77 77 %td #{@submission.max_runtime}
78 78 %tr
79 79 %td.text-right
80 80 %strong Memory (kb)
81 81 %td #{@submission.peak_memory}
82 82 %tr
83 83 %td.text-right
84 84 %strong Compiler result
85 85 %td
86 86 %button.btn.btn-info.btn-xs{type: 'button', data: {toggle: 'modal', target: '#compiler'}}
87 87 view
88 - .modal.fade#compiler{tabindex: -1,role: 'dialog'}
89 - .modal-dialog.modal-lg{role:'document'}
90 - .modal-content
91 - .modal-header
92 - %button.close{type: 'button', data: {dismissed: :modal}, aria: {label: 'close'}}
93 - %span{aria: {hidden: 'true'}, data: {dismiss: 'modal'}} &times;
94 - %h4 Compiler message
95 - .modal-body
96 - %pre= @submission.compiler_message
97 - .modal-footer
98 - %button.btn.btn-default{type: 'button', data: {dismiss: 'modal'}} Close
99 88 - if session[:admin]
100 89 %tr
101 90 %td.text-right
102 91 %strong IP
103 92 %td #{@submission.ip_address}
93 +
94 + .modal.fade#compiler{tabindex: -1,role: 'dialog'}
95 + .modal-dialog.modal-lg{role:'document'}
96 + .modal-content
97 + .modal-header
98 + %button.close{type: 'button', data: {dismissed: :modal}, aria: {label: 'close'}}
99 + %span{aria: {hidden: 'true'}, data: {dismiss: 'modal'}} &times;
100 + %h4 Compiler message
101 + .modal-body
102 + %pre#compiler_msg= @submission.compiler_message
103 + .modal-footer
104 + %button.btn.btn-default{type: 'button', data: {dismiss: 'modal'}} Close
@@ -28,24 +28,28
28 28 end
29 29
30 30 resources :grader_configuration, controller: 'configurations'
31 31
32 32 resources :users do
33 33 member do
34 34 get 'toggle_activate', 'toggle_enable'
35 35 get 'stat'
36 36 end
37 37 end
38 38
39 39 resources :submissions do
40 + member do
41 + get 'download'
42 + get 'compiler_msg'
43 + end
40 44 collection do
41 45 get 'prob/:problem_id', to: 'submissions#index', as: 'problem'
42 46 get 'direct_edit_problem/:problem_id', to: 'submissions#direct_edit_problem', as: 'direct_edit_problem'
43 47 get 'get_latest_submission_status/:uid/:pid', to: 'submissions#get_latest_submission_status', as: 'get_latest_submission_status'
44 48 end
45 49 end
46 50
47 51 get 'tasks/view/:file.:ext' => 'tasks#view'
48 52 get 'tasks/download/:id/:file.:ext' => 'tasks#download'
49 53 get 'heartbeat/:id/edit' => 'heartbeat#edit'
50 54
51 55 #main
@@ -1,280 +1,280
1 1 # encoding: UTF-8
2 2 # This file is auto-generated from the current state of the database. Instead
3 3 # of editing this file, please use the migrations feature of Active Record to
4 4 # incrementally modify your database, and then regenerate this schema definition.
5 5 #
6 6 # Note that this schema.rb definition is the authoritative source for your
7 7 # database schema. If you need to create the application database on another
8 8 # system, you should be using db:schema:load, not running all the migrations
9 9 # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10 10 # you'll amass, the slower it'll run and the greater likelihood for issues).
11 11 #
12 - # It's strongly recommended to check this file into your version control system.
12 + # It's strongly recommended that you check this file into your version control system.
13 13
14 - ActiveRecord::Schema.define(:version => 20161031063337) do
14 + ActiveRecord::Schema.define(version: 20161031063337) do
15 15
16 - create_table "announcements", :force => true do |t|
16 + create_table "announcements", force: :cascade do |t|
17 17 t.string "author"
18 18 t.text "body"
19 19 t.boolean "published"
20 - t.datetime "created_at", :null => false
21 - t.datetime "updated_at", :null => false
22 - t.boolean "frontpage", :default => false
23 - t.boolean "contest_only", :default => false
20 + t.datetime "created_at", null: false
21 + t.datetime "updated_at", null: false
22 + t.boolean "frontpage", default: false
23 + t.boolean "contest_only", default: false
24 24 t.string "title"
25 25 t.string "notes"
26 26 end
27 27
28 - create_table "contests", :force => true do |t|
28 + create_table "contests", force: :cascade do |t|
29 29 t.string "title"
30 30 t.boolean "enabled"
31 - t.datetime "created_at", :null => false
32 - t.datetime "updated_at", :null => false
31 + t.datetime "created_at", null: false
32 + t.datetime "updated_at", null: false
33 33 t.string "name"
34 34 end
35 35
36 - create_table "contests_problems", :id => false, :force => true do |t|
36 + create_table "contests_problems", id: false, force: :cascade do |t|
37 37 t.integer "contest_id"
38 38 t.integer "problem_id"
39 39 end
40 40
41 - create_table "contests_users", :id => false, :force => true do |t|
41 + create_table "contests_users", id: false, force: :cascade do |t|
42 42 t.integer "contest_id"
43 43 t.integer "user_id"
44 44 end
45 45
46 - create_table "countries", :force => true do |t|
46 + create_table "countries", force: :cascade do |t|
47 47 t.string "name"
48 - t.datetime "created_at", :null => false
49 - t.datetime "updated_at", :null => false
48 + t.datetime "created_at", null: false
49 + t.datetime "updated_at", null: false
50 50 end
51 51
52 - create_table "descriptions", :force => true do |t|
52 + create_table "descriptions", force: :cascade do |t|
53 53 t.text "body"
54 54 t.boolean "markdowned"
55 - t.datetime "created_at", :null => false
56 - t.datetime "updated_at", :null => false
55 + t.datetime "created_at", null: false
56 + t.datetime "updated_at", null: false
57 57 end
58 58
59 - create_table "grader_configurations", :force => true do |t|
59 + create_table "grader_configurations", force: :cascade do |t|
60 60 t.string "key"
61 61 t.string "value_type"
62 62 t.string "value"
63 - t.datetime "created_at", :null => false
64 - t.datetime "updated_at", :null => false
63 + t.datetime "created_at", null: false
64 + t.datetime "updated_at", null: false
65 65 t.text "description"
66 66 end
67 67
68 - create_table "grader_processes", :force => true do |t|
68 + create_table "grader_processes", force: :cascade do |t|
69 69 t.string "host"
70 70 t.integer "pid"
71 71 t.string "mode"
72 72 t.boolean "active"
73 - t.datetime "created_at", :null => false
74 - t.datetime "updated_at", :null => false
73 + t.datetime "created_at", null: false
74 + t.datetime "updated_at", null: false
75 75 t.integer "task_id"
76 76 t.string "task_type"
77 77 t.boolean "terminated"
78 78 end
79 79
80 - add_index "grader_processes", ["host", "pid"], :name => "index_grader_processes_on_ip_and_pid"
80 + add_index "grader_processes", ["host", "pid"], name: "index_grader_processes_on_ip_and_pid"
81 81
82 - create_table "heart_beats", :force => true do |t|
82 + create_table "heart_beats", force: :cascade do |t|
83 83 t.integer "user_id"
84 84 t.string "ip_address"
85 - t.datetime "created_at", :null => false
86 - t.datetime "updated_at", :null => false
85 + t.datetime "created_at", null: false
86 + t.datetime "updated_at", null: false
87 87 t.string "status"
88 88 end
89 89
90 - add_index "heart_beats", ["updated_at"], :name => "index_heart_beats_on_updated_at"
90 + add_index "heart_beats", ["updated_at"], name: "index_heart_beats_on_updated_at"
91 91
92 - create_table "languages", :force => true do |t|
93 - t.string "name", :limit => 10
92 + create_table "languages", force: :cascade do |t|
93 + t.string "name", limit: 10
94 94 t.string "pretty_name"
95 - t.string "ext", :limit => 10
95 + t.string "ext", limit: 10
96 96 t.string "common_ext"
97 97 end
98 98
99 - create_table "logins", :force => true do |t|
99 + create_table "logins", force: :cascade do |t|
100 100 t.integer "user_id"
101 101 t.string "ip_address"
102 - t.datetime "created_at", :null => false
103 - t.datetime "updated_at", :null => false
102 + t.datetime "created_at", null: false
103 + t.datetime "updated_at", null: false
104 104 end
105 105
106 - create_table "messages", :force => true do |t|
106 + create_table "messages", force: :cascade do |t|
107 107 t.integer "sender_id"
108 108 t.integer "receiver_id"
109 109 t.integer "replying_message_id"
110 110 t.text "body"
111 111 t.boolean "replied"
112 - t.datetime "created_at", :null => false
113 - t.datetime "updated_at", :null => false
112 + t.datetime "created_at", null: false
113 + t.datetime "updated_at", null: false
114 114 end
115 115
116 - create_table "problems", :force => true do |t|
117 - t.string "name", :limit => 30
116 + create_table "problems", force: :cascade do |t|
117 + t.string "name", limit: 30
118 118 t.string "full_name"
119 119 t.integer "full_score"
120 120 t.date "date_added"
121 121 t.boolean "available"
122 122 t.string "url"
123 123 t.integer "description_id"
124 124 t.boolean "test_allowed"
125 125 t.boolean "output_only"
126 126 t.string "description_filename"
127 127 end
128 128
129 - create_table "rights", :force => true do |t|
129 + create_table "rights", force: :cascade do |t|
130 130 t.string "name"
131 131 t.string "controller"
132 132 t.string "action"
133 133 end
134 134
135 - create_table "rights_roles", :id => false, :force => true do |t|
135 + create_table "rights_roles", id: false, force: :cascade do |t|
136 136 t.integer "right_id"
137 137 t.integer "role_id"
138 138 end
139 139
140 - add_index "rights_roles", ["role_id"], :name => "index_rights_roles_on_role_id"
140 + add_index "rights_roles", ["role_id"], name: "index_rights_roles_on_role_id"
141 141
142 - create_table "roles", :force => true do |t|
142 + create_table "roles", force: :cascade do |t|
143 143 t.string "name"
144 144 end
145 145
146 - create_table "roles_users", :id => false, :force => true do |t|
146 + create_table "roles_users", id: false, force: :cascade do |t|
147 147 t.integer "role_id"
148 148 t.integer "user_id"
149 149 end
150 150
151 - add_index "roles_users", ["user_id"], :name => "index_roles_users_on_user_id"
151 + add_index "roles_users", ["user_id"], name: "index_roles_users_on_user_id"
152 152
153 - create_table "sessions", :force => true do |t|
153 + create_table "sessions", force: :cascade do |t|
154 154 t.string "session_id"
155 155 t.text "data"
156 156 t.datetime "updated_at"
157 157 end
158 158
159 - add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
160 - add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
159 + add_index "sessions", ["session_id"], name: "index_sessions_on_session_id"
160 + add_index "sessions", ["updated_at"], name: "index_sessions_on_updated_at"
161 161
162 - create_table "sites", :force => true do |t|
162 + create_table "sites", force: :cascade do |t|
163 163 t.string "name"
164 164 t.boolean "started"
165 165 t.datetime "start_time"
166 - t.datetime "created_at", :null => false
167 - t.datetime "updated_at", :null => false
166 + t.datetime "created_at", null: false
167 + t.datetime "updated_at", null: false
168 168 t.integer "country_id"
169 169 t.string "password"
170 170 end
171 171
172 - create_table "submission_view_logs", :force => true do |t|
172 + create_table "submission_view_logs", force: :cascade do |t|
173 173 t.integer "user_id"
174 174 t.integer "submission_id"
175 - t.datetime "created_at", :null => false
176 - t.datetime "updated_at", :null => false
175 + t.datetime "created_at", null: false
176 + t.datetime "updated_at", null: false
177 177 end
178 178
179 - create_table "submissions", :force => true do |t|
179 + create_table "submissions", force: :cascade do |t|
180 180 t.integer "user_id"
181 181 t.integer "problem_id"
182 182 t.integer "language_id"
183 183 t.text "source"
184 184 t.binary "binary"
185 185 t.datetime "submitted_at"
186 186 t.datetime "compiled_at"
187 187 t.text "compiler_message"
188 188 t.datetime "graded_at"
189 189 t.integer "points"
190 190 t.text "grader_comment"
191 191 t.integer "number"
192 192 t.string "source_filename"
193 193 t.float "max_runtime"
194 194 t.integer "peak_memory"
195 195 t.integer "effective_code_length"
196 196 t.string "ip_address"
197 197 end
198 198
199 - add_index "submissions", ["user_id", "problem_id", "number"], :name => "index_submissions_on_user_id_and_problem_id_and_number", :unique => true
200 - add_index "submissions", ["user_id", "problem_id"], :name => "index_submissions_on_user_id_and_problem_id"
199 + add_index "submissions", ["user_id", "problem_id", "number"], name: "index_submissions_on_user_id_and_problem_id_and_number", unique: true
200 + add_index "submissions", ["user_id", "problem_id"], name: "index_submissions_on_user_id_and_problem_id"
201 201
202 - create_table "tasks", :force => true do |t|
202 + create_table "tasks", force: :cascade do |t|
203 203 t.integer "submission_id"
204 204 t.datetime "created_at"
205 205 t.integer "status"
206 206 t.datetime "updated_at"
207 207 end
208 208
209 - create_table "test_pairs", :force => true do |t|
209 + create_table "test_pairs", force: :cascade do |t|
210 210 t.integer "problem_id"
211 - t.text "input", :limit => 16777215
212 - t.text "solution", :limit => 16777215
213 - t.datetime "created_at", :null => false
214 - t.datetime "updated_at", :null => false
211 + t.text "input", limit: 16777215
212 + t.text "solution", limit: 16777215
213 + t.datetime "created_at", null: false
214 + t.datetime "updated_at", null: false
215 215 end
216 216
217 - create_table "test_requests", :force => true do |t|
217 + create_table "test_requests", force: :cascade do |t|
218 218 t.integer "user_id"
219 219 t.integer "problem_id"
220 220 t.integer "submission_id"
221 221 t.string "input_file_name"
222 222 t.string "output_file_name"
223 223 t.string "running_stat"
224 224 t.integer "status"
225 - t.datetime "updated_at", :null => false
225 + t.datetime "updated_at", null: false
226 226 t.datetime "submitted_at"
227 227 t.datetime "compiled_at"
228 228 t.text "compiler_message"
229 229 t.datetime "graded_at"
230 230 t.string "grader_comment"
231 - t.datetime "created_at", :null => false
231 + t.datetime "created_at", null: false
232 232 t.float "running_time"
233 233 t.string "exit_status"
234 234 t.integer "memory_usage"
235 235 end
236 236
237 - add_index "test_requests", ["user_id", "problem_id"], :name => "index_test_requests_on_user_id_and_problem_id"
237 + add_index "test_requests", ["user_id", "problem_id"], name: "index_test_requests_on_user_id_and_problem_id"
238 238
239 - create_table "testcases", :force => true do |t|
239 + create_table "testcases", force: :cascade do |t|
240 240 t.integer "problem_id"
241 241 t.integer "num"
242 242 t.integer "group"
243 243 t.integer "score"
244 244 t.text "input"
245 245 t.text "sol"
246 - t.datetime "created_at", :null => false
247 - t.datetime "updated_at", :null => false
246 + t.datetime "created_at", null: false
247 + t.datetime "updated_at", null: false
248 248 end
249 249
250 - add_index "testcases", ["problem_id"], :name => "index_testcases_on_problem_id"
250 + add_index "testcases", ["problem_id"], name: "index_testcases_on_problem_id"
251 251
252 - create_table "user_contest_stats", :force => true do |t|
252 + create_table "user_contest_stats", force: :cascade do |t|
253 253 t.integer "user_id"
254 254 t.datetime "started_at"
255 - t.datetime "created_at", :null => false
256 - t.datetime "updated_at", :null => false
255 + t.datetime "created_at", null: false
256 + t.datetime "updated_at", null: false
257 257 t.boolean "forced_logout"
258 258 end
259 259
260 - create_table "users", :force => true do |t|
261 - t.string "login", :limit => 50
260 + create_table "users", force: :cascade do |t|
261 + t.string "login", limit: 50
262 262 t.string "full_name"
263 263 t.string "hashed_password"
264 - t.string "salt", :limit => 5
264 + t.string "salt", limit: 5
265 265 t.string "alias"
266 266 t.string "email"
267 267 t.integer "site_id"
268 268 t.integer "country_id"
269 - t.boolean "activated", :default => false
269 + t.boolean "activated", default: false
270 270 t.datetime "created_at"
271 271 t.datetime "updated_at"
272 - t.boolean "enabled", :default => true
272 + t.boolean "enabled", default: true
273 273 t.string "remark"
274 274 t.string "last_ip"
275 275 t.string "section"
276 276 end
277 277
278 - add_index "users", ["login"], :name => "index_users_on_login", :unique => true
278 + add_index "users", ["login"], name: "index_users_on_login", unique: true
279 279
280 280 end
You need to be logged in to leave comments. Login now