Class: CastleDevise::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/castle_devise/context.rb

Overview

Provides a small layer of abstraction on top of raw Rack::Request and Warden

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rack_request:, scope:, resource: nil) ⇒ Context

Returns a new instance of Context.

Parameters:

  • rack_request (Rack::Request)
  • resource (ActiveRecord::Base, nil) (defaults to: nil)
  • scope (Symbol)

    Warden scope



26
27
28
29
30
# File 'lib/castle_devise/context.rb', line 26

def initialize(rack_request:, scope:, resource: nil)
  @rack_request = rack_request
  @resource = resource
  @scope = scope
end

Instance Attribute Details

#rack_requestRack::Request (readonly)

Returns:

  • (Rack::Request)


17
18
19
# File 'lib/castle_devise/context.rb', line 17

def rack_request
  @rack_request
end

#resourceActiveRecord::Base? (readonly)

Returns:

  • (ActiveRecord::Base, nil)


19
20
21
# File 'lib/castle_devise/context.rb', line 19

def resource
  @resource
end

#scopeSymbol (readonly)

Returns The Devise scope for the resource.

Returns:

  • (Symbol)

    The Devise scope for the resource



21
22
23
# File 'lib/castle_devise/context.rb', line 21

def scope
  @scope
end

Class Method Details

.from_rack_env(rack_env, scope, resource = nil) ⇒ CastleDevise::Context

Parameters:

  • rack_env (Hash)
  • scope (Symbol)

    Warden scope

  • resource (ActiveRecord::Base, nil) (defaults to: nil)

Returns:



11
12
13
# File 'lib/castle_devise/context.rb', line 11

def from_rack_env(rack_env, scope, resource = nil)
  new(rack_request: Rack::Request.new(rack_env), scope: scope, resource: resource)
end

Instance Method Details

#castle_idString?

Returns user_id that will be sent to Castle.

Returns:

  • (String, nil)

    user_id that will be sent to Castle



38
39
40
# File 'lib/castle_devise/context.rb', line 38

def castle_id
  resource&.castle_id
end

#emailString?

Email for the current context. If there is no resource available (eg. for a failed login request) this method will attempt to fetch an email from Rack POST parameters using the current Devise scope.

Returns:

  • (String, nil)


46
47
48
# File 'lib/castle_devise/context.rb', line 46

def email
  resource&.email || email_from_form_params
end

#logout!Object

Logs out current resource. Adds ‘castle_devise: :skip` to the authentication options to make sure we do not accidentally call Castle due to auth failure.



67
68
69
70
# File 'lib/castle_devise/context.rb', line 67

def logout!
  warden.logout(scope)
  throw(:warden, scope: scope, castle_devise: :skip, message: :not_found_in_database)
end

#registered_atTime?

Returns:

  • (Time, nil)


61
62
63
# File 'lib/castle_devise/context.rb', line 61

def registered_at
  resource&.created_at
end

#request_tokenString?

Returns Castle request token, if present in POST params.

Returns:

  • (String, nil)

    Castle request token, if present in POST params



33
34
35
# File 'lib/castle_devise/context.rb', line 33

def request_token
  rack_request.env.dig("rack.request.form_hash", "castle_request_token")
end

#user_traitsHash

Returns additional user traits that will be sent to Castle.

Returns:

  • (Hash)

    additional user traits that will be sent to Castle



56
57
58
# File 'lib/castle_devise/context.rb', line 56

def user_traits
  resource&.castle_traits || {}
end

#usernameString?

Returns:

  • (String, nil)


51
52
53
# File 'lib/castle_devise/context.rb', line 51

def username
  resource&.castle_name
end