Class: CastleDevise::SdkFacade

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

Overview

A Facade layer providing a simpler API on top of the Castle SDK

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(castle, before_request_hooks = [], after_request_hooks = []) ⇒ SdkFacade

Returns a new instance of SdkFacade.

Parameters:

  • castle (Castle::Client)
  • before_request_hooks (Array<Proc>) (defaults to: [])
  • after_request_hooks (Array<Proc>) (defaults to: [])


12
13
14
15
16
# File 'lib/castle_devise/sdk_facade.rb', line 12

def initialize(castle, before_request_hooks = [], after_request_hooks = [])
  @castle = castle
  @before_request_hooks = before_request_hooks
  @after_request_hooks = after_request_hooks
end

Instance Attribute Details

#castleCastle::Client (readonly)

Returns:

  • (Castle::Client)


7
8
9
# File 'lib/castle_devise/sdk_facade.rb', line 7

def castle
  @castle
end

Instance Method Details

#filter(event:, context:, status: "$attempted") ⇒ Hash

Sends request to the /v1/filter endpoint.

Parameters:

Returns:

  • (Hash)

    Raw API response

See Also:



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/castle_devise/sdk_facade.rb', line 23

def filter(event:, context:, status: "$attempted")
  payload = {
    event: event,
    status: status,
    params: {
      email: context.email
    }.compact,
    request_token: context.request_token,
    context: payload_context(context.rack_request)
  }

  with_request_hooks(:filter, context, payload) do
    castle.filter(payload)
  end
end

#log(event:, status:, context:) ⇒ Hash

Sends request to the /v1/log endpoint.

Parameters:

Returns:

  • (Hash)

    Raw API response

See Also:



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/castle_devise/sdk_facade.rb', line 72

def log(event:, status:, context:)
  return if context.castle_id.blank? && context.email.blank?

  user = if context.castle_id
    {
      id: context.castle_id,
      email: context.email,
      registered_at: format_time(context.registered_at),
      traits: context.user_traits
    }
  else
    {
      email: context.email
    }
  end

  payload = {
    event: event,
    status: status,
    user: user,
    context: payload_context(context.rack_request)
  }

  # request_token is optional on the Log endpoint, but if it's sent it must
  # be a valid Castle token
  payload[:request_token] = context.request_token if context.request_token

  with_request_hooks(:log, context, payload) do
    castle.log(payload)
  end
end

#risk(event:, context:, status: "$succeeded") ⇒ Hash

Sends request to the /v1/risk endpoint.

Parameters:

Returns:

  • (Hash)

    Raw API response

See Also:



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/castle_devise/sdk_facade.rb', line 45

def risk(event:, context:, status: "$succeeded")
  payload = {
    event: event,
    status: status,
    user: {
      id: context.castle_id,
      email: context.email,
      registered_at: format_time(context.registered_at),
      traits: context.user_traits
    },
    request_token: context.request_token,
    context: payload_context(context.rack_request)
  }

  payload[:user][:name] = context.username if context.username

  with_request_hooks(:risk, context, payload) do
    castle.risk(payload)
  end
end