/app/forms/gobierto_admin/admin_invitation_form.rb

https://github.com/PopulateTools/gobierto · Ruby · 51 lines · 38 code · 12 blank · 1 comment · 4 complexity · f698d7a7991424a27d2f01479eb4872d MD5 · raw file

  1. # frozen_string_literal: true
  2. module GobiertoAdmin
  3. class AdminInvitationForm < BaseForm
  4. EMAIL_LIST_DELIMITER = ",".freeze
  5. attr_accessor :emails, :site_ids
  6. validates :email_list, presence: true
  7. validates :site_ids, length: { minimum: 1, too_short: I18n.t('errors.messages.array_too_short') }
  8. def initialize(attributes = {})
  9. super(attributes)
  10. if @site_ids && @site_ids.any?
  11. @site_ids = @site_ids.delete_if{ |site_id| site_id.blank? }.compact.uniq
  12. end
  13. end
  14. def process
  15. build_invitations if valid?
  16. end
  17. def delivered_email_addresses
  18. @delivered_email_addresses ||= []
  19. end
  20. def not_delivered_email_addresses
  21. Array(email_list) - delivered_email_addresses
  22. end
  23. private
  24. def email_list
  25. emails
  26. .split(EMAIL_LIST_DELIMITER)
  27. .select { |email| Admin::EMAIL_ADDRESS_REGEXP =~ email }
  28. .map(&:strip)
  29. end
  30. def build_invitations
  31. email_list.each do |email_address|
  32. invitation_builder = AdminInvitationBuilder.new(email_address, site_ids)
  33. if invitation_builder.call
  34. delivered_email_addresses.push(invitation_builder.email_address)
  35. end
  36. end
  37. end
  38. end
  39. end