class Esputnik::Client
Constants
- BASE_URL
Public Class Methods
new(login:, password:, logger: nil)
click to toggle source
# File lib/esputnik/client.rb, line 7 def initialize(login:, password:, logger: nil) @login = login @password = password @logger = logger end
Public Instance Methods
contact_subscribe(contact:, groups: nil, form_type: nil)
click to toggle source
Метод применяется для подключения форм подписки и в других случаях. Создает новые контакты, существующие обновляет. Создает в системе события для запуска сценариев. Новые контакты создаются в статусе “неподтвержденный”, что позволяет реализовать double opt-in.
# File lib/esputnik/client.rb, line 47 def contact_subscribe(contact:, groups: nil, form_type: nil) raise Error, 'Esputnik::Contact expected' unless contact.is_a?(Esputnik::Contact) raise Error, contact.errors unless contact.valid? post '/contact/subscribe', 'contact' => contact.as_json, 'groups' => groups, 'formType' => form_type end
contact_update(id:, contact:, groups: nil, form_type: nil)
click to toggle source
Метод для обновления одного контакта. Новые контакты не создает. Чтобы обновить контакт этим методом надо знать id контакта в нашей системе. Подробнее.
# File lib/esputnik/client.rb, line 60 def contact_update(id:, contact:, groups: nil, form_type: nil) raise Error, 'Esputnik::Contact expected' unless contact.is_a?(Esputnik::Contact) raise Error, contact.errors unless contact.valid? put "/contact/#{id}", 'contact' => contact.as_json, 'groups' => groups, 'formType' => form_type end
send_event(event_type_key:, key_value:, params: {})
click to toggle source
# File lib/esputnik/client.rb, line 17 def send_event(event_type_key:, key_value:, params: {}) post '/event', 'eventTypeKey' => event_type_key, 'keyValue' => key_value, 'params' => wrap_key_value(params) end
simple_contact_subscribe(email:, phone:, additional_data:)
click to toggle source
Метод, упрощающий работу с API eSputnik additional_data - [{id: <key_id>, value: value}, … ]
# File lib/esputnik/client.rb, line 27 def simple_contact_subscribe(email:, phone:, additional_data:) contact = Esputnik::Contact.new contact.channels = channels_pair(email: email, phone: phone) contact.fields = additional_data contact_subscribe(contact: contact) end
simple_contact_update(id:, email:, phone:, additional_data:)
click to toggle source
# File lib/esputnik/client.rb, line 35 def simple_contact_update(id:, email:, phone:, additional_data:) contact = Esputnik::Contact.new contact.channels = channels_pair(email: email, phone: phone) contact.fields = additional_data contact_update(id: id, contact: contact) end
version()
click to toggle source
# File lib/esputnik/client.rb, line 13 def version get '/version' end
Private Instance Methods
build_http_client()
click to toggle source
# File lib/esputnik/client.rb, line 111 def build_http_client connection = Faraday.new do |builder| builder.request :url_encoded builder.response :logger, @logger, bodies: true if @logger builder.adapter Faraday.default_adapter end connection.basic_auth(@login, @password) connection end
channels_pair(email:, phone:)
click to toggle source
# File lib/esputnik/client.rb, line 72 def channels_pair(email:, phone:) [ Esputnik::Channel.new.tap do |c| c.type = 'email' c.value = email end, Esputnik::Channel.new.tap do |c| c.type = 'sms' c.value = phone end ] end
get(path, **data)
click to toggle source
# File lib/esputnik/client.rb, line 85 def get(path, **data) send_request(:get, path, data) end
http_client()
click to toggle source
# File lib/esputnik/client.rb, line 107 def http_client @http_client ||= build_http_client end
post(path, data)
click to toggle source
# File lib/esputnik/client.rb, line 89 def post(path, data) send_request(:post, path, data) end
put(path, data)
click to toggle source
# File lib/esputnik/client.rb, line 93 def put(path, data) send_request(:put, path, data) end
send_request(method, path, data)
click to toggle source
# File lib/esputnik/client.rb, line 97 def send_request(method, path, data) response = http_client.send(method, BASE_URL + path) do |req| req.body = data.to_json if data.any? req.headers['Content-Type'] = 'application/json' req.headers['Accept'] = 'application/json' end Response.new(response) end
wrap_key_value(hash)
click to toggle source
# File lib/esputnik/client.rb, line 122 def wrap_key_value(hash) hash.each_with_object([]) { |(k, v), list| list << { name: k, value: v } } end