Class: MegalabsSms::Client
- Inherits:
-
Object
- Object
- MegalabsSms::Client
- Defined in:
- lib/megalabs_sms.rb
Overview
Класс для взаимодействия с API Megalabs для отправки SMS
Constant Summary collapse
- DEFAULT_ENDPOINT =
URI('https://a2p-api.megalabs.ru/sms/v1/sms')
- DEFAULT_OPEN_TIMEOUT =
ClientConfig::DEFAULTS[:open_timeout]
- DEFAULT_READ_TIMEOUT =
ClientConfig::DEFAULTS[:read_timeout]
Instance Method Summary collapse
-
#build_request(from, to, message) ⇒ Net::HTTP::Post
private
Создает HTTP-запрос для отправки SMS.
-
#build_request_body(from, to, message) ⇒ String
private
Создает тело HTTP-запроса для отправки SMS.
-
#handle_stub_response ⇒ Boolean
private
Обрабатывает эмуляцию ответов.
-
#http_transport ⇒ MegalabsSms::HttpTransport
private
Возвращает транспорт для HTTP-запросов.
-
#initialize(api_user, api_password, **options) ⇒ Client
constructor
Конструктор, инициализирующий параметры клиента:.
-
#log(level, message) ⇒ Object
private
Логирует сообщение, если задан логгер.
-
#log_message(message) ⇒ String
Метод для форматирования сообщений логирования.
-
#send_request(request) ⇒ Boolean
private
Отправляет HTTP-запрос.
-
#send_sms(from = nil, to = nil, message = nil, **kwargs) ⇒ Boolean
Метод для отправки SMS через сервис Megalabs.
-
#stub_enabled? ⇒ Boolean
private
Проверяет, включен ли режим эмуляции ответов.
-
#validate_message_args!(from, to, message) ⇒ Object
private
Проверяет входные параметры отправки.
Constructor Details
#initialize(api_user, api_password, **options) ⇒ Client
Конструктор, инициализирующий параметры клиента:
35 36 37 38 39 40 |
# File 'lib/megalabs_sms.rb', line 35 def initialize(api_user, api_password, **) ClientConfig.validate_credentials!(api_user, api_password) = ClientConfig.normalize() ClientConfig.validate_timeouts!() ClientConfig.apply!(self, api_user, api_password, ) end |
Instance Method Details
#build_request(from, to, message) ⇒ Net::HTTP::Post (private)
Создает HTTP-запрос для отправки SMS
114 115 116 117 118 119 120 |
# File 'lib/megalabs_sms.rb', line 114 def build_request(from, to, ) request = Net::HTTP::Post.new(DEFAULT_ENDPOINT) request.basic_auth(@api_user, @api_password) request.content_type = 'application/json' request.body = build_request_body(from, to, ) request end |
#build_request_body(from, to, message) ⇒ String (private)
Создает тело HTTP-запроса для отправки SMS
131 132 133 134 135 136 137 138 139 140 |
# File 'lib/megalabs_sms.rb', line 131 def build_request_body(from, to, ) digits = to.to_s.gsub(/\D/, '') raise ArgumentError, 'to must contain digits' if digits.empty? { from: from, to: digits.to_i, message: }.to_json end |
#handle_stub_response ⇒ Boolean (private)
Обрабатывает эмуляцию ответов
95 96 97 98 99 100 101 102 103 |
# File 'lib/megalabs_sms.rb', line 95 def handle_stub_response if @error_stub log(:warn, 'Stubbed error: SMS not sent') false elsif @success_stub log(:info, 'Stubbed success: SMS would be sent') true end end |
#http_transport ⇒ MegalabsSms::HttpTransport (private)
Возвращает транспорт для HTTP-запросов
187 188 189 190 191 192 193 194 |
# File 'lib/megalabs_sms.rb', line 187 def http_transport @http_transport ||= HttpTransport.new( logger: @logger, log_prefix: method(:log_message), open_timeout: @open_timeout, read_timeout: @read_timeout ) end |
#log(level, message) ⇒ Object (private)
Логирует сообщение, если задан логгер
176 177 178 179 180 |
# File 'lib/megalabs_sms.rb', line 176 def log(level, ) return unless @logger @logger.public_send(level, ()) end |
#log_message(message) ⇒ String
Метод для форматирования сообщений логирования
49 50 51 |
# File 'lib/megalabs_sms.rb', line 49 def () "[MegalabsSms] #{}" end |
#send_request(request) ⇒ Boolean (private)
Отправляет HTTP-запрос
149 150 151 152 153 |
# File 'lib/megalabs_sms.rb', line 149 def send_request(request) success = http_transport.send_request(DEFAULT_ENDPOINT, request) sleep(@sleep_time) if @sleep_time.positive? success end |
#send_sms(from = nil, to = nil, message = nil, **kwargs) ⇒ Boolean
Метод для отправки SMS через сервис Megalabs.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/megalabs_sms.rb', line 63 def send_sms(from = nil, to = nil, = nil, **kwargs) if kwargs.any? raise ArgumentError, 'use either keyword arguments or positional arguments, not both' if from || to || from = kwargs.fetch(:from) to = kwargs.fetch(:to) = kwargs.fetch(:message) end (from, to, ) return handle_stub_response if stub_enabled? request = build_request(from, to, ) send_request(request) end |
#stub_enabled? ⇒ Boolean (private)
Проверяет, включен ли режим эмуляции ответов
86 87 88 |
# File 'lib/megalabs_sms.rb', line 86 def stub_enabled? @error_stub || @success_stub end |
#validate_message_args!(from, to, message) ⇒ Object (private)
Проверяет входные параметры отправки
164 165 166 167 168 |
# File 'lib/megalabs_sms.rb', line 164 def (from, to, ) raise ArgumentError, 'from is required' if from.nil? || from.to_s.strip.empty? raise ArgumentError, 'to is required' if to.nil? || to.to_s.strip.empty? raise ArgumentError, 'message is required' if .nil? || .to_s.strip.empty? end |