Commit 62c67ea635f1cc467c3b3189b5c9aaff33d15480

Authored by Rafael Manzo
1 parent 792ed99d

Refactored ReadingsGroupsController

set_reading_group on a before_action
ownership checkage semantically correct
Began to test concerns

Signed off by: Guilherme Rojas V. de Lima <guilhermehrojas@gmail.com>
app/controllers/concerns/ownership_authentication.rb
... ... @@ -10,7 +10,15 @@ module OwnershipAuthentication
10 10 end
11 11  
12 12 def reading_group_owner?
13   - check_reading_group_ownership(params[:id])
  13 + if self.kind_of?(ReadingGroupsController)
  14 + id = params[:id]
  15 + elsif self.kind_of?(ReadingsController)
  16 + id = params[:reading_group_id]
  17 + else
  18 + raise "Not supported"
  19 + end
  20 +
  21 + check_reading_group_ownership(id)
14 22 end
15 23  
16 24 def reading_owner?
... ...
app/controllers/reading_groups_controller.rb
1 1 include OwnershipAuthentication
2 2  
3 3 class ReadingGroupsController < ApplicationController
4   - before_action :authenticate_user!,
5   - except: [:index, :show]
  4 + before_action :authenticate_user!, except: [:index, :show]
6 5 before_action :reading_group_owner?, only: [:edit, :update, :destroy]
  6 + before_action :set_reading_group, only: [:show, :edit, :update, :destroy]
7 7  
8 8 # GET /reading_groups/new
9 9 def new
... ... @@ -27,19 +27,13 @@ class ReadingGroupsController &lt; ApplicationController
27 27  
28 28 # GET /reading_group/1
29 29 # GET /reading_group/1.json
30   - def show
31   - set_reading_group
32   - @reading_group_readings = @reading_group.readings
33   - end
  30 + def show; end
34 31  
35 32 # GET /reading_groups/1/edit
36 33 # GET /reading_groups/1/edit.json
37   - def edit
38   - set_reading_group
39   - end
  34 + def edit; end
40 35  
41 36 def update
42   - set_reading_group
43 37 if @reading_group.update(reading_group_params)
44 38 redirect_to(reading_group_path(@reading_group.id))
45 39 else
... ... @@ -50,7 +44,6 @@ class ReadingGroupsController &lt; ApplicationController
50 44 # DELETE /reading_group/1
51 45 # DELETE /reading_group/1.json
52 46 def destroy
53   - set_reading_group
54 47 current_user.reading_group_ownerships.find_by_reading_group_id(@reading_group.id).destroy
55 48 @reading_group.destroy
56 49 respond_to do |format|
... ... @@ -60,26 +53,27 @@ class ReadingGroupsController &lt; ApplicationController
60 53 end
61 54  
62 55 private
63   - # Use callbacks to share common setup or constraints between actions.
64   - def set_reading_group
65   - @reading_group = ReadingGroup.find(params[:id])
66   - end
  56 +
  57 + # Use callbacks to share common setup or constraints between actions.
  58 + def set_reading_group
  59 + @reading_group = ReadingGroup.find(params[:id])
  60 + end
67 61  
68   - # Never trust parameters from the scary internet, only allow the white list through.
69   - def reading_group_params
70   - params[:reading_group]
71   - end
  62 + # Never trust parameters from the scary internet, only allow the white list through.
  63 + def reading_group_params
  64 + params[:reading_group]
  65 + end
72 66  
73   - # Extracted code from create action
74   - def create_and_redir(format)
75   - if @reading_group.save
76   - current_user.reading_group_ownerships.create reading_group_id: @reading_group.id
  67 + # Extracted code from create action
  68 + def create_and_redir(format)
  69 + if @reading_group.save
  70 + current_user.reading_group_ownerships.create reading_group_id: @reading_group.id
