1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-08-28 15:26:18 +03:00
Этот коммит содержится в:
Max Melentiev
2018-01-05 13:18:48 +03:00
родитель 70a1ed8a8f
Коммит 45e8a7283f
5 изменённых файлов: 60 добавлений и 2 удалений

Просмотреть файл

@@ -1,5 +1,7 @@
# Unreleased
- `rescue_from`.
# 0.12.4
- Fix spec helpers for callback queries.

Просмотреть файл

@@ -130,6 +130,9 @@ can represent actions as separate methods keeping source much more readable and
New instance of controller is instantiated for each update.
This way every update is processed in isolation from others.
Bot controllers like usual rails controllers provides features like callbacks,
`rescue_from` and instrumentation.
```ruby
class Telegram::WebhookController < Telegram::Bot::UpdatesController
# use callbacks like in any other controllers
@@ -331,7 +334,7 @@ end
# And this one is for `make_cool:%{something}`
def make_cool_callback_query(thing = nil, *)
do_it(thing)
answer_callback_query("#{thing} is cool now! Like a callback query context.")
answer_callback_query("#{thing} is cool now! Like a callback query context.")
end
```
@@ -360,7 +363,7 @@ There are several options to run it automatically:
- Use poller (described in the next section).
To run action without update (ex., send notifications from jobs),
you can call `#process` directly. In this case controller can be initialized
you can call `#process` directly. In this case controller can be initialized
with `:from` and/or `:chat` options instead of `update` object:
```ruby

Просмотреть файл

@@ -57,6 +57,7 @@ module Telegram
instrumentation
log_subscriber
reply_helpers
rescue
session
].each { |file| require "telegram/bot/updates_controller/#{file}" }
@@ -78,6 +79,7 @@ module Telegram
end
include AbstractController::Translation
include Rescue
include ReplyHelpers
prepend Instrumentation
extend Session::ConfigMethods

Просмотреть файл

@@ -0,0 +1,20 @@
require 'active_support/rescuable'
module Telegram
module Bot
class UpdatesController
module Rescue
extend ActiveSupport::Concern
include ActiveSupport::Rescuable
private
def process_action(*)
super
rescue Exception => exception # rubocop:disable RescueException
rescue_with_handler(exception) || raise
end
end
end
end
end

Просмотреть файл

@@ -0,0 +1,31 @@
RSpec.describe Telegram::Bot::UpdatesController::Rescue do
include_context 'telegram/bot/updates_controller'
describe '#process_action' do
subject { -> { dispatch_message("/#{command} x y z") } }
let(:controller_class) do
Class.new(Telegram::Bot::UpdatesController) do
rescue_from ArgumentError, with: -> { respond_with :message, text: 'Rescued' }
def rescuable(*)
raise ArgumentError, 'rescuable'
end
def not_rescuable(*)
raise 'not_rescuable'
end
end
end
context 'when exception is rescued' do
let(:command) { :rescuable }
it { should respond_with_message 'Rescued' }
end
context 'when exception is not rescued' do
let(:command) { :not_rescuable }
it { should raise_error('not_rescuable') }
end
end
end