Sha256: 7598569116d7762daf6e265482eada6b46fe6766dfcbdc40fa06cf71018c6656

Contents?: true

Size: 1.51 KB

Versions: 75

Compression:

Stored size: 1.51 KB

Contents

module Pageflow
  # @api private
  class InvitationForm
    include ActiveModel::Model

    attr_reader :membership, :target_user, :available_accounts

    def initialize(attributes, available_accounts)
      @attributes = attributes
      @available_accounts = available_accounts

      @invited_user = InvitedUser.new(attributes[:user])
      @target_user = existing_user || @invited_user

      @membership = @target_user.memberships.build(entity: initial_account,
                                                   role: initial_role)
    end

    def user
      @invited_user.becomes(User)
    end

    def save
      return false unless valid?
      Pageflow.config.quotas.get(:users, initial_account).verify_available!

      membership.save!
    end

    def valid?
      (existing_user || @invited_user.valid?) && membership.valid?
    end

    def existing_member
      @existing_member ||=
        initial_account && initial_account.users.find_by_email(user.email)
    end

    def initial_account
      @initial_account ||=
        if initial_account_id
          available_accounts.find_by_id(initial_account_id)
        else
          available_accounts.first
        end
    end

    private

    def existing_user
      @existing_user ||=
        Pageflow.config.allow_multiaccount_users &&
        User.find_by_email(user.email)
    end

    def initial_account_id
      @attributes.fetch(:membership, {})[:entity_id]
    end

    def initial_role
      @attributes.fetch(:membership, {})[:role] || 'member'
    end
  end
end

Version data entries

75 entries across 75 versions & 1 rubygems

Version Path
pageflow-17.0.4 app/models/pageflow/invitation_form.rb
pageflow-17.0.3 app/models/pageflow/invitation_form.rb
pageflow-17.0.2 app/models/pageflow/invitation_form.rb
pageflow-17.0.1 app/models/pageflow/invitation_form.rb
pageflow-17.0.0 app/models/pageflow/invitation_form.rb
pageflow-16.2.0 app/models/pageflow/invitation_form.rb
pageflow-16.1.0 app/models/pageflow/invitation_form.rb
pageflow-16.0.0 app/models/pageflow/invitation_form.rb
pageflow-15.8.0 app/models/pageflow/invitation_form.rb
pageflow-14.5.2 app/models/pageflow/invitation_form.rb
pageflow-15.7.1 app/models/pageflow/invitation_form.rb
pageflow-15.7.0 app/models/pageflow/invitation_form.rb
pageflow-15.6.1 app/models/pageflow/invitation_form.rb
pageflow-15.6.0 app/models/pageflow/invitation_form.rb
pageflow-15.5.0 app/models/pageflow/invitation_form.rb
pageflow-15.4.0 app/models/pageflow/invitation_form.rb
pageflow-15.3.0 app/models/pageflow/invitation_form.rb
pageflow-15.2.2 app/models/pageflow/invitation_form.rb
pageflow-15.2.1 app/models/pageflow/invitation_form.rb
pageflow-15.2.0 app/models/pageflow/invitation_form.rb