Class: UsernameChanger

Inherits:
Object
  • Object
show all
Defined in:
app/services/username_changer.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user, new_username, actor = nil) ⇒ UsernameChanger

Returns a new instance of UsernameChanger.



4
5
6
7
8
9
# File 'app/services/username_changer.rb', line 4

def initialize(user, new_username, actor = nil)
  @user = user
  @old_username = user.username
  @new_username = new_username
  @actor = actor
end

Class Method Details

.change(user, new_username, actor = nil) ⇒ Object



11
12
13
# File 'app/services/username_changer.rb', line 11

def self.change(user, new_username, actor = nil)
  self.new(user, new_username, actor).change
end

.override(user, new_username) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/services/username_changer.rb', line 15

def self.override(user, new_username)
  if user.username_equals_to?(new_username)
    # override anyway since case could've been changed:
    UsernameChanger.change(user, new_username, user)
    true
  elsif user.username != UserNameSuggester.fix_username(new_username)
    suggested_username = UserNameSuggester.suggest(new_username, current_username: user.username)
    UsernameChanger.change(user, suggested_username, user)
    true
  else
    false
  end
end

.update_username(user_id:, old_username:, new_username:, avatar_template:, asynchronous: true) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/services/username_changer.rb', line 54

def self.update_username(
  user_id:,
  old_username:,
  new_username:,
  avatar_template:,
  asynchronous: true
)
  args = {
    user_id: user_id,
    old_username: old_username,
    new_username: new_username,
    avatar_template: avatar_template,
  }

  if asynchronous
    Jobs.enqueue(:update_username, args)
  else
    Jobs::UpdateUsername.new.execute(args)
  end
end

Instance Method Details

#change(asynchronous: true, run_update_job: true) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'app/services/username_changer.rb', line 29

def change(asynchronous: true, run_update_job: true)
  return false if @user.username == @new_username

  @user.username = @new_username

  if @user.save
    if @actor && @old_username != @new_username
      StaffActionLogger.new(@actor).log_username_change(@user, @old_username, @new_username)
    end

    if run_update_job
      UsernameChanger.update_username(
        user_id: @user.id,
        old_username: @old_username,
        new_username: @new_username,
        avatar_template: @user.avatar_template_url,
        asynchronous: asynchronous,
      )
    end
    return true
  end

  false
end