1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-08-28 15:26:18 +03:00

Allow use different sessions for MessageContext

Этот коммит содержится в:
Max Melentiev
2017-10-06 11:10:05 +03:00
родитель e529a79339
Коммит 7e41bd4f9b

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

@@ -7,14 +7,11 @@ module Telegram
include Session
included do
# As we use before_action context is cleared anyway,
# no matter we used it or not.
singleton_class.send :attr_reader, :context_handlers, :context_to_action
@context_handlers = {}
end
module ClassMethods
def context_handlers
@_context_handlers ||= {}
end
# Registers handler for context.
#
# context_handler :rename do |*|
@@ -39,6 +36,8 @@ module Telegram
context_handlers[context] = action || context
end
attr_reader :context_to_action
# Use it to use context value as action name for all contexts
# which miss handlers.
# For security reasons it supports only action methods and will
@@ -59,10 +58,16 @@ module Telegram
# according to previous request.
attr_reader :context
# Controller may have multiple sessions, let it be possible
# to select session for message context.
def message_context_session
session
end
# Fetches context and finds handler for it. If message has new command,
# it has higher priority than contextual action.
def action_for_message
val = session.delete(:context)
val = message_context_session.delete(:context)
@context = val && val.to_sym
super || context && begin
handler = handler_for_context
@@ -72,7 +77,7 @@ module Telegram
# Save context for the next request.
def save_context(context)
session[:context] = context
message_context_session[:context] = context
end
def handler_for_context