зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-09-07 19:35:52 +03:00
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
- Extracted typed response mappings to telegram-bot-types gem.
|
- Extracted typed response mappings to telegram-bot-types gem.
|
||||||
It now provides definitions for all API v3.5 methods.
|
It now provides definitions for all API v3.5 methods.
|
||||||
|
- Fix #chat for non-message updates with TypedUpdates enabled
|
||||||
|
|
||||||
# 0.13.0
|
# 0.13.0
|
||||||
|
|
||||||
|
|||||||
@@ -157,7 +157,14 @@ module Telegram
|
|||||||
#
|
#
|
||||||
# Can be overriden with `chat` option for #initialize.
|
# Can be overriden with `chat` option for #initialize.
|
||||||
def chat
|
def chat
|
||||||
@_chat ||= payload.try! { |x| x['chat'] || x['message'] && x['message']['chat'] }
|
@_chat ||=
|
||||||
|
if payload
|
||||||
|
if payload.is_a?(Hash)
|
||||||
|
payload['chat'] || payload['message'] && payload['message']['chat']
|
||||||
|
else
|
||||||
|
payload.try(:chat) || payload.try(:message).try!(:chat)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Accessor to `'from'` field of payload. Can be overriden with `from` option
|
# Accessor to `'from'` field of payload. Can be overriden with `from` option
|
||||||
|
|||||||
@@ -9,17 +9,40 @@ RSpec.describe Telegram::Bot::UpdatesController::TypedUpdate do
|
|||||||
|
|
||||||
context 'when `update` is a virtus model' do
|
context 'when `update` is a virtus model' do
|
||||||
subject { controller }
|
subject { controller }
|
||||||
%w[
|
unique_types = Telegram::Bot::UpdatesController::PAYLOAD_TYPES - %w[
|
||||||
message
|
edited_message
|
||||||
inline_query
|
channel_post
|
||||||
chosen_inline_result
|
edited_channel_post
|
||||||
].each do |type|
|
]
|
||||||
|
unique_types.each do |type|
|
||||||
context "with #{type}" do
|
context "with #{type}" do
|
||||||
type_class = Telegram::Bot::Types.const_get(type.camelize)
|
type_class = Telegram::Bot::Types.const_get(type.camelize)
|
||||||
let(:payload_type) { type }
|
let(:payload_type) { type }
|
||||||
let(:payload) { {} }
|
let(:payload) do
|
||||||
|
{}.tap do |result|
|
||||||
|
result[:chat] = chat if type_class.instance_methods.include?(:chat)
|
||||||
|
result[:from] = from if type_class.instance_methods.include?(:from)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
let(:chat) { {id: 'chat_id'} }
|
||||||
|
let(:from) { {id: 'from_id'} }
|
||||||
its(:payload_type) { should eq payload_type }
|
its(:payload_type) { should eq payload_type }
|
||||||
its(:payload) { should be_instance_of type_class }
|
its(:payload) { should be_instance_of type_class }
|
||||||
|
|
||||||
|
if type_class.instance_methods.include?(:chat)
|
||||||
|
# Virtus does not support ==. :(
|
||||||
|
its(:chat) { should be_instance_of Telegram::Bot::Types::Chat }
|
||||||
|
its('chat.to_hash') { should include chat }
|
||||||
|
else
|
||||||
|
its(:chat) { should eq nil }
|
||||||
|
end
|
||||||
|
|
||||||
|
if type_class.instance_methods.include?(:from)
|
||||||
|
its(:from) { should be_instance_of Telegram::Bot::Types::User }
|
||||||
|
its('from.to_hash') { should include from }
|
||||||
|
else
|
||||||
|
its(:from) { should eq nil }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user