class EurekaBot::Tg::Client
Attributes
token[R]
url[R]
Public Class Methods
new(token:, url: 'https://api.telegram.org')
click to toggle source
# File lib/eureka_bot/tg/client.rb, line 8 def initialize(token:, url: 'https://api.telegram.org') @url = url @token = token end
Public Instance Methods
extract_result(response)
click to toggle source
# File lib/eureka_bot/tg/client.rb, line 22 def extract_result(response) if response['ok'] response['result'] else raise EurekaBot::Tg::Client::Error.new(error_code: response['error_code'], description: response['description']) end end
get_file_url(file_id)
click to toggle source
# File lib/eureka_bot/tg/client.rb, line 13 def get_file_url(file_id) file_path = make_request('getFile', payload: {file_id: file_id}.to_json)['file_path'] [url, '/file', '/bot', token, '/', file_path].join end
make_request(route, method: :get, **rest)
click to toggle source
# File lib/eureka_bot/tg/client.rb, line 30 def make_request(route, method: :get, **rest) full_route = Array.wrap(route).join('/') instrument 'eureka-bot.tg.request', route: full_route, method: method, rest: JSON.generate(rest) do res = resource[full_route] options = rest.clone payload = options.delete(:payload) headers = (res.options[:headers] || {}).merge(options) request = options.merge( method: method, url: res.url, headers: headers ) request[:payload] = payload if payload if request[:payload].is_a?(Hash) request[:headers].delete('Content-Type') request[:multipart] = true end response = nil begin response = parse_response( RestClient::Request.execute(request).body ) rescue RestClient::Exception => e EurekaBot.exception_handler(e, e.class, custom_params: {error: e, http_code: e.http_code, http_body: e.http_body}.to_json) response = parse_response(e.http_body) end if response instrument 'eureka-bot.tg.response', response: response extract_result(response) end end end
parse_response(response)
click to toggle source
# File lib/eureka_bot/tg/client.rb, line 18 def parse_response(response) ActiveSupport::JSON.decode(response) if response.present? end
resource()
click to toggle source
# File lib/eureka_bot/tg/client.rb, line 70 def resource @resource ||= RestClient::Resource.new( [ url, ['bot', token].join ].to_param, headers: { 'Content-Type' => 'application/JSON' }, logger: EurekaBot.logger, timeout: 30 ) end