77 71  
78   - format.html { redirect_to reading_group_path(@reading_group.id), notice: 'Reading Group was successfully created.' }
79   - format.json { render action: 'show', status: :created, location: @reading_group }
80   - else
81   - format.html { render action: 'new' }
82   - format.json { render json: @reading_group.errors, status: :unprocessable_entity }
83   - end
  72 + format.html { redirect_to reading_group_path(@reading_group.id), notice: 'Reading Group was successfully created.' }
  73 + format.json { render action: 'show', status: :created, location: @reading_group }
  74 + else
  75 + format.html { render action: 'new' }
  76 + format.json { render json: @reading_group.errors, status: :unprocessable_entity }
84 77 end
  78 + end
85 79 end
... ...
app/controllers/readings_controller.rb
... ... @@ -3,7 +3,8 @@ include OwnershipAuthentication
3 3 class ReadingsController < ApplicationController
4 4 before_action :authenticate_user!, except: [:index]
5 5 before_action :set_reading, only: [:edit, :update, :destroy]
6   - before_action :reading_owner?, except: [:new]
  6 + before_action :reading_owner?, except: [:new, :create]
  7 + before_action :reading_group_owner?, only: [:new, :create]
7 8  
8 9 def new
9 10 @reading_group_id = params[:reading_group_id]
... ...
app/views/reading_groups/show.html.erb
... ... @@ -23,13 +23,14 @@
23 23 </thead>
24 24  
25 25 <tbody>
26   - <% if @reading_group_readings.size == 0 %>
  26 + <% reading_group_readings = @reading_group.readings %>
  27 + <% if reading_group_readings.size == 0 %>
27 28 <tr>
28 29 <% col_number = reading_groups_owner?(@reading_group.id) ? 5 : 3 %>
29 30 <td colspan="<%= col_number %>">There are no readings yet!</td>
30 31 </tr>
31 32 <% end %>
32   - <% @reading_group_readings.each do |reading| %>
  33 + <% reading_group_readings.each do |reading| %>
33 34 <tr>
34 35 <td><%= reading.label %></td>
35 36 <td><%= reading.grade %></td>
... ...
spec/controllers/concerns/ownership_authentication_spec.rb 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +require 'spec_helper'
  2 +
  3 +describe OwnershipAuthentication do
  4 + #TODO: test other methods
  5 +
  6 + describe 'reading_group_owner?' do
  7 + context 'Not ReadingGroupsController nor ReadingsController' do
  8 + before do
  9 + @projects_controller = ProjectsController.new # let doesn't work in here
  10 + @projects_controller.extend(OwnershipAuthentication)
  11 + end
  12 +
  13 + it 'should raise an exception' do
  14 + expect { @projects_controller.reading_group_owner? }.to raise_error("Not supported")
  15 + end
  16 + end
  17 + end
  18 +end
0 19 \ No newline at end of file
... ...
spec/controllers/reading_groups_controller_spec.rb
... ... @@ -65,7 +65,6 @@ describe ReadingGroupsController do
65 65 let(:reading) { FactoryGirl.build(:reading) }
66 66 before :each do
67 67 ReadingGroup.expects(:find).with(subject.id.to_s).returns(subject)
68   - subject.expects(:readings).returns(reading)
69 68 get :show, :id => subject.id
70 69 end
71 70  
... ...
spec/controllers/readings_controller_spec.rb
... ... @@ -10,7 +10,7 @@ describe ReadingsController do
10 10  
11 11 context 'when the current user owns the reading group' do
12 12 before :each do
13   - subject.expects(:reading_owner?).returns true
  13 + subject.expects(:reading_group_owner?).returns true
14 14 get :new, reading_group_id: reading_group.id
15 15 end
16 16  
... ... @@ -38,7 +38,7 @@ describe ReadingsController do
38 38  
39 39 context 'when the current user owns the reading group' do
40 40 before :each do
41   - subject.expects(:reading_owner?).returns true
  41 + subject.expects(:reading_group_owner?).returns true
42 42 end
43 43  
44 44 context 'with valid fields' do
... ...