class Ravelin::Client
Constants
- API_BASE
Public Class Methods
new(api_key:, api_version: 2, include_rule_output: false)
click to toggle source
# File lib/ravelin/client.rb, line 14 def initialize(api_key:, api_version: 2, include_rule_output: false) @api_key = api_key @url_prefix = '' @include_rule_output = include_rule_output raise ArgumentError.new("api_version must be 2 or 3") unless [2,3].include? api_version @api_version = api_version @connection = Faraday.new(API_BASE, faraday_options) do |conn| conn.response :json, context_type: /\bjson$/ conn.adapter Ravelin.faraday_adapter end end
Public Instance Methods
delete_tag(**args)
click to toggle source
# File lib/ravelin/client.rb, line 54 def delete_tag(**args) tag = Tag.new(**args).serializable_hash customer_id = tag["customerId"] tags = tag["tagNames"].join(",") delete("#{@url_prefix}/v#{@api_version}/tag/customer?customerId=#{customer_id}&tagName=#{tags}") end
get_tag(**args)
click to toggle source
# File lib/ravelin/client.rb, line 62 def get_tag(**args) tag = Tag.new(**args).serializable_hash customer_id = tag["customerId"] get("#{@url_prefix}/v#{@api_version}/tag/customer/#{customer_id}") end
send_backfill_event(**args)
click to toggle source
# File lib/ravelin/client.rb, line 38 def send_backfill_event(**args) unless args.has_key?(:timestamp) raise ArgumentError.new('missing parameters: timestamp') end event = Event.new(**args) post("#{@url_prefix}/v#{@api_version}/backfill/#{event.name}", event.serializable_hash) end
send_event(**args)
click to toggle source
# File lib/ravelin/client.rb, line 28 def send_event(**args) score = args.delete(:score) headers = args.delete(:headers) event = Event.new(**args) score_param = score ? "?score=true" : nil post("#{@url_prefix}/v#{@api_version}/#{event.name}#{score_param}", event.serializable_hash, headers) end
send_tag(**args)
click to toggle source
# File lib/ravelin/client.rb, line 48 def send_tag(**args) tag = Tag.new(**args) post("#{@url_prefix}/v#{@api_version}/tag/customer", tag.serializable_hash) end
Private Instance Methods
delete(url)
click to toggle source
# File lib/ravelin/client.rb, line 85 def delete(url) response = @connection.delete(url) if response.success? Response.new(response) else handle_error_response(response) end end
faraday_options()
click to toggle source
# File lib/ravelin/client.rb, line 118 def faraday_options options = { request: { timeout: Ravelin.faraday_timeout }, headers: { 'Authorization' => "token #{@api_key}", 'Content-Type' => 'application/json; charset=utf-8'.freeze, 'User-Agent' => "Ravelin RubyGem/#{Ravelin::VERSION}".freeze } } if @include_rule_output options[:headers]['Accept'] = 'application/vnd.ravelin.score.v2+json' end options end
get(url)
click to toggle source
# File lib/ravelin/client.rb, line 95 def get(url) response = @connection.get(url) if response.success? Response.new(response) else handle_error_response(response) end end
handle_error_response(response)
click to toggle source
# File lib/ravelin/client.rb, line 105 def handle_error_response(response) case response.status when 400, 403, 404, 405, 406 raise InvalidRequestError.new(response) when 401 raise AuthenticationError.new(response) when 429 raise RateLimitError.new(response) else raise ApiError.new(response) end end
post(url, payload, headers = {})
click to toggle source
# File lib/ravelin/client.rb, line 71 def post(url, payload, headers = {}) response = @connection.post(url, payload.to_json) do |request| headers&.each { |key, value| request.headers[key] = value } end if response.success? Response.new(response) else handle_error_response(response) end end