Class: Sift::Client
- Inherits:
-
Object
- Object
- Sift::Client
- Includes:
- HTTParty
- Defined in:
- lib/sift/client.rb,
lib/sift/client/decision.rb,
lib/sift/client/decision/apply_to.rb
Overview
This class wraps accesses through the API
Defined Under Namespace
Classes: Decision
Constant Summary collapse
- API_ENDPOINT =
ENV["SIFT_RUBY_API_URL"] || 'https://api.siftscience.com'
- API3_ENDPOINT =
ENV["SIFT_RUBY_API3_URL"] || 'https://api3.siftscience.com'
Instance Attribute Summary collapse
-
#account_id ⇒ Object
readonly
Returns the value of attribute account_id.
-
#api_key ⇒ Object
readonly
Returns the value of attribute api_key.
Class Method Summary collapse
Instance Method Summary collapse
- #apply_decision(configs = {}) ⇒ Object
- #apply_decision!(configs = {}) ⇒ Object
- #decisions(opts = {}) ⇒ Object
- #decisions!(opts = {}) ⇒ Object
-
#get_order_decisions(order_id, opts = {}) ⇒ Object
Gets the decision status of an order.
-
#get_user_decisions(user_id, opts = {}) ⇒ Object
Gets the decision status of a user.
-
#get_workflow_status(run_id, opts = {}) ⇒ Object
Gets the status of a workflow run.
-
#initialize(opts = {}) ⇒ Client
constructor
Constructor.
-
#label(user_id, properties = {}, opts = {}) ⇒ Object
Labels a user.
-
#score(user_id, opts = {}) ⇒ Object
Retrieves a user’s fraud score from the Sift Science API.
-
#track(event, properties = {}, opts = {}) ⇒ Object
Sends an event to the Sift Science Events API.
-
#unlabel(user_id, opts = {}) ⇒ Object
Unlabels a user.
- #user_agent ⇒ Object
Constructor Details
#initialize(opts = {}) ⇒ Client
Constructor
Parameters:
- opts (optional)
-
A Hash of optional parameters for this Client –
- :api_key
-
The Sift Science API key associated with your account. Sift.api_key is used if this parameter is not set.
- :account_id
-
The ID of your Sift Science account. Sift.account_id is used if this parameter is not set.
- :timeout
-
The number of seconds to wait before failing a request. By default this is configured to 2 seconds.
- :version
-
The version of the Events API, Score API, and Labels API to call. By default, version 204.
- :path
-
The URL path to use for Events API path. By default, the official path of the specified-version of the Events API.
127 128 129 130 131 132 133 134 135 136 |
# File 'lib/sift/client.rb', line 127 def initialize(opts = {}) @api_key = opts[:api_key] || Sift.api_key @account_id = opts[:account_id] || Sift.account_id @version = opts[:version] || API_VERSION @timeout = opts[:timeout] || 2 # 2-second timeout by default @path = opts[:path] || Sift.rest_api_path(@version) raise("api_key must be a non-empty string") if !@api_key.is_a?(String) || @api_key.empty? raise("path must be a non-empty string") if !@path.is_a?(String) || @path.empty? end |
Instance Attribute Details
#account_id ⇒ Object (readonly)
Returns the value of attribute account_id.
89 90 91 |
# File 'lib/sift/client.rb', line 89 def account_id @account_id end |
#api_key ⇒ Object (readonly)
Returns the value of attribute api_key.
89 90 91 |
# File 'lib/sift/client.rb', line 89 def api_key @api_key end |
Class Method Details
.build_auth_header(api_key) ⇒ Object
91 92 93 |
# File 'lib/sift/client.rb', line 91 def self.build_auth_header(api_key) { "Authorization" => "Basic #{Base64.encode64(api_key)}" } end |
.user_agent ⇒ Object
95 96 97 |
# File 'lib/sift/client.rb', line 95 def self.user_agent "sift-ruby/#{VERSION}" end |
Instance Method Details
#apply_decision(configs = {}) ⇒ Object
514 515 516 |
# File 'lib/sift/client.rb', line 514 def apply_decision(configs = {}) decision_instance.apply_to(configs) end |
#apply_decision!(configs = {}) ⇒ Object
518 519 520 |
# File 'lib/sift/client.rb', line 518 def apply_decision!(configs = {}) handle_response(apply_decision(configs)) end |
#decisions(opts = {}) ⇒ Object
506 507 508 |
# File 'lib/sift/client.rb', line 506 def decisions(opts = {}) decision_instance.list(opts) end |
#decisions!(opts = {}) ⇒ Object
510 511 512 |
# File 'lib/sift/client.rb', line 510 def decisions!(opts = {}) handle_response(decisions(opts)) end |
#get_order_decisions(order_id, opts = {}) ⇒ Object
Gets the decision status of an order.
See siftscience.com/developers/docs/ruby/decisions-api/decision-status .
Parameters
- order_id
-
The ID of an order.
- opts (optional)
-
A Hash of optional parameters for this request –
- :account_id
-
Overrides the API key for this call.
- :api_key
-
Overrides the API key for this call.
- :timeout
-
Overrides the timeout (in seconds) for this call.
490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
# File 'lib/sift/client.rb', line 490 def get_order_decisions(order_id, opts = {}) account_id = opts[:account_id] || @account_id api_key = opts[:api_key] || @api_key timeout = opts[:timeout] || @timeout = { :headers => { "User-Agent" => user_agent }, :basic_auth => { :username => api_key, :password => "" } } .merge!(:timeout => timeout) unless timeout.nil? uri = API3_ENDPOINT + Sift.order_decisions_api_path(account_id, order_id) response = self.class.get(uri, ) Response.new(response.body, response.code, response.response) end |
#get_user_decisions(user_id, opts = {}) ⇒ Object
Gets the decision status of a user.
See siftscience.com/developers/docs/ruby/decisions-api/decision-status .
Parameters
- user_id
-
The ID of user.
- opts (optional)
-
A Hash of optional parameters for this request –
- :account_id
-
Overrides the API key for this call.
- :api_key
-
Overrides the API key for this call.
- :timeout
-
Overrides the timeout (in seconds) for this call.
452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 |
# File 'lib/sift/client.rb', line 452 def get_user_decisions(user_id, opts = {}) account_id = opts[:account_id] || @account_id api_key = opts[:api_key] || @api_key timeout = opts[:timeout] || @timeout = { :headers => { "User-Agent" => user_agent }, :basic_auth => { :username => api_key, :password => "" } } .merge!(:timeout => timeout) unless timeout.nil? uri = API3_ENDPOINT + Sift.user_decisions_api_path(account_id, user_id) response = self.class.get(uri, ) Response.new(response.body, response.code, response.response) end |
#get_workflow_status(run_id, opts = {}) ⇒ Object
Gets the status of a workflow run.
See siftscience.com/developers/docs/ruby/workflows-api/workflow-status .
Parameters
- run_id
-
The ID of a workflow run.
- opts (optional)
-
A Hash of optional parameters for this request –
- :account_id
-
Overrides the API key for this call.
- :api_key
-
Overrides the API key for this call.
- :timeout
-
Overrides the timeout (in seconds) for this call.
414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 |
# File 'lib/sift/client.rb', line 414 def get_workflow_status(run_id, opts = {}) account_id = opts[:account_id] || @account_id api_key = opts[:api_key] || @api_key timeout = opts[:timeout] || @timeout = { :headers => { "User-Agent" => user_agent }, :basic_auth => { :username => api_key, :password => "" } } .merge!(:timeout => timeout) unless timeout.nil? uri = API3_ENDPOINT + Sift.workflow_status_path(account_id, run_id) response = self.class.get(uri, ) Response.new(response.body, response.code, response.response) end |
#label(user_id, properties = {}, opts = {}) ⇒ Object
Labels a user.
See siftscience.com/developers/docs/ruby/labels-api/label-user .
Parameters:
- user_id
-
A user’s id. This id should be the same as the user_id used in event calls.
- properties
-
A hash of name-value pairs that specify the label attributes. This parameter must be specified.
- opts (optional)
-
A Hash of optional parameters for the request –
- :api_key
-
Overrides the API key for this call.
- :timeout
-
Overrides the timeout (in seconds) for this call.
- :version
-
Overrides the version of the Events API to call.
Returns:
In the case of a connection error (timeout, broken connection, etc.), this method returns nil; otherwise, a Response object is returned that captures the status message and status code.
327 328 329 330 331 332 333 334 335 336 337 |
# File 'lib/sift/client.rb', line 327 def label(user_id, properties = {}, opts = {}) api_key = opts[:api_key] || @api_key timeout = opts[:timeout] || @timeout version = opts[:version] || @version path = Sift.users_label_api_path(user_id, version) raise("user_id must be a non-empty string") if (!user_id.is_a? String) || user_id.to_s.empty? track("$label", delete_nils(properties), :path => path, :api_key => api_key, :timeout => timeout) end |
#score(user_id, opts = {}) ⇒ Object
Retrieves a user’s fraud score from the Sift Science API.
See siftscience.com/developers/docs/ruby/score-api/score-api .
Parameters:
- user_id
-
A user’s id. This id should be the same as the user_id used in event calls.
- opts (optional)
-
A Hash of optional parameters for the request –
- :abuse_types
-
List of abuse types, specifying for which abuse types a score should be returned. By default, a score is returned for every abuse type to which you are subscribed.
- :api_key
-
Overrides the API key for this call.
- :timeout
-
Overrides the timeout (in seconds) for this call.
- :version
-
Overrides the version of the Events API to call.
Returns:
A Response object containing a status code, status message, and, if successful, the user’s score(s).
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 |
# File 'lib/sift/client.rb', line 271 def score(user_id, opts = {}) abuse_types = opts[:abuse_types] api_key = opts[:api_key] || @api_key timeout = opts[:timeout] || @timeout version = opts[:version] || @version raise("user_id must be a non-empty string") if (!user_id.is_a? String) || user_id.to_s.empty? raise("Bad api_key parameter") if api_key.empty? query = {} query["api_key"] = api_key query["abuse_types"] = abuse_types.join(",") if abuse_types = { :headers => {"User-Agent" => user_agent}, :query => query } .merge!(:timeout => timeout) unless timeout.nil? response = self.class.get(Sift.score_api_path(user_id, version), ) Response.new(response.body, response.code, response.response) end |
#track(event, properties = {}, opts = {}) ⇒ Object
Sends an event to the Sift Science Events API.
See siftscience.com/developers/docs/ruby/events-api .
Parameters:
- event
-
The name of the event to send. This can be either a reserved event name, like $transaction or $label or a custom event name (that does not start with a $). This parameter must be specified.
- properties
-
A hash of name-value pairs that specify the event-specific attributes to track. This parameter must be specified.
- opts (optional)
-
A Hash of optional parameters for the request –
- :return_score
-
If true, requests that the response include a score for this user, computed using the submitted event. See siftscience.com/developers/docs/ruby/score-api/synchronous-scores
- :abuse_types
-
List of abuse types, specifying for which abuse types a score should be returned (if scoring was requested). By default, a score is returned for every abuse type to which you are subscribed.
- :return_action
-
If true, requests that the response include any actions triggered as a result of the tracked event.
- :return_workflow_status
-
If true, requests that the response include the status of any workflow run as a result of the tracked event. See siftscience.com/developers/docs/ruby/workflows-api/workflow-decisions
- :timeout
-
Overrides the timeout (in seconds) for this call.
- :api_key
-
Overrides the API key for this call.
- :version
-
Overrides the version of the Events API to call.
- :path
-
Overrides the URI path for this API call.
Returns:
In the case of a connection error (timeout, broken connection, etc.), this method returns nil; otherwise, a Response object is returned that captures the status message and status code.
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/sift/client.rb', line 200 def track(event, properties = {}, opts = {}) api_key = opts[:api_key] || @api_key version = opts[:version] || @version path = opts[:path] || (version && Sift.rest_api_path(version)) || @path timeout = opts[:timeout] || @timeout return_score = opts[:return_score] return_action = opts[:return_action] return_workflow_status = opts[:return_workflow_status] abuse_types = opts[:abuse_types] raise("event must be a non-empty string") if (!event.is_a? String) || event.empty? raise("properties cannot be empty") if properties.empty? raise("api_key cannot be empty") if api_key.empty? query = {} query["return_score"] = "true" if return_score query["return_action"] = "true" if return_action query["return_workflow_status"] = "true" if return_workflow_status query["abuse_types"] = abuse_types.join(",") if abuse_types = { :body => MultiJson.dump(delete_nils(properties).merge({"$type" => event, "$api_key" => api_key})), :headers => {"User-Agent" => user_agent}, :query => query } .merge!(:timeout => timeout) unless timeout.nil? begin response = self.class.post(path, ) Response.new(response.body, response.code, response.response) rescue StandardError => e Sift.warn("Failed to track event: " + e.to_s) Sift.warn(e.backtrace) nil end end |
#unlabel(user_id, opts = {}) ⇒ Object
Unlabels a user.
See siftscience.com/developers/docs/ruby/labels-api/unlabel-user .
Parameters:
- user_id
-
A user’s id. This id should be the same as the user_id used in event calls.
- opts (optional)
-
A Hash of optional parameters for this request –
- :abuse_type
-
The abuse type for which the user should be unlabeled. If omitted, the user is unlabeled for all abuse types.
- :api_key
-
Overrides the API key for this call.
- :timeout
-
Overrides the timeout (in seconds) for this call.
- :version
-
Overrides the version of the Events API to call.
Returns:
A Response object is returned with only an http code of 204.
370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 |
# File 'lib/sift/client.rb', line 370 def unlabel(user_id, opts = {}) abuse_type = opts[:abuse_type] api_key = opts[:api_key] || @api_key timeout = opts[:timeout] || @timeout version = opts[:version] || @version raise("user_id must be a non-empty string") if (!user_id.is_a? String) || user_id.to_s.empty? query = {} query[:api_key] = api_key query[:abuse_type] = abuse_type if abuse_type = { :headers => {}, :query => query } .merge!(:timeout => timeout) unless timeout.nil? response = self.class.delete(Sift.users_label_api_path(user_id, version), ) Response.new(response.body, response.code, response.response) end |
#user_agent ⇒ Object
138 139 140 |
# File 'lib/sift/client.rb', line 138 def user_agent "SiftScience/v#{@version} sift-ruby/#{VERSION}" end |