Sha256: a7c732794bb0936659f9e6a13b58af22e81d2ca521f7f4a818ea99fe003568b1

Contents?: true

Size: 1.3 KB

Versions: 10

Compression:

Stored size: 1.3 KB

Contents

class CastingInviter
  EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/

  attr_reader :message, :invitees, :casting

  def initialize(attributes = {})
    @message = attributes[:message] || ""
    @invitees = attributes[:invitees] || ""
    @sender = attributes[:sender]
    @casting = attributes[:casting]
  end

  def valid?
    valid_message? && valid_invitees?
  end

  def deliver
    if valid?
      invitee_list.each do |email|
        invitation = create_invitation(email)
        Mailer.invitation_notification(invitation, @message)
      end
    else
      failure_message =
        "Your #{
          @casting
        } message couldn’t be sent. Invitees emails or message are invalid"
      invitation = create_invitation(@sender)
      Mailer.invitation_notification(invitation, failure_message)
    end
  end

  private

  def invalid_invitees
    @invalid_invitees ||=
      invitee_list.reject { |item| item.match(EMAIL_REGEX) }
  end

  def invitee_list
    @invitee_list ||= @invitees.gsub(/\s+/, "").split(/[\n,;]+/)
  end

  def valid_message?
    @message.present?
  end

  def valid_invitees?
    invalid_invitees.empty?
  end

  def create_invitation(email)
    Invitation.create(
      casting: @casting,
      sender: @sender,
      invitee_email: email,
      status: "pending"
    )
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
coverband-6.1.4 test/fixtures/casting_invitor.rb
coverband-6.1.3 test/fixtures/casting_invitor.rb
coverband-6.1.2 test/fixtures/casting_invitor.rb
coverband-6.1.2.rc.1 test/fixtures/casting_invitor.rb
coverband-6.1.1 test/fixtures/casting_invitor.rb
coverband-6.1.0 test/fixtures/casting_invitor.rb
coverband-6.0.3.rc.4 test/fixtures/casting_invitor.rb
coverband-6.0.3.rc.3 test/fixtures/casting_invitor.rb
coverband-6.0.3.rc.2 test/fixtures/casting_invitor.rb
coverband-6.0.3.rc.1 test/fixtures/casting_invitor.rb