Sha256: 8d98b9226d0a6ebe5b8432692c930e51bfa3e1eaf1601abee6109a78981b0020

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

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

    class FindBy < self
      def call(&block)
        find_by_auth.try(&block)
      end
    end

    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.5 lib/current_session/auth_method.rb