зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-09-07 11:25:52 +03:00
Drop Initializer module
It was required for Botan support.
Этот коммит содержится в:
@@ -25,7 +25,6 @@ module Telegram
|
|||||||
autoload :Client, 'telegram/bot/client'
|
autoload :Client, 'telegram/bot/client'
|
||||||
autoload :ClientStub, 'telegram/bot/client_stub'
|
autoload :ClientStub, 'telegram/bot/client_stub'
|
||||||
autoload :DebugClient, 'telegram/bot/debug_client'
|
autoload :DebugClient, 'telegram/bot/debug_client'
|
||||||
autoload :Initializers, 'telegram/bot/initializers'
|
|
||||||
autoload :Middleware, 'telegram/bot/middleware'
|
autoload :Middleware, 'telegram/bot/middleware'
|
||||||
autoload :RSpec, 'telegram/bot/rspec'
|
autoload :RSpec, 'telegram/bot/rspec'
|
||||||
autoload :Tasks, 'telegram/bot/tasks'
|
autoload :Tasks, 'telegram/bot/tasks'
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
require 'active_support/core_ext/hash/keys'
|
||||||
require 'json'
|
require 'json'
|
||||||
require 'httpclient'
|
require 'httpclient'
|
||||||
|
|
||||||
@@ -7,7 +8,6 @@ module Telegram
|
|||||||
URL_TEMPLATE = 'https://api.telegram.org/bot%<token>s/'.freeze
|
URL_TEMPLATE = 'https://api.telegram.org/bot%<token>s/'.freeze
|
||||||
|
|
||||||
autoload :TypedResponse, 'telegram/bot/client/typed_response'
|
autoload :TypedResponse, 'telegram/bot/client/typed_response'
|
||||||
extend Initializers
|
|
||||||
prepend Async
|
prepend Async
|
||||||
include DebugClient
|
include DebugClient
|
||||||
|
|
||||||
@@ -15,6 +15,16 @@ module Telegram
|
|||||||
include ApiHelper
|
include ApiHelper
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
# Accepts different options to initialize bot.
|
||||||
|
def wrap(input, **options)
|
||||||
|
case input
|
||||||
|
when Symbol then by_id(input) or raise "#{name} #{input.inspect} not configured"
|
||||||
|
when self then input
|
||||||
|
when Hash then new(**input.symbolize_keys, **options)
|
||||||
|
else new(input, **options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def by_id(id)
|
def by_id(id)
|
||||||
Telegram.bots[id]
|
Telegram.bots[id]
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
require 'active_support/core_ext/hash/keys'
|
|
||||||
|
|
||||||
module Telegram
|
|
||||||
module Bot
|
|
||||||
module Initializers
|
|
||||||
# Accepts different options to initialize bot.
|
|
||||||
def wrap(input, **options)
|
|
||||||
case input
|
|
||||||
when Symbol then by_id(input) or raise "#{name} #{input.inspect} not configured"
|
|
||||||
when self then input
|
|
||||||
when Hash then new(**input.symbolize_keys, **options)
|
|
||||||
else new(input, **options)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def by_id(_id)
|
|
||||||
raise 'Not implemented'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
RSpec.shared_examples 'initializers' do |config_method = :bots|
|
|
||||||
describe '.wrap' do
|
|
||||||
subject { described_class.wrap(input, **options) }
|
|
||||||
let(:options) { {} }
|
|
||||||
let(:result) { double(:result) }
|
|
||||||
let(:username) { 'username' }
|
|
||||||
|
|
||||||
context 'when input is a string' do
|
|
||||||
let(:input) { token }
|
|
||||||
|
|
||||||
it 'treats string as token' do
|
|
||||||
expect(described_class).to receive(:new).with(token, {}) { result }
|
|
||||||
should eq result
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'and additional options are given' do
|
|
||||||
let(:options) { {id: :test} }
|
|
||||||
|
|
||||||
it 'passes them to initializer' do
|
|
||||||
expect(described_class).to receive(:new).with(input, **options) { result }
|
|
||||||
should eq result
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when input is a hash' do
|
|
||||||
let(:input) { {token: token, 'username' => username, other: :options} }
|
|
||||||
|
|
||||||
it 'passes it with symbolized keys' do
|
|
||||||
expect(described_class).to receive(:new).with(**input.symbolize_keys) { result }
|
|
||||||
should eq result
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'and additional options are given' do
|
|
||||||
let(:options) { {id: :test} }
|
|
||||||
|
|
||||||
it 'passes them to initializer' do
|
|
||||||
expect(described_class).to receive(:new).
|
|
||||||
with(**input.symbolize_keys, **options) { result }
|
|
||||||
should eq result
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when input is an instance of described_class' do
|
|
||||||
let!(:input) { instance }
|
|
||||||
|
|
||||||
it 'returns input' do
|
|
||||||
expect(described_class).to_not receive(:new)
|
|
||||||
should eq input
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when input is a Symbol' do
|
|
||||||
let(:input) { :client_1 }
|
|
||||||
before { allow(Telegram).to receive(config_method) { {client_1: instance} } }
|
|
||||||
it { should eq Telegram.send(config_method)[:client_1] }
|
|
||||||
|
|
||||||
context 'and there is no such bot' do
|
|
||||||
let(:input) { :invalid }
|
|
||||||
it { expect { subject }.to raise_error(/not configured/) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -2,9 +2,72 @@ RSpec.describe Telegram::Bot::Client do
|
|||||||
let(:instance) { described_class.new 'token' }
|
let(:instance) { described_class.new 'token' }
|
||||||
let(:token) { 'token' }
|
let(:token) { 'token' }
|
||||||
|
|
||||||
include_examples 'initializers'
|
|
||||||
it_behaves_like 'async', request_args: -> { [double(:action), {body: :content}] }
|
it_behaves_like 'async', request_args: -> { [double(:action), {body: :content}] }
|
||||||
|
|
||||||
|
describe '.wrap' do
|
||||||
|
subject { described_class.wrap(input, **options) }
|
||||||
|
let(:options) { {} }
|
||||||
|
let(:result) { double(:result) }
|
||||||
|
let(:username) { 'username' }
|
||||||
|
|
||||||
|
context 'when input is a string' do
|
||||||
|
let(:input) { token }
|
||||||
|
|
||||||
|
it 'treats string as token' do
|
||||||
|
expect(described_class).to receive(:new).with(token, {}) { result }
|
||||||
|
should eq result
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and additional options are given' do
|
||||||
|
let(:options) { {id: :test} }
|
||||||
|
|
||||||
|
it 'passes them to initializer' do
|
||||||
|
expect(described_class).to receive(:new).with(input, **options) { result }
|
||||||
|
should eq result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when input is a hash' do
|
||||||
|
let(:input) { {token: token, 'username' => username, other: :options} }
|
||||||
|
|
||||||
|
it 'passes it with symbolized keys' do
|
||||||
|
expect(described_class).to receive(:new).with(**input.symbolize_keys) { result }
|
||||||
|
should eq result
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and additional options are given' do
|
||||||
|
let(:options) { {id: :test} }
|
||||||
|
|
||||||
|
it 'passes them to initializer' do
|
||||||
|
expect(described_class).to receive(:new).
|
||||||
|
with(**input.symbolize_keys, **options) { result }
|
||||||
|
should eq result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when input is an instance of described_class' do
|
||||||
|
let!(:input) { instance }
|
||||||
|
|
||||||
|
it 'returns input' do
|
||||||
|
expect(described_class).to_not receive(:new)
|
||||||
|
should eq input
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when input is a Symbol' do
|
||||||
|
let(:input) { :client_1 }
|
||||||
|
before { allow(Telegram).to receive(:bots) { {client_1: instance} } }
|
||||||
|
it { should eq Telegram.bots[:client_1] }
|
||||||
|
|
||||||
|
context 'and there is no such bot' do
|
||||||
|
let(:input) { :invalid }
|
||||||
|
it { expect { subject }.to raise_error(/not configured/) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '.prepare_body' do
|
describe '.prepare_body' do
|
||||||
subject { described_class.prepare_body(input) }
|
subject { described_class.prepare_body(input) }
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user