Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions app/decorators/invitation_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ class InvitationDecorator < Draper::Decorator
decorates_association :proposal

STATE_LABEL_MAP = {
Invitation::State::PENDING => 'label-default',
Invitation::State::DECLINED => 'label-danger',
Invitation::State::ACCEPTED => 'label-success'
Invitation.states[:pending] => 'label-default',
Invitation.states[:declined] => 'label-danger',
Invitation.states[:accepted] => 'label-success'
}

def decline_button(small: false)
Expand Down
47 changes: 0 additions & 47 deletions app/models/concerns/invitable.rb

This file was deleted.

26 changes: 24 additions & 2 deletions app/models/invitation.rb
Original file line number Diff line number Diff line change
@@ -1,17 +1,39 @@
class Invitation < ApplicationRecord
include Invitable
enum :state, {pending: 'pending', accepted: 'accepted', declined: 'declined'}

belongs_to :proposal
belongs_to :user, optional: true

scope :not_accepted, -> { where(state: [:pending, :declined]) }

before_create :set_default_state
before_create :set_slug

validates :email, presence: true
validates_format_of :email, with: /@/

def accept(user)
transaction do
self.user = user
self.state = State::ACCEPTED
self.state = :accepted
proposal.speakers.create(user: user, event: proposal.event, skip_name_email_validation: true)
save
end
end

def decline
update(state: :declined)
end

private

def set_slug
self.slug = Digest::SHA1.hexdigest([email, rand(1000)].map(&:to_s).join('-'))[0, 10]
end

def set_default_state
self.state = :pending if state.nil?
end
end

# == Schema Information
Expand Down
12 changes: 6 additions & 6 deletions spec/models/invitation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@
it "sets state as declined" do
invitation = create(:invitation, state: nil, proposal: proposal, user: user)
invitation.decline
expect(invitation.state).to eq(Invitation::State::DECLINED)
expect(invitation).to be_declined
end
end

describe "#accept" do
it "sets state as accepted" do
invitation.accept(user)
expect(invitation.state).to eq(Invitation::State::ACCEPTED)
expect(invitation).to be_accepted
end

it "sets the user on the invitation" do
Expand All @@ -42,24 +42,24 @@

describe "#pending?" do
it "returns true if invitation is pending" do
invitation = create(:invitation, state: Invitation::State::PENDING, proposal: proposal, user: user)
invitation = create(:invitation, state: :pending, proposal: proposal, user: user)
expect(invitation).to be_pending
end

it "returns false if invitation is not pending" do
invitation = create(:invitation, state: Invitation::State::ACCEPTED, proposal: proposal, user: user)
invitation = create(:invitation, state: :accepted, proposal: proposal, user: user)
expect(invitation).to_not be_pending
end
end

describe "#declined?" do
it "returns true if invitation was declined" do
invitation = create(:invitation, state: Invitation::State::DECLINED, proposal: proposal, user: user)
invitation = create(:invitation, state: :declined, proposal: proposal, user: user)
expect(invitation).to be_declined
end

it "returns false if invitation was not declined" do
invitation = create(:invitation, state: Invitation::State::ACCEPTED, proposal: proposal, user: user)
invitation = create(:invitation, state: :accepted, proposal: proposal, user: user)
expect(invitation).to_not be_declined
end
end
Expand Down