class Castle::Client

Castle’s client.

Attributes

context[RW]

Public Class Methods

from_request(request, options = {}) click to toggle source
# File lib/castle/client.rb, line 10
def from_request(request, options = {})
  new(options.merge(context: Castle::Context::Prepare.call(request, options)))
end
new(options = {}) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 18
def initialize(options = {})
  options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
  @do_not_track = options.fetch(:do_not_track, false)
  @timestamp = options.fetch(:timestamp) { Castle::Utils::GetTimestamp.call }
  @context = options.fetch(:context) { {} }
end

Public Instance Methods

authenticate(options = {}) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 26
def authenticate(options = {})
  options = Castle::Utils::DeepSymbolizeKeys.call(options || {})

  return generate_do_not_track_response(options[:user_id]) unless tracked?

  add_timestamp_if_necessary(options)

  new_context = Castle::Context::Merge.call(@context, options[:context])

  Castle::API::Authenticate.call(options.merge(context: new_context, no_symbolize: true))
end
disable_tracking() click to toggle source
# File lib/castle/client.rb, line 112
def disable_tracking
  @do_not_track = true
end
enable_tracking() click to toggle source
# File lib/castle/client.rb, line 116
def enable_tracking
  @do_not_track = false
end
end_impersonation(options = {}) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 102
def end_impersonation(options = {})
  options = Castle::Utils::DeepSymbolizeKeys.call(options || {})

  add_timestamp_if_necessary(options)

  new_context = Castle::Context::Merge.call(@context, options[:context])

  Castle::API::EndImpersonation.call(options.merge(context: new_context, no_symbolize: true))
end
filter(options = {}) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 52
def filter(options = {})
  options = Castle::Utils::DeepSymbolizeKeys.call(options || {})

  return generate_do_not_track_response(options[:user][:id]) unless tracked?

  add_timestamp_if_necessary(options)

  new_context = Castle::Context::Merge.call(@context, options[:context])

  Castle::API::Filter.call(options.merge(context: new_context, no_symbolize: true))
end
log(options = {}) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 78
def log(options = {})
  options = Castle::Utils::DeepSymbolizeKeys.call(options || {})

  return generate_do_not_track_response(options[:user][:id]) unless tracked?

  add_timestamp_if_necessary(options)

  new_context = Castle::Context::Merge.call(@context, options[:context])

  Castle::API::Log.call(options.merge(context: new_context, no_symbolize: true))
end
risk(options = {}) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 65
def risk(options = {})
  options = Castle::Utils::DeepSymbolizeKeys.call(options || {})

  return generate_do_not_track_response(options[:user][:id]) unless tracked?

  add_timestamp_if_necessary(options)

  new_context = Castle::Context::Merge.call(@context, options[:context])

  Castle::API::Risk.call(options.merge(context: new_context, no_symbolize: true))
end
start_impersonation(options = {}) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 91
def start_impersonation(options = {})
  options = Castle::Utils::DeepSymbolizeKeys.call(options || {})

  add_timestamp_if_necessary(options)

  new_context = Castle::Context::Merge.call(@context, options[:context])

  Castle::API::StartImpersonation.call(options.merge(context: new_context, no_symbolize: true))
end
track(options = {}) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 39
def track(options = {})
  options = Castle::Utils::DeepSymbolizeKeys.call(options || {})

  return unless tracked?

  add_timestamp_if_necessary(options)

  new_context = Castle::Context::Merge.call(@context, options[:context])

  Castle::API::Track.call(options.merge(context: new_context, no_symbolize: true))
end
tracked?() click to toggle source

@return [Boolean]

# File lib/castle/client.rb, line 121
def tracked?
  !@do_not_track
end

Private Instance Methods

add_timestamp_if_necessary(options) click to toggle source

@param options [Hash]

# File lib/castle/client.rb, line 133
def add_timestamp_if_necessary(options)
  options[:timestamp] ||= @timestamp if @timestamp
end
generate_do_not_track_response(user_id) click to toggle source

@param user_id [String, Boolean]

# File lib/castle/client.rb, line 128
def generate_do_not_track_response(user_id)
  Castle::Failover::PrepareResponse.new(user_id, strategy: :allow, reason: 'Castle is set to do not track.').call
end