PHCNetworks/multi-tenancy-devise

View on GitHub
app/controllers/mtdevise/accounts_controller.rb

Summary

Maintainability
A
35 mins
Test Coverage
require_dependency "mtdevise/application_controller"

module Mtdevise
    class AccountsController < ApplicationController

        # Layouts and Filters
        layout :layouts_resolver_accounts
        before_action :redirect_if_coming_form_sign_up, only: :new
        before_action :authenticate_user!, except: [:new, :create]

        # Accounts Index
        def index
            @accounts = current_user.accounts
        end

        # Accounts Registration
        def new
            @account = Mtdevise::Account.new
            @account.build_owner unless user_signed_in?
        end

        # Accounts Create action
        def create
            account = if user_signed_in?
            Mtdevise::Account.create(account_params)
            else
                Mtdevise::Account.create_with_owner(account_params)
            end
        
            @account = account
            if account.valid?
                flash[:success] = "Your account has been successfully created."

            if user_signed_in?
                account.owner = current_user
                account.users << current_user
                account.save
                redirect_to mtdevise.accounts_path

            else
                sign_in account.owner
                redirect_to mtdevise.root_url(:subdomain => account.subdomain)
            end

            else
                flash[:error] = "Sorry, your account could not be created."
                render :new
            end

        end

        private

        def redirect_if_coming_form_sign_up
            redirect_to accounts_path if request.url =~ /#{sign_up_path}/ && user_signed_in?
        end

        def account_params
            params.require(:account).permit(:name, :firstname, :lastname, :username, :subdomain, { :owner_attributes => [:email, :password, :password_confirmation]})
        end

    end
end