Rcov C0 Coverage Information - RCov

app/controllers/grade_entry_forms_controller.rb

Name Total Lines Lines of Code Total Coverage Code Coverage
app/controllers/grade_entry_forms_controller.rb 267 213
87.64%
86.38%

Key

Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.

Coverage Details

1 # The actions necessary for managing grade entry forms.
2 
3 class GradeEntryFormsController < ApplicationController
4   include PaginationHelper
5   include GradeEntryFormsHelper
6 
7   before_filter      :authorize_only_for_admin,
8                      :except => [:student_interface,
9                                  :grades,
10                                  :g_table_paginate,
11                                  :csv_download,
12                                  :csv_upload,
13                                  :update_grade]
14   before_filter      :authorize_for_ta_and_admin,
15                      :only => [:grades,
16                                :g_table_paginate,
17                                :csv_download,
18                                :csv_upload,
19                                :update_grade]
20   before_filter      :authorize_for_student,
21                       :only => [:student_interface]
22 
23   # Filters will be added as the student UI is implemented (eg. Show Released,
24   # Show All,...)
25   G_TABLE_PARAMS = {:model => GradeEntryStudent,
26                     :per_pages => [15, 30, 50, 100, 150],
27                     :filters => {'none' => {
28                                      :display => 'Show All',
29                                      :proc => lambda {
30                                           Student.all(:conditions => {
31                                               :hidden => false},
32                                           :order => "user_name")}}},
33                      :sorts => {'last_name' => lambda {
34                                      |a,b| a.last_name.downcase <=>
35                                         b.last_name.downcase}}}
36 
37   # Create a new grade entry form
38   def new
39     @grade_entry_form = GradeEntryForm.new
40   end
41 
42   def create
43     @grade_entry_form = GradeEntryForm.new
44 
45     # Process input properties
46     @grade_entry_form.transaction do
47       if @grade_entry_form.update_attributes(params[:grade_entry_form])
48         # Success message
49         flash[:success] = I18n.t('grade_entry_forms.create.success')
50         redirect_to :action => "edit", :id => @grade_entry_form.id
51       else
52         render "new"
53       end
54     end
55   end
56 
57   # Edit the properties of a grade entry form
58   def edit
59     @grade_entry_form = GradeEntryForm.find(params[:id])
60   end
61 
62   def update
63     @grade_entry_form = GradeEntryForm.find(params[:id])
64     # Process changes to input properties
65     @grade_entry_form.transaction do
66       if @grade_entry_form.update_attributes(params[:grade_entry_form])
67         # Success message
68         flash[:success] = I18n.t('grade_entry_forms.edit.success')
69         redirect_to :action => "edit", :id => @grade_entry_form.id
70       else
71         render "edit", :id => @grade_entry_form.id
72       end
73     end
74   end
75 
76   # View/modify the grades for this grade entry form
77   def grades
78     @grade_entry_form = GradeEntryForm.find(params[:id])
79     @filter = 'none'
80 
81     # Pagination options
82     @per_page = 15
83     @current_page = 1
84     @sort_by = 'last_name'
85     @desc = false
86     @filters = get_filters(G_TABLE_PARAMS)
87     @per_pages = G_TABLE_PARAMS[:per_pages]
88 
89     all_students = get_filtered_items(G_TABLE_PARAMS,
90                                       @filter,
91                                       @sort_by,
92                                       {:grade_entry_form => @grade_entry_form})
93     @students = all_students.paginate(:per_page => @per_page,
94                                       :page => @current_page)
95     @students_total = all_students.size
96     @alpha_pagination_options = @grade_entry_form.alpha_paginate(all_students,
97                                                         @per_page,
98                                                         @students.total_pages)
99     session[:alpha_pagination_options] = @alpha_pagination_options
100     @alpha_category = @alpha_pagination_options.first
101   end
102 
103   # Handle pagination for grades table
104   # (The algorithm used to compute the alphabetical categories
105   # (alpha_paginate()) is
106   # found in grade_entry_form.rb.)
107   def g_table_paginate
108     @grade_entry_form = GradeEntryForm.find(params[:id])
109     @students, @students_total = handle_paginate_event(
110                                    G_TABLE_PARAMS,
111                                    {:grade_entry_form => @grade_entry_form},
112                                    params)
113 
114     @current_page = params[:page]
115     @per_page = params[:per_page]
116     @filters = get_filters(G_TABLE_PARAMS)
117     @per_pages = G_TABLE_PARAMS[:per_pages]
118     @desc = params[:desc]
119     @filter = params[:filter]
120     if !params[:sort_by].blank?
121       @sort_by = params[:sort_by]
122     else
123       @sort_by = 'last_name'
124     end
125 
126     # Only re-compute the alpha_pagination_options for the drop-down menu
127     # if the number of items per page has changed
128     if params[:update_alpha_pagination_options] == "true"
129       all_students = get_filtered_items(
130                        G_TABLE_PARAMS,
131                        @filter,
132                        @sort_by,
133                        {:grade_entry_form => @grade_entry_form})
134       @alpha_pagination_options = @grade_entry_form.alpha_paginate(
135                                      all_students,
136                                      @per_page,
137                                      @students.total_pages)
138       @alpha_category = @alpha_pagination_options.first
139       session[:alpha_pagination_options] = @alpha_pagination_options
140     else
141       @alpha_pagination_options = session[:alpha_pagination_options]
142       @alpha_category = params[:alpha_category]
143     end
144   end
145 
146   # Update a grade in the table
147   def update_grade
148     grade_entry_form = GradeEntryForm.find_by_id(params[:id])
149     @student_id = params[:student_id]
150     @grade_entry_item_id = params[:grade_entry_item_id]
151     updated_grade = params[:updated_grade]
152     grade_entry_student =
153         grade_entry_form.grade_entry_students.find_or_create_by_user_id(
154            @student_id)
155     @grade =
156         grade_entry_student.grades.find_or_create_by_grade_entry_item_id(
157            @grade_entry_item_id)
158     @grade.grade = updated_grade
159     @grade_saved = @grade.save
160     @updated_student_total = grade_entry_form.calculate_total_mark(@student_id)
161   end
162 
163   # For students
164   def student_interface
165     @grade_entry_form = GradeEntryForm.find(params[:id])
166     @student = current_user
167   end
168 
169   # Release/unrelease the marks for all the students or for a subset of students
170   def update_grade_entry_students
171     return unless request.post?
172     grade_entry_form = GradeEntryForm.find_by_id(params[:id])
173     errors = []
174     grade_entry_students = []
175 
176     if params[:ap_select_full] == 'true'
177 
178       # Make sure we have a filter
179       if params[:filter].blank?
180         raise I18n.t('grade_entry_forms.grades.expected_filter')
181       end
182 
183       # Find the appropriate students using this filter
184       students = G_TABLE_PARAMS[:filters][params[:filter]][:proc].call()
185       students.each do |student|
186         grade_entry_students.push(grade_entry_form.grade_entry_students.find_or_create_by_user_id(student.id))
187       end
188     else
189       # Particular students in the table were selected
190       if params[:students].nil?
191         errors.push(I18n.t('grade_entry_forms.grades.must_select_a_student'))
192       else
193         params[:students].each do |student_id|
194           grade_entry_students.push(grade_entry_form.grade_entry_students.find_or_create_by_user_id(student_id))
195         end
196       end
197     end
198 
199     # Releasing/unreleasing marks should be logged
200     log_message = ""
201     if !params[:release_results].nil?
202       numGradeEntryStudentsChanged = set_release_on_grade_entry_students(
203                                         grade_entry_students,
204                                         true,
205                                         errors)
206       log_message = "Marks released for marks spreadsheet '" +
207                     "#{grade_entry_form.short_identifier}', ID: '#{grade_entry_form.id}' " +
208                     "(for #{numGradeEntryStudentsChanged} students)."
209     elsif !params[:unrelease_results].nil?
210       numGradeEntryStudentsChanged = set_release_on_grade_entry_students(
211                                        grade_entry_students,
212                                        false,
213                                        errors)
214       log_message = "Marks unreleased for marks spreadsheet '" +
215                     "#{grade_entry_form.short_identifier}', ID: '#{grade_entry_form.id}' " +
216                     "(for #{numGradeEntryStudentsChanged} students)."
217     end
218 
219     # Display success message
220     if numGradeEntryStudentsChanged > 0
221       flash[:success] = I18n.t('grade_entry_forms.grades.successfully_changed',
222                {:numGradeEntryStudentsChanged => numGradeEntryStudentsChanged})
223       m_logger = MarkusLogger.instance
224       m_logger.log(log_message)
225     end
226     flash[:errors] = errors
227 
228     redirect_to :action => 'grades', :id => params[:id]
229   end
230 
231   # Download the grades for this grade entry form as a CSV file
232   def csv_download
233     grade_entry_form = GradeEntryForm.find(params[:id])
234     send_data grade_entry_form.get_csv_grades_report,
235          :disposition => 'attachment',
236          :type => 'application/vnd.ms-excel',
237          :filename => "#{grade_entry_form.short_identifier}_grades_report.csv"
238   end
239 
240   # Upload the grades for this grade entry form using a CSV file
241   def csv_upload
242     @grade_entry_form = GradeEntryForm.find(params[:id])
243     grades_file = params[:upload][:grades_file]
244     if request.post? && !grades_file.blank?
245       begin
246         GradeEntryForm.transaction do
247           invalid_lines = []
248           num_updates = GradeEntryForm.parse_csv(grades_file,
249                                                  @grade_entry_form,
250                                                  invalid_lines)
251           if !invalid_lines.empty?
252             flash[:invalid_lines] = invalid_lines
253             flash[:error] = I18n.t('csv_invalid_lines')
254           end
255           if num_updates > 0
256             flash[:upload_notice] = I18n.t(
257                                  'grade_entry_forms.csv.upload_success',
258                                  :num_updates => num_updates)
259           end
260         end
261       end
262     end
263 
264     redirect_to :action => 'grades', :id => @grade_entry_form.id
265   end
266 
267 end

Generated on Sun Feb 05 00:08:06 -0500 2012 with rcov 0.9.10