Skip to content

Commit

Permalink
refactor to simplify update pair status
Browse files Browse the repository at this point in the history
  • Loading branch information
samnang committed Feb 22, 2011
1 parent dcd5ee0 commit 76b7a68
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 20 deletions.
22 changes: 3 additions & 19 deletions app/controllers/pair_requests_controller.rb
Expand Up @@ -22,26 +22,10 @@ def update
@pair = PairRequest.find(params[:id])
@pair.status = params[:status]

if pair_belongs_to_current_user?
return render_permission_denied if @pair.status == "Accepted" and
@pair.sent_from?(current_user)

@pair.save

render 'update.js.haml'
if @pair.update_status_by(current_user)
render 'update.js.haml'
else

render_permission_denied
render :nothing => true, :status => :forbidden
end
end

private

def pair_belongs_to_current_user?
@pair.sender == current_user || @pair.partner == current_user
end

def render_permission_denied
render :nothing => true, :status => :forbidden
end
end
22 changes: 22 additions & 0 deletions app/models/pair_request.rb
Expand Up @@ -6,7 +6,29 @@ class PairRequest < ActiveRecord::Base
validates :description, :presence => true
validates :pair_date, :presence => true

scope :pair_sessions_of_user, lambda { |id| where("(sender_id = ? OR partner_id = ?) AND status = 'Accepted'", id, id) }

def update_status_by(user)
return false unless pair_belongs_to?(user) and not user_try_to_accept_himself?(user)

save
end

def pair_belongs_to?(user)
sent_from?(user) || received_by?(user)
end

def sent_from?(user)
sender == user
end

def received_by?(user)
partner == user
end

private

def user_try_to_accept_himself?(user)
status == "Accepted" and sent_from?(user)
end
end
2 changes: 1 addition & 1 deletion app/models/user.rb
Expand Up @@ -48,7 +48,7 @@ def self.find_for_database_authentication(conditions)
end

def pair_sessions
PairRequest.where("(sender_id = ? OR partner_id = ?) AND status = 'Accepted'", id, id)
PairRequest.pair_sessions_of_user(id)
end

def avatar_url(size = DEFAULT_SIZE_AVATAR)
Expand Down
20 changes: 20 additions & 0 deletions spec/models/pair_request_spec.rb
Expand Up @@ -20,4 +20,24 @@
pair.sent_from?(sender).should be_true
end
end

describe "#received_by?(user)" do
let(:partner) { Factory(:user) }
let(:pair) { Factory(:pair_request, :partner => partner) }

it "should return true when user is the receiver of pair request" do
pair.received_by?(partner).should be_true
end
end

describe "#pair_belongs_to?(user)" do
let(:partner) { Factory(:user) }
let(:sender) { Factory(:user) }
let(:pair) { Factory(:pair_request, :sender => sender, :partner => partner) }

it "should return true when user belongs to pair request" do
pair.pair_belongs_to?(sender).should be_true
pair.pair_belongs_to?(partner).should be_true
end
end
end

0 comments on commit 76b7a68

Please sign in to comment.