Commit 9caca45fd8ece2d0e27abd667ac6beacfac55e0c

Authored by Daniel Alves + Diego Araújo + Guilherme Rojas
Committed by Paulo Meireles
1 parent 09f2a25b

[Mezuro] New validations for readings.

plugins/mezuro/controllers/myprofile/mezuro_plugin_reading_controller.rb
... ... @@ -4,6 +4,10 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController
4 4  
5 5 def new
6 6 @reading_group_content = profile.articles.find(params[:id])
  7 +
  8 + readings = Kalibro::Reading.readings_of @reading_group_content.reading_group_id
  9 + @parser="|*|"
  10 + @labels_and_grades = readings.map {|reading| "#{reading.label}#{@parser}#{reading.grade}#{@parser}"}
7 11 end
8 12  
9 13 def save
... ... @@ -20,6 +24,15 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController
20 24 def edit
21 25 @reading_group_content = profile.articles.find(params[:id])
22 26 @reading = Kalibro::Reading.find params[:reading_id]
  27 +
  28 + readings = Kalibro::Reading.readings_of @reading_group_content.reading_group_id
  29 + readings = readings.select {|reading| (reading.id != @reading.id)}
  30 + @parser="|*|"
  31 + @labels_and_grades = readings.map do |reading|
  32 + if(reading.id != @reading.id)
  33 + "#{reading.label}#{@parser}#{reading.grade}#{@parser}"
  34 + end
  35 + end
23 36 end
24 37  
25 38 def destroy
... ... @@ -32,5 +45,4 @@ class MezuroPluginReadingController < MezuroPluginMyprofileController
32 45 redirect_to_error_page reading.errors[0].message
33 46 end
34 47 end
35   -
36 48 end
... ...
plugins/mezuro/public/javascripts/validations.js
... ... @@ -24,10 +24,30 @@ function validate_new_reading() {
24 24 var name = jQuery('#reading_label').val();
25 25 var grade = jQuery('#reading_grade').val();
26 26 var color = jQuery('#reading_color').val();
  27 +
27 28 if (is_null(name) || is_null(grade) || is_null(color)){
28 29 alert("Please fill all fields marked with (*).");
29 30 return false;
30 31 }
  32 +
  33 + var parser = jQuery('#labels_and_grades').attr('data-parser');
  34 + var labels_and_grades = jQuery('#labels_and_grades').attr('data-list').split(parser);
  35 + for (var id = 0; id < labels_and_grades.length; id = id + 2) {
  36 + if (labels_and_grades[id] == name) {
  37 + alert("This label already exists! Please, choose another one.");
  38 + return false;
  39 + }
  40 +
  41 + if (labels_and_grades[id+1] == grade || labels_and_grades[id+1] == grade + ".0") {
  42 + alert("This grade already exists! Please, choose another one.");
  43 + return false;
  44 + }
  45 + }
  46 +
  47 + if (!color.match(/^[a-fA-F0-9]{6}$/)) {
  48 + alert("This is not a valid color.");
  49 + return false;
  50 + }
31 51 return true;
32 52 }
33 53  
... ...
plugins/mezuro/test/functional/myprofile/mezuro_plugin_reading_controller_test.rb
... ... @@ -21,7 +21,11 @@ class MezuroPluginReadingControllerTest &lt; ActionController::TestCase
21 21 end
22 22  
23 23 should 'set variables to create a new reading' do
  24 + parser = "|*|"
  25 + Kalibro::Reading.expects(:readings_of).with(@content.reading_group_id).returns([@reading])
24 26 get :new, :profile => @profile.identifier, :id => @content.id
  27 + assert_equal parser, assigns(:parser)
  28 + assert_equal ["#{@reading.label}#{parser}#{@reading.grade}#{parser}"], assigns(:labels_and_grades)
25 29 assert_equal @content.id, assigns(:reading_group_content).id
26 30 assert_response :success
27 31 end
... ... @@ -44,10 +48,16 @@ class MezuroPluginReadingControllerTest &lt; ActionController::TestCase
44 48 end
45 49  
46 50 should 'set variables to edit a reading' do
  51 + parser = "|*|"
  52 + another_reading = ReadingFixtures.reading
  53 + another_reading.id = 10
  54 + Kalibro::Reading.expects(:readings_of).with(@content.reading_group_id).returns([@reading, another_reading])
47 55 Kalibro::Reading.expects(:find).with(@reading.id.to_s).returns(@reading)
48 56 get :edit, :profile => @profile.identifier, :id => @content.id, :reading_id => @reading.id
49 57 assert_equal @content.id, assigns(:reading_group_content).id
50 58 assert_equal @reading, assigns(:reading)
  59 + assert_equal parser, assigns(:parser)
  60 + assert_equal ["#{another_reading.label}#{parser}#{another_reading.grade}#{parser}"], assigns(:labels_and_grades)
51 61 assert_response :success
52 62 end
53 63  
... ...
plugins/mezuro/views/mezuro_plugin_reading/_form.html.erb
... ... @@ -8,4 +8,6 @@
8 8 <%= required labelled_form_field _('Color:'),
9 9 colorpicker_field(:reading, :color) %>Click in the field to change Color
10 10  
  11 +<div id="labels_and_grades" data-list="<%= @labels_and_grades %>" data-parser="<%= @parser %>"/>
  12 +
11 13 <p><%= f.submit "Save" %></p>
... ...