Class: MegalabsSms::Client
- Inherits:
-
Object
- Object
- MegalabsSms::Client
- Defined in:
- lib/megalabs_sms.rb
Overview
Класс для взаимодействия с API Megalabs для отправки SMS
Instance Method Summary collapse
-
#build_request(from, to, message) ⇒ Net::HTTP::Post
private
Создает HTTP-запрос для отправки SMS.
-
#build_request_body(from, to, message) ⇒ Net::HTTP::Post
private
Создает HTTP-запрос для отправки SMS.
-
#handle_stub_response ⇒ Boolean
private
Обрабатывает эмуляцию ответов.
-
#initialize(api_user, api_password, sleep_time: 0, success_stub: false, error_stub: false) ⇒ Client
constructor
Конструктор, инициализирующий параметры клиента:.
-
#log_message(message) ⇒ String
Метод для форматирования сообщений логирования.
-
#perform_http_request(uri, request) ⇒ Boolean
private
Выполняет HTTP-запрос.
-
#process_http_response(raw_body) ⇒ Boolean
private
Обрабатывает тело ответа HTTP и возвращает корректное сообщение.
-
#send_request(request) ⇒ Boolean
private
Отправляет HTTP-запрос.
-
#send_sms(from, to, message) ⇒ Boolean
Метод для отправки SMS через сервис Megalabs.
-
#stub_enabled? ⇒ Boolean
private
Проверяет, включен ли режим эмуляции ответов.
Constructor Details
#initialize(api_user, api_password, sleep_time: 0, success_stub: false, error_stub: false) ⇒ Client
Конструктор, инициализирующий параметры клиента:
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/megalabs_sms.rb', line 24 def initialize(api_user, api_password, sleep_time: 0, success_stub: false, error_stub: false) raise ArgumentError, 'api_user is required' if api_user.nil? || api_user.strip.empty? raise ArgumentError, 'api_password is required' if api_password.nil? || api_password.strip.empty? @api_user = api_user @api_password = api_password @sleep_time = sleep_time @success_stub = success_stub @error_stub = error_stub end |
Instance Method Details
#build_request(from, to, message) ⇒ Net::HTTP::Post (private)
Создает HTTP-запрос для отправки SMS
101 102 103 104 105 106 107 108 |
# File 'lib/megalabs_sms.rb', line 101 def build_request(from, to, ) uri = URI('https://a2p-api.megalabs.ru/sms/v1/sms') request = Net::HTTP::Post.new(uri) 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) ⇒ Net::HTTP::Post (private)
Создает HTTP-запрос для отправки SMS
119 120 121 122 123 124 125 |
# File 'lib/megalabs_sms.rb', line 119 def build_request_body(from, to, ) { from: from, to: to.gsub(/\D/, '').to_i, message: }.to_json end |
#handle_stub_response ⇒ Boolean (private)
Обрабатывает эмуляцию ответов
82 83 84 85 86 87 88 89 90 |
# File 'lib/megalabs_sms.rb', line 82 def handle_stub_response if @error_stub ('Stubbed error: SMS not sent') false elsif @success_stub ('Stubbed success: SMS would be sent') true end end |
#log_message(message) ⇒ String
Метод для форматирования сообщений логирования
46 47 48 |
# File 'lib/megalabs_sms.rb', line 46 def () "[MegalabsSms] #{}" end |
#perform_http_request(uri, request) ⇒ Boolean (private)
Выполняет HTTP-запрос
149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/megalabs_sms.rb', line 149 def perform_http_request(uri, request) response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http| http.request(request) end if response.is_a?(Net::HTTPSuccess) process_http_response(response.body) else ("Failed to send: #{response}") && false end rescue StandardError => e ("Exception occurred: #{e.}") false end |
#process_http_response(raw_body) ⇒ Boolean (private)
Обрабатывает тело ответа HTTP и возвращает корректное сообщение. Если статус ответа не соответствует ожидаемому, возвращает сообщение об ошибке.
172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/megalabs_sms.rb', line 172 def process_http_response(raw_body) body = raw_body.dup.force_encoding('UTF-8') parsed = JSON.parse(body) result = parsed.dig('result', 'status') success = result&.fetch('code', nil)&.zero? && result&.fetch('description', '')&.downcase == 'ok' if success ("Successfully sent: #{body}") && true else ("Failed to send: #{body}") && false end rescue JSON::ParserError => e ("Failed to parse JSON: #{e.}") false end |
#send_request(request) ⇒ Boolean (private)
Отправляет HTTP-запрос
134 135 136 137 138 139 |
# File 'lib/megalabs_sms.rb', line 134 def send_request(request) uri = URI('https://a2p-api.megalabs.ru/sms/v1/sms') success = perform_http_request(uri, request) sleep(@sleep_time) if @sleep_time.positive? success end |
#send_sms(from, to, message) ⇒ Boolean
Метод для отправки SMS через сервис Megalabs.
59 60 61 62 63 64 |
# File 'lib/megalabs_sms.rb', line 59 def send_sms(from, to, ) return handle_stub_response if stub_enabled? request = build_request(from, to, ) send_request(request) end |
#stub_enabled? ⇒ Boolean (private)
Проверяет, включен ли режим эмуляции ответов
73 74 75 |
# File 'lib/megalabs_sms.rb', line 73 def stub_enabled? @error_stub || @success_stub end |