Sha256: 0851c0734b8cc3acec8e217bf866ca51a648c82b2fe545a39859d60a9354374f

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true

module CurrentSession
  #
  # Base class for providing auth methods
  #
  class AuthMethod
    class_attribute :user_class

    # only exist users
    class FindBy < self
      def call(&block)
        find_by_auth.try(&block)
      end
    end

    # admit new users
    class FindOrCreateBy < self
      def call(&block)
        find_or_create_by_auth.try(&block)
      end
    end

    def self.new_auth_class(auth_methods_module)
      new_auth_class =
        if auth_methods_module.method_defined?(:find_by_auth)
          Class.new(CurrentSession::AuthMethod::FindBy) { include auth_methods_module }
        elsif auth_methods_module.method_defined?(:find_or_create_by_auth)
          Class.new(CurrentSession::AuthMethod::FindOrCreateBy) { include auth_methods_module }
        else
          fail NotImplementedError, "You must implement find_by_auth or find_or_create_by_auth"
        end
      new_auth_class.user_class = user_class
      new_auth_class
    end

    def initialize(request)
      @request = request
    end
    attr_reader :request

    def auth
      request.env["omniauth.auth"]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
current_session-0.1.6 lib/current_session/auth_method.rb