74 lines
1.4 KiB
Ruby
74 lines
1.4 KiB
Ruby
|
class Sendinblue::Api
|
||
|
def self.new_properly_configured!
|
||
|
api = self.new
|
||
|
if !api.properly_configured?
|
||
|
raise StandardError, 'Sendinblue API is not properly configured'
|
||
|
end
|
||
|
api
|
||
|
end
|
||
|
|
||
|
def initialize
|
||
|
@failures = []
|
||
|
end
|
||
|
|
||
|
def properly_configured?
|
||
|
client_key.present?
|
||
|
end
|
||
|
|
||
|
def identify(email, attributes = {})
|
||
|
req = api_request('identify', email: email, attributes: attributes)
|
||
|
req.on_complete do |response|
|
||
|
if !response.success?
|
||
|
push_failure("Error while updating identity for administrateur '#{email}' in Sendinblue: #{response.response_code} '#{response.body}'")
|
||
|
end
|
||
|
end
|
||
|
hydra.queue(req)
|
||
|
end
|
||
|
|
||
|
def run
|
||
|
hydra.run
|
||
|
@hydra = nil
|
||
|
flush_failures
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def hydra
|
||
|
@hydra ||= Typhoeus::Hydra.new
|
||
|
end
|
||
|
|
||
|
def push_failure(failure)
|
||
|
@failures << failure
|
||
|
end
|
||
|
|
||
|
def flush_failures
|
||
|
failures = @failures
|
||
|
@failures = []
|
||
|
if failures.present?
|
||
|
raise StandardError, failures.join(', ')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def api_request(path, body)
|
||
|
url = "#{SENDINBLUE_API_URL}/#{path}"
|
||
|
|
||
|
Typhoeus::Request.new(
|
||
|
url,
|
||
|
method: :post,
|
||
|
body: body.to_json,
|
||
|
headers: headers
|
||
|
)
|
||
|
end
|
||
|
|
||
|
def headers
|
||
|
{
|
||
|
'ma-key': client_key,
|
||
|
'Content-Type': 'application/json; charset=UTF-8'
|
||
|
}
|
||
|
end
|
||
|
|
||
|
def client_key
|
||
|
Rails.application.secrets.sendinblue[:client_key]
|
||
|
end
|
||
|
end
|