/app/services/gobierto_admin/admin_invitation_builder.rb

https://github.com/PopulateTools/gobierto · Ruby · 47 lines · 38 code · 9 blank · 0 comment · 2 complexity · 36eceee95eb5ba4b5aef1ed76911766d MD5 · raw file

  1. module GobiertoAdmin
  2. class AdminInvitationBuilder
  3. attr_reader :email_address, :sites, :admin
  4. def initialize(email_address, site_ids = [])
  5. @email_address = email_address
  6. @sites = Site.where(id: site_ids)
  7. end
  8. def call
  9. deliver_invitation_email if create_admin
  10. end
  11. private
  12. def create_admin
  13. @admin = Admin.create!(
  14. email: email_address,
  15. name: get_username_from_email(email_address),
  16. password: generate_random_password,
  17. invitation_token: Admin.generate_unique_secure_token,
  18. invitation_sent_at: Time.zone.now
  19. )
  20. @admin.sites = sites
  21. @admin
  22. rescue ActiveRecord::RecordInvalid
  23. false
  24. end
  25. def deliver_invitation_email
  26. AdminMailer.invitation_instructions(admin).deliver_later
  27. end
  28. protected
  29. def get_username_from_email(email_address)
  30. if email_address =~ Admin::EMAIL_ADDRESS_REGEXP
  31. $1
  32. end
  33. end
  34. def generate_random_password
  35. SecureRandom.hex(8)
  36. end
  37. end
  38. end