Skip to content

Commit ae4a297

Browse files
authored
Merge pull request #931 from amatsuda/teammate_state_enum
Refactor Teammate#state to use Active Record Enum
2 parents d675fea + 18f072e commit ae4a297

File tree

7 files changed

+27
-37
lines changed

7 files changed

+27
-37
lines changed

app/models/teammate.rb

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
11
class Teammate < ApplicationRecord
2-
PENDING = "pending"
3-
ACCEPTED = "accepted"
4-
DECLINED = "declined"
5-
STATES = ["pending", "accepted", "declined"]
6-
72
STAFF_ROLES = ['reviewer', 'program team', 'organizer']
83
PROGRAM_TEAM_ROLES = ['program team', 'organizer']
94

@@ -17,6 +12,8 @@ class Teammate < ApplicationRecord
1712
IN_APP_ONLY => 'In App Only'
1813
}
1914

15+
enum :state, {pending: 'pending', accepted: 'accepted', declined: 'declined'}
16+
2017
belongs_to :event
2118
belongs_to :user, optional: true
2219

@@ -34,24 +31,21 @@ class Teammate < ApplicationRecord
3431
scope :program_team, -> { where(role: PROGRAM_TEAM_ROLES) }
3532
scope :reviewer, -> { where(role: STAFF_ROLES) }
3633

37-
scope :pending, -> { where(state: PENDING) }
38-
scope :accepted, -> { where(state: ACCEPTED) }
39-
scope :active, -> { where(state: ACCEPTED) }
40-
scope :declined, -> { where(state: DECLINED) }
41-
scope :invitations, -> { where(state: [PENDING, DECLINED]) }
34+
scope :active, -> { accepted }
35+
scope :invitations, -> { where(state: [:pending, :declined]) }
4236

4337
scope :all_emails, -> { where(notification_preference: ALL) }
4438

4539
def accept(user)
4640
self.user = user
4741
self.accepted_at = Time.current
48-
self.state = ACCEPTED
42+
self.state = :accepted
4943
save
5044
end
5145

5246
def decline
5347
self.declined_at = Time.current
54-
self.state = DECLINED
48+
self.state = :declined
5549
save
5650
end
5751

@@ -63,13 +57,9 @@ def ratings_count(current_event)
6357
self.user.ratings.not_withdrawn.for_event(current_event).size
6458
end
6559

66-
def pending?
67-
state == PENDING
68-
end
69-
7060
def invite
7161
self.token = Digest::SHA1.hexdigest(Time.current.to_s + email + rand(1000).to_s)
72-
self.state = PENDING
62+
self.state = :pending
7363
self.invited_at = Time.current
7464
save
7565
end

db/seeds.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,34 +133,34 @@ def create_seed_data
133133
email: admin.email,
134134
role: "organizer",
135135
mention_name: "admin",
136-
state: Teammate::ACCEPTED
136+
state: :accepted
137137
).first_or_create
138138
seed_event.teammates.where(
139139
user: organizer,
140140
email: organizer.email,
141141
role: "organizer",
142142
mention_name: "organizer",
143-
state: Teammate::ACCEPTED
143+
state: :accepted
144144
).first_or_create
145145
seed_event.teammates.where(
146146
user: track_director,
147147
email: track_director.email,
148148
role: "program team",
149149
mention_name: "track_director",
150-
state: Teammate::ACCEPTED
150+
state: :accepted
151151
).first_or_create
152152
seed_event.teammates.where(
153153
user: reviewer,
154154
email: reviewer.email,
155155
role: "reviewer",
156156
mention_name: "reviewer",
157-
state: Teammate::ACCEPTED
157+
state: :accepted
158158
).first_or_create
159159
seed_event.teammates.where(
160160
user: speaker_reviewer,
161161
email: speaker_reviewer.email,
162162
role: "reviewer",
163-
state: Teammate::ACCEPTED
163+
state: :accepted
164164
).first_or_create # can't be mentioned
165165

166166
# Proposals - there are no proposals that are either fully "accepted" or offically "not accepted"
@@ -430,8 +430,8 @@ def create_seed_data
430430
end
431431

432432
# Event Team
433-
sapphire_event.teammates.where(user: admin, email: admin.email, role: "organizer", state: Teammate::ACCEPTED).first_or_create
434-
sapphire_event.teammates.where(user: organizer, email: organizer.email, role: "organizer", state: Teammate::ACCEPTED).first_or_create
433+
sapphire_event.teammates.where(user: admin, email: admin.email, role: "organizer", state: :accepted).first_or_create
434+
sapphire_event.teammates.where(user: organizer, email: organizer.email, role: "organizer", state: :accepted).first_or_create
435435

