Skip to content
This repository was archived by the owner on Jan 9, 2024. It is now read-only.

Commit 7e94dd9

Browse files
committed
Add player change nickname dispatch
1 parent fe10485 commit 7e94dd9

File tree

4 files changed

+56
-13
lines changed

4 files changed

+56
-13
lines changed

app/controllers/players_controller.rb

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,7 @@ class PlayersController < ApplicationController
44
def update
55
return render json: { error: "Cannot update another user" }, status: 401 if @player != current_player
66

7-
@player.update(player_params)
8-
9-
payload = {
10-
code: "successful_player_nickname_update",
11-
player_id: @player.id,
12-
nickname: @player.nickname
13-
}
14-
7+
payload = Players::ChangeNickname.call(player: @player, nickname: params[:player][:nickname])
158
ActionCable.server.broadcast "game_#{current_player.game_id}", payload
169
head 200
1710
end
@@ -21,8 +14,4 @@ def update
2114
def set_player
2215
@player = Player.find(params[:id])
2316
end
24-
25-
def player_params
26-
params.require(:player).permit(:nickname)
27-
end
2817
end
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
module Players
2+
class ChangeNickname
3+
private
4+
attr_reader :nickname, :player
5+
6+
public
7+
8+
def self.call(player:, nickname:)
9+
new(player: player, nickname: nickname).call
10+
end
11+
12+
def initialize(player:, nickname:)
13+
@nickname = nickname
14+
@player = player
15+
end
16+
17+
def call
18+
update_nickname
19+
20+
return successful_payload
21+
end
22+
23+
private
24+
25+
def update_nickname
26+
player.update(nickname: nickname)
27+
end
28+
29+
def successful_payload
30+
{ code: "player_nickname_changed", player_id: @player.id, nickname: @player.nickname }
31+
end
32+
end
33+
end
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
require "rails_helper"
2+
3+
RSpec.describe "Players::ChangeNickname", type: :dispatch do
4+
subject(:dispatch) { Players::ChangeNickname }
5+
let(:game) { Game.create! }
6+
let(:player) { Player.create!(game: game, nickname: "Rico") }
7+
8+
describe ".call" do
9+
it 'updates player nickname' do
10+
expect { dispatch.call(player: player, nickname: "Zim") }.to change { player.nickname }.from("Rico").to("Zim")
11+
end
12+
13+
it 'returns a payload' do
14+
expect(dispatch.call(player: player, nickname: "Zim")).to be_instance_of(Hash)
15+
end
16+
17+
it "returns payload with the new nickname of the player" do
18+
expect(dispatch.call(player: player, nickname: "Zim")).to include(code: 'player_nickname_changed', player_id: player.id, nickname: "Zim")
19+
end
20+
end
21+
end

spec/requests/players_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
put "/players/#{player.id}", params: { player: { nickname: "Zim" }}
2525
expect(ActionCable.server).to have_received(:broadcast).with(
2626
anything,
27-
code: 'successful_player_nickname_update', player_id: player.id, nickname: 'Zim'
27+
code: 'player_nickname_changed', player_id: player.id, nickname: 'Zim'
2828
)
2929
end
3030
end

0 commit comments

Comments
 (0)