anyone-oslo/pages

View on GitHub
app/services/pages_core/create_user_service.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module PagesCore
  class CreateUserService
    attr_reader :attributes, :invite

    def initialize(attributes, invite: nil)
      @attributes = attributes
      @invite = invite
    end

    class << self
      def call(attrs, invite: nil)
        new(attrs, invite:).call
      end
    end

    def call
      User.transaction do
        user = User.create(attributes.merge(invite_attributes))
        if user.valid?
          PagesCore::PubSub.publish(:create_user, user:, invite:)
          invite&.destroy
        end
        user
      end
    end

    private

    def invite_attributes
      return {} unless invite

      { role_names: invite.role_names,
        creator: invite.user,
        activated: true }
    end
  end
end