Commit 76bc05f55bb11dd128e54cf9bb4b976096fcfdb7
1 parent
32178a64
Exists in
colab
and in
4 other branches
Fixes for Configuration views
Validates ownership before display edit button Partial moved from shared and refactored Added Configuration link to the layout Missing acceptance tests
Showing
9 changed files
with
92 additions
and
42 deletions
Show diff stats
app/controllers/mezuro_configurations_controller.rb
1 | include OwnershipAuthentication | 1 | include OwnershipAuthentication |
2 | 2 | ||
3 | class MezuroConfigurationsController < ApplicationController | 3 | class MezuroConfigurationsController < ApplicationController |
4 | - before_action :authenticate_user!, | ||
5 | - except: [:index, :show] | 4 | + before_action :authenticate_user!, except: [:index, :show] |
6 | before_action :mezuro_configuration_owner?, only: [:edit, :update, :destroy] | 5 | before_action :mezuro_configuration_owner?, only: [:edit, :update, :destroy] |
7 | 6 | ||
8 | # GET /mezuro_configurations/new | 7 | # GET /mezuro_configurations/new |
9 | def new | 8 | def new |
10 | - @mezuro_configuration = MezuroConfiguration.new | 9 | + @configuration = MezuroConfiguration.new |
11 | end | 10 | end |
12 | 11 | ||
13 | # GET /mezuro_configurations | 12 | # GET /mezuro_configurations |
14 | # GET /mezuro_configurations.json | 13 | # GET /mezuro_configurations.json |
15 | def index | 14 | def index |
16 | - @mezuro_configurations = MezuroConfiguration.all | 15 | + @configurations = MezuroConfiguration.all |
17 | end | 16 | end |
18 | 17 | ||
19 | # POST /mezuro_configurations | 18 | # POST /mezuro_configurations |
20 | # POST /mezuro_configurations.json | 19 | # POST /mezuro_configurations.json |
21 | def create | 20 | def create |
22 | - @mezuro_configuration = MezuroConfiguration.new(mezuro_configuration_params) | 21 | + @configuration = MezuroConfiguration.new(mezuro_configuration_params) |
23 | respond_to do |format| | 22 | respond_to do |format| |
24 | create_and_redir(format) | 23 | create_and_redir(format) |
25 | end | 24 | end |
@@ -29,7 +28,7 @@ class MezuroConfigurationsController < ApplicationController | @@ -29,7 +28,7 @@ class MezuroConfigurationsController < ApplicationController | ||
29 | # GET /mezuro_configurations/1.json | 28 | # GET /mezuro_configurations/1.json |
30 | def show | 29 | def show |
31 | set_mezuro_configuration | 30 | set_mezuro_configuration |
32 | - @mezuro_configuration_metric_configurations = @mezuro_configuration.metric_configurations | 31 | + @configuration_metric_configurations = @configuration.metric_configurations |
33 | end | 32 | end |
34 | 33 | ||
35 | # GET /mezuro_configurations/1/edit | 34 | # GET /mezuro_configurations/1/edit |
@@ -41,8 +40,8 @@ class MezuroConfigurationsController < ApplicationController | @@ -41,8 +40,8 @@ class MezuroConfigurationsController < ApplicationController | ||
41 | 40 | ||
42 | def update | 41 | def update |
43 | set_mezuro_configuration | 42 | set_mezuro_configuration |
44 | - if @mezuro_configuration.update(mezuro_configuration_params) | ||
45 | - redirect_to(mezuro_configuration_path(@mezuro_configuration.id)) | 43 | + if @configuration.update(mezuro_configuration_params) |
44 | + redirect_to(mezuro_configuration_path(@configuration.id)) | ||
46 | else | 45 | else |
47 | render "edit" | 46 | render "edit" |
48 | end | 47 | end |
@@ -52,8 +51,8 @@ class MezuroConfigurationsController < ApplicationController | @@ -52,8 +51,8 @@ class MezuroConfigurationsController < ApplicationController | ||
52 | # DELETE /mezuro_configurations/1.json | 51 | # DELETE /mezuro_configurations/1.json |
53 | def destroy | 52 | def destroy |
54 | set_mezuro_configuration | 53 | set_mezuro_configuration |
55 | - current_user.mezuro_configuration_ownerships.find_by_mezuro_configuration_id(@mezuro_configuration.id).destroy | ||
56 | - @mezuro_configuration.destroy | 54 | + current_user.mezuro_configuration_ownerships.find_by_mezuro_configuration_id(@configuration.id).destroy |
55 | + @configuration.destroy | ||
57 | respond_to do |format| | 56 | respond_to do |format| |
58 | format.html { redirect_to mezuro_configurations_url } | 57 | format.html { redirect_to mezuro_configurations_url } |
59 | format.json { head :no_content } | 58 | format.json { head :no_content } |
@@ -63,7 +62,7 @@ class MezuroConfigurationsController < ApplicationController | @@ -63,7 +62,7 @@ class MezuroConfigurationsController < ApplicationController | ||
63 | private | 62 | private |
64 | # Use callbacks to share common setup or constraints between actions. | 63 | # Use callbacks to share common setup or constraints between actions. |
65 | def set_mezuro_configuration | 64 | def set_mezuro_configuration |
66 | - @mezuro_configuration = MezuroConfiguration.find(params[:id]) | 65 | + @configuration = MezuroConfiguration.find(params[:id]) |
67 | end | 66 | end |
68 | 67 | ||
69 | # Never trust parameters from the scary internet, only allow the white list through. | 68 | # Never trust parameters from the scary internet, only allow the white list through. |
@@ -73,14 +72,14 @@ class MezuroConfigurationsController < ApplicationController | @@ -73,14 +72,14 @@ class MezuroConfigurationsController < ApplicationController | ||
73 | 72 | ||
74 | # Extracted code from create action | 73 | # Extracted code from create action |
75 | def create_and_redir(format) | 74 | def create_and_redir(format) |
76 | - if @mezuro_configuration.save | ||
77 | - current_user.mezuro_configuration_ownerships.create mezuro_configuration_id: @mezuro_configuration.id | 75 | + if @configuration.save |
76 | + current_user.mezuro_configuration_ownerships.create mezuro_configuration_id: @configuration.id | ||
78 | 77 | ||
79 | - format.html { redirect_to mezuro_configuration_path(@mezuro_configuration.id), notice: 'mezuro_configuration was successfully created.' } | ||
80 | - format.json { render action: 'show', status: :created, location: @mezuro_configuration } | 78 | + format.html { redirect_to mezuro_configuration_path(@configuration.id), notice: 'mezuro_configuration was successfully created.' } |
79 | + format.json { render action: 'show', status: :created, location: @configuration } | ||
81 | else | 80 | else |
82 | format.html { render action: 'new' } | 81 | format.html { render action: 'new' } |
83 | - format.json { render json: @mezuro_configuration.errors, status: :unprocessable_entity } | 82 | + format.json { render json: @configuration.errors, status: :unprocessable_entity } |
84 | end | 83 | end |
85 | end | 84 | end |
86 | end | 85 | end |
@@ -0,0 +1,5 @@ | @@ -0,0 +1,5 @@ | ||
1 | +module MezuroConfigurationsHelper | ||
2 | + def configuration_owner?(configuration_id) | ||
3 | + user_signed_in? && !current_user.mezuro_configuration_ownerships.find_by_mezuro_configuration_id(configuration_id).nil? | ||
4 | + end | ||
5 | +end | ||
0 | \ No newline at end of file | 6 | \ No newline at end of file |
app/views/layouts/application.html.erb
@@ -59,6 +59,7 @@ | @@ -59,6 +59,7 @@ | ||
59 | <ul class="nav"> | 59 | <ul class="nav"> |
60 | <li><%= link_to 'Home', root_path %></li> | 60 | <li><%= link_to 'Home', root_path %></li> |
61 | <li><%= link_to 'Project', projects_path %></li> | 61 | <li><%= link_to 'Project', projects_path %></li> |
62 | + <li><%= link_to 'Configuration', mezuro_configurations_path %></li> | ||
62 | <li><%= link_to 'Reading Group', reading_groups_path %></li> | 63 | <li><%= link_to 'Reading Group', reading_groups_path %></li> |
63 | </ul> | 64 | </ul> |
64 | <ul class="nav" style="float: right;"> | 65 | <ul class="nav" style="float: right;"> |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +<table class="table table-hover"> | ||
2 | + <thead> | ||
3 | + <tr> | ||
4 | + <th>Name</th> | ||
5 | + <th>Description</th> | ||
6 | + <th colspan="2"></th> | ||
7 | + </tr> | ||
8 | + </thead> | ||
9 | + | ||
10 | + <tbody> | ||
11 | + <%= render @configurations %> | ||
12 | + </tbody> | ||
13 | +</table> | ||
0 | \ No newline at end of file | 14 | \ No newline at end of file |
app/views/mezuro_configurations/_mezuro_configuration.html.erb
0 → 100644
@@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
1 | +<tr> | ||
2 | + <td><%= mezuro_configuration.name %></td> | ||
3 | + <td><%= mezuro_configuration.description %></td> | ||
4 | + <td><%= link_to 'Show', mezuro_configuration_path(mezuro_configuration.id), class: 'btn btn-info' %></td> | ||
5 | + <td> | ||
6 | + <% if configuration_owner?(mezuro_configuration.id) %> | ||
7 | + <%= link_to 'Edit', edit_mezuro_configuration_path(mezuro_configuration.id), class: 'btn btn-info' %> | ||
8 | + <% end %> | ||
9 | + </td> | ||
10 | +</tr> | ||
0 | \ No newline at end of file | 11 | \ No newline at end of file |
app/views/mezuro_configurations/index.html.erb
@@ -13,4 +13,4 @@ | @@ -13,4 +13,4 @@ | ||
13 | </p> | 13 | </p> |
14 | <% end %> | 14 | <% end %> |
15 | 15 | ||
16 | -<%= render partial: 'shared/mezuro_configuration_list', locals: {configurations: @configurations} %> | ||
17 | \ No newline at end of file | 16 | \ No newline at end of file |
17 | +<%= render partial: 'list', locals: {configurations: @configurations} %> | ||
18 | \ No newline at end of file | 18 | \ No newline at end of file |
app/views/shared/_mezuro_configuration_list.html.erb
@@ -1,22 +0,0 @@ | @@ -1,22 +0,0 @@ | ||
1 | -<table class="table table-hover"> | ||
2 | - <thead> | ||
3 | - <tr> | ||
4 | - <th>Name</th> | ||
5 | - <th>Description</th> | ||
6 | - <th colspan="2"></th> | ||
7 | - </tr> | ||
8 | - </thead> | ||
9 | - | ||
10 | - <tbody> | ||
11 | - <% configurations.each do |configuration| %> | ||
12 | - <tr> | ||
13 | - <td><%= configuration.name %></td> | ||
14 | - <td><%= configuration.description %></td> | ||
15 | - <td><%= link_to 'Show', mezuro_configuration_path(configuration.id), class: 'btn btn-info' %></td> | ||
16 | - <td> | ||
17 | - <%= link_to 'Edit', edit_mezuro_configuration_path(configuration.id), class: 'btn btn-info' %> | ||
18 | - </td> | ||
19 | - </tr> | ||
20 | - <% end %> | ||
21 | - </tbody> | ||
22 | -</table> | ||
23 | \ No newline at end of file | 0 | \ No newline at end of file |
spec/controllers/mezuro_configurations_controller_spec.rb
@@ -90,7 +90,7 @@ describe MezuroConfigurationsController do | @@ -90,7 +90,7 @@ describe MezuroConfigurationsController do | ||
90 | @ownership.expects(:destroy) | 90 | @ownership.expects(:destroy) |
91 | @subject.expects(:destroy) | 91 | @subject.expects(:destroy) |
92 | 92 | ||
93 | - #Those two mocks looks the same but they are necessary since params[:id] is a String and @mezuro_configuration.id is an Integer :( | 93 | + #Those two mocks looks the same but they are necessary since params[:id] is a String and @configuration.id is an Integer :( |
94 | @ownerships.expects(:find_by_mezuro_configuration_id).with("#{@subject.id}").returns(@ownership) | 94 | @ownerships.expects(:find_by_mezuro_configuration_id).with("#{@subject.id}").returns(@ownership) |
95 | @ownerships.expects(:find_by_mezuro_configuration_id).with(@subject.id).returns(@ownership) | 95 | @ownerships.expects(:find_by_mezuro_configuration_id).with(@subject.id).returns(@ownership) |
96 | 96 | ||
@@ -164,8 +164,8 @@ describe MezuroConfigurationsController do | @@ -164,8 +164,8 @@ describe MezuroConfigurationsController do | ||
164 | 164 | ||
165 | it { should render_template(:edit) } | 165 | it { should render_template(:edit) } |
166 | 166 | ||
167 | - it 'should assign to @mezuro_configuration the @subject' do | ||
168 | - assigns(:mezuro_configuration).should eq(@subject) | 167 | + it 'should assign to @configuration the @subject' do |
168 | + assigns(:configuration).should eq(@subject) | ||
169 | end | 169 | end |
170 | end | 170 | end |
171 | 171 |
@@ -0,0 +1,44 @@ | @@ -0,0 +1,44 @@ | ||
1 | +require 'spec_helper' | ||
2 | + | ||
3 | +describe MezuroConfigurationsHelper do | ||
4 | + describe 'configuration_owner?' do | ||
5 | + before :each do | ||
6 | + @subject = FactoryGirl.build(:mezuro_configuration) | ||
7 | + end | ||
8 | + | ||
9 | + context 'returns false if not logged in' do | ||
10 | + before :each do | ||
11 | + helper.expects(:user_signed_in?).returns(false) | ||
12 | + end | ||
13 | + it { helper.configuration_owner?(@subject.id).should be_false } | ||
14 | + end | ||
15 | + | ||
16 | + context 'returns false if is not the owner' do | ||
17 | + before :each do | ||
18 | + helper.expects(:user_signed_in?).returns(true) | ||
19 | + helper.expects(:current_user).returns(FactoryGirl.build(:user)) | ||
20 | + | ||
21 | + @ownerships = [] | ||
22 | + @ownerships.expects(:find_by_mezuro_configuration_id).with(@subject.id).returns(nil) | ||
23 | + | ||
24 | + User.any_instance.expects(:mezuro_configuration_ownerships).returns(@ownerships) | ||
25 | + end | ||
26 | + | ||
27 | + it { helper.configuration_owner?(@subject.id).should be_false } | ||
28 | + end | ||
29 | + | ||
30 | + context 'returns true if user is the mezuro_configuration owner' do | ||
31 | + before :each do | ||
32 | + helper.expects(:user_signed_in?).returns(true) | ||
33 | + helper.expects(:current_user).returns(FactoryGirl.build(:user)) | ||
34 | + | ||
35 | + @ownership = FactoryGirl.build(:mezuro_configuration_ownership) | ||
36 | + @ownerships = [] | ||
37 | + @ownerships.expects(:find_by_mezuro_configuration_id).with(@subject.id).returns(@ownership) | ||
38 | + User.any_instance.expects(:mezuro_configuration_ownerships).returns(@ownerships) | ||
39 | + end | ||
40 | + | ||
41 | + it { helper.configuration_owner?(@subject.id).should be_true } | ||
42 | + end | ||
43 | + end | ||
44 | +end | ||
0 | \ No newline at end of file | 45 | \ No newline at end of file |