436436
### ScheduleConf -- this is an event that is ready to be scheduled
437437
schedule_conf_open_date = Date.yesterday
@@ -466,8 +466,8 @@ def create_seed_data
466466
end
467467

468468
# Event Team
469-
schedule_event.teammates.where(user: admin, email: admin.email, role: "organizer", state: Teammate::ACCEPTED).first_or_create
470-
schedule_event.teammates.where(user: organizer, email: organizer.email, role: "organizer", state: Teammate::ACCEPTED).first_or_create
469+
schedule_event.teammates.where(user: admin, email: admin.email, role: "organizer", state: :accepted).first_or_create
470+
schedule_event.teammates.where(user: organizer, email: organizer.email, role: "organizer", state: :accepted).first_or_create
471471

472472
# Session Formats
473473
schedule_conf_formats = {}

spec/controllers/teammates_controller_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
before { sign_in(user) }
1010

1111
it "creates an accepted teammate for current user" do
12-
expect(invitation.state).to eq(Teammate::PENDING)
12+
expect(invitation).to be_pending
1313
get :accept, params: {token: invitation.token}
1414
expect(user).to be_reviewer_for_event(invitation.event)
1515
invitation.reload
16-
expect(invitation.state).to eq(Teammate::ACCEPTED)
16+
expect(invitation).to be_accepted
1717
end
1818
end
1919

@@ -25,7 +25,7 @@
2525

2626
it "sets invitation state to declined" do
2727
get :decline, params: {token: invitation.token}
28-
expect(invitation.reload.state).to eq(Teammate::DECLINED)
28+
expect(invitation.reload).to be_declined
2929
end
3030
end
3131

spec/factories/teammates.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
trait :has_been_invited do
1414
token { "token" }
1515
role { "reviewer" }
16-
state { Teammate::PENDING }
16+
state { :pending }
1717
end
1818

1919
trait :reviewer do

spec/support/shared_examples/an_open_event.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
let(:no_reviews_user) { create :user }
1313
let(:invited_user) { create :user }
1414

15-
let(:teammate1) { create :teammate, :program_team, event: event, user: user1, state: Teammate::ACCEPTED }
16-
let(:teammate2) { create :teammate, :reviewer, event: event, user: user2, state: Teammate::ACCEPTED }
17-
let(:no_reviews_teammate) { create :teammate, :reviewer, event: event, user: no_reviews_user, state: Teammate::ACCEPTED }
15+
let(:teammate1) { create :teammate, :program_team, event: event, user: user1, state: :accepted }
16+
let(:teammate2) { create :teammate, :reviewer, event: event, user: user2, state: :accepted }
17+
let(:no_reviews_teammate) { create :teammate, :reviewer, event: event, user: no_reviews_user, state: :accepted }
1818
let(:invited_teammate) { create :teammate, :has_been_invited, event: event, user: invited_user }
1919

2020
let(:track1) { create :track, name: 'Open-source', event: event }

spec/system/profile_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
end
3636

3737
scenario 'A user updates their event email preference' do
38-
teammate = create(:teammate, role: 'organizer', user: user, state: Teammate::ACCEPTED)
38+
teammate = create(:teammate, role: 'organizer', user: user, state: :accepted)
3939
visit(event_path(teammate.event))
4040
visit(notifications_profile_path)
4141
choose(Teammate::NOTIFICATION_PREFERENCES[Teammate::MENTIONS])

spec/system/staff/teammates_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
let(:invitation) { create(:teammate, :has_been_invited) }
55

66
let!(:organizer_user) { create(:user) }
7-
let!(:organizer_teammate) { create(:teammate, :organizer, user: organizer_user, event: invitation.event, state: Teammate::ACCEPTED) }
7+
let!(:organizer_teammate) { create(:teammate, :organizer, user: organizer_user, event: invitation.event, state: :accepted) }
88

99
let!(:reviewer_user) { create(:user) }
10-
let!(:reviewer_teammate) { create(:teammate, :reviewer, user: reviewer_user, event: invitation.event, state: Teammate::ACCEPTED) }
10+
let!(:reviewer_teammate) { create(:teammate, :reviewer, user: reviewer_user, event: invitation.event, state: :accepted) }
1111

1212
let!(:program_team_user) { create(:user) }
13-
let!(:program_team_teammate) { create(:teammate, :program_team, user: program_team_user, event: invitation.event, state: Teammate::ACCEPTED) }
13+
let!(:program_team_teammate) { create(:teammate, :program_team, user: program_team_user, event: invitation.event, state: :accepted) }
1414

1515
before { login_as(organizer_user) }
1616

0 commit comments

Comments
 (0)