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