lib/telegram/bot/api.rb in telegram-bot-ruby-0.2.0 vs lib/telegram/bot/api.rb in telegram-bot-ruby-0.2.1

- old
+ new

@@ -6,10 +6,15 @@ ENDPOINTS = %w( getMe sendMessage forwardMessage sendPhoto sendAudio sendDocument sendSticker sendVideo sendLocation sendChatAction getUserProfilePhotos getUpdates setWebhook ).freeze + REPLY_MARKUP_TYPES = [ + Telegram::Bot::Types::ReplyKeyboardMarkup, + Telegram::Bot::Types::ReplyKeyboardHide, + Telegram::Bot::Types::ForceReply + ].freeze attr_reader :token base_uri 'https://api.telegram.org' persistent_connection_adapter @@ -20,11 +25,30 @@ def method_missing(method_name, *args, &block) ENDPOINTS.include?(method_name.to_s) ? call(method_name, *args) : super end - def call(endpoint, params = {}) - self.class.get("/bot#{token}/#{endpoint}", query: params).to_h + def call(endpoint, raw_params = {}) + params = build_params(raw_params) + response = self.class.get("/bot#{token}/#{endpoint}", query: params) + response.code == 200 ? response.to_h : {} + end + + private + + def build_params(h) + h.each_with_object({}) do |(key, value), params| + params[key] = sanitize_value(value) + end + end + + def sanitize_value(value) + jsonify_reply_markup(value) + end + + def jsonify_reply_markup(value) + return value unless REPLY_MARKUP_TYPES.include?(value.class) + value.to_h.to_json end end end end