Class: CastleDevise::Context
- Inherits:
-
Object
- Object
- CastleDevise::Context
- 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
- #rack_request ⇒ Rack::Request readonly
- #resource ⇒ ActiveRecord::Base? readonly
-
#scope ⇒ Symbol
readonly
The Devise scope for the resource.
Class Method Summary collapse
Instance Method Summary collapse
-
#castle_id ⇒ String?
User_id that will be sent to Castle.
-
#email ⇒ String?
Email for the current context.
-
#initialize(rack_request:, scope:, resource: nil) ⇒ Context
constructor
A new instance of Context.
-
#logout! ⇒ Object
Logs out current resource.
- #registered_at ⇒ Time?
-
#request_token ⇒ String?
Castle request token, if present in POST params.
-
#user_traits ⇒ Hash
Additional user traits that will be sent to Castle.
- #username ⇒ String?
Constructor Details
#initialize(rack_request:, scope:, resource: nil) ⇒ Context
Returns a new instance of Context.
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_request ⇒ Rack::Request (readonly)
17 18 19 |
# File 'lib/castle_devise/context.rb', line 17 def rack_request @rack_request end |
#resource ⇒ ActiveRecord::Base? (readonly)
19 20 21 |
# File 'lib/castle_devise/context.rb', line 19 def resource @resource end |
#scope ⇒ Symbol (readonly)
Returns 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
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_id ⇒ String?
Returns 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 |
#email ⇒ String?
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.
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_at ⇒ Time?
61 62 63 |
# File 'lib/castle_devise/context.rb', line 61 def registered_at resource&.created_at end |
#request_token ⇒ String?
Returns 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_traits ⇒ Hash
Returns 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 |
#username ⇒ String?
51 52 53 |
# File 'lib/castle_devise/context.rb', line 51 def username resource&.castle_name end |