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.
128 129 130 131 132 133 134 135 136 137 |
# File 'lib/sift/client.rb', line 128 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.
90 91 92 |
# File 'lib/sift/client.rb', line 90 def account_id @account_id end |
#api_key ⇒ Object (readonly)
Returns the value of attribute api_key.
90 91 92 |
# File 'lib/sift/client.rb', line 90 def api_key @api_key end |
Class Method Details
.build_auth_header(api_key) ⇒ Object
92 93 94 |
# File 'lib/sift/client.rb', line 92 def self.build_auth_header(api_key) { "Authorization" => "Basic #{Base64.encode64(api_key)}" } end |
.user_agent ⇒ Object
96 97 98 |
# File 'lib/sift/client.rb', line 96 def self.user_agent "sift-ruby/#{VERSION}" end |
Instance Method Details
#apply_decision(configs = {}) ⇒ Object
515 516 517 |
# File 'lib/sift/client.rb', line 515 def apply_decision(configs = {}) decision_instance.apply_to(configs) end |
#apply_decision!(configs = {}) ⇒ Object
519 520 521 |
# File 'lib/sift/client.rb', line 519 def apply_decision!(configs = {}) handle_response(apply_decision(configs)) end |
#decisions(opts = {}) ⇒ Object
507 508 509 |
# File 'lib/sift/client.rb', line 507 def decisions(opts = {}) decision_instance.list(opts) end |
#decisions!(opts = {}) ⇒ Object
511 512 513 |
# File 'lib/sift/client.rb', line 511 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.
491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 |
# File 'lib/sift/client.rb', line 491 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.
453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 |
# File 'lib/sift/client.rb', line 453 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.
415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 |
# File 'lib/sift/client.rb', line 415 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.
328 329 330 331 332 333 334 335 336 337 338 |
# File 'lib/sift/client.rb', line 328 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).
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 |
# File 'lib/sift/client.rb', line 272 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.
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 237 |
# File 'lib/sift/client.rb', line 201 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.
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 |
# File 'lib/sift/client.rb', line 371 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
139 140 141 |
# File 'lib/sift/client.rb', line 139 def user_agent "SiftScience/v#{@version} sift-ruby/#{VERSION}" end |