1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-09-07 19:35:52 +03:00

Merge pull request #153 from telegram-bot-rb/ruby-3.0

Ruby 3.0 support
Этот коммит содержится в:
Max Melentiev
2021-01-26 08:30:24 +00:00
коммит произвёл GitHub
родитель 036fbd20d5 791c4233ca
Коммит 1c141f782e
15 изменённых файлов: 86 добавлений и 72 удалений

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

@@ -1,3 +1,5 @@
os: linux
dist: xenial
language: ruby language: ruby
cache: bundler cache: bundler
rvm: rvm:
@@ -7,8 +9,13 @@ gemfile:
- gemfiles/rails_61.gemfile - gemfiles/rails_61.gemfile
- gemfiles/rails_60.gemfile - gemfiles/rails_60.gemfile
- gemfiles/rails_52.gemfile - gemfiles/rails_52.gemfile
matrix: jobs:
include: include:
# ruby 3.x
- rvm: 3.0
gemfile: gemfiles/rails_61.gemfile
- rvm: 3.0
gemfile: gemfiles/rails_60.gemfile
# old rails # old rails
- rvm: 2.5 - rvm: 2.5
gemfile: gemfiles/rails_51.gemfile gemfile: gemfiles/rails_51.gemfile
@@ -19,7 +26,5 @@ matrix:
# old rubies # old rubies
- rvm: 2.4 - rvm: 2.4
gemfile: gemfiles/rails_52.gemfile gemfile: gemfiles/rails_52.gemfile
- rvm: 2.3
gemfile: gemfiles/rails_52.gemfile
notifications: notifications:
email: false email: false

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

@@ -1,5 +1,7 @@
# Unreleased # Unreleased
- Ruby 3.0 support. Drop support for Ruby < 2.4.
# 0.15.1 # 0.15.1
- Rails 6.1 support. - Rails 6.1 support.

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

@@ -4,17 +4,17 @@ gemspec
group :development do group :development do
gem 'appraisal', '~> 2.2' gem 'appraisal', '~> 2.2'
gem 'pry', '~> 0.10.1' gem 'pry', '~> 0.13.1'
gem 'pry-byebug', '~> 3.2.0' gem 'pry-byebug', '~> 3.9.0'
gem 'sdoc', '~> 0.4.1' gem 'sdoc', '~> 2.0.3'
gem 'telegram-bot-types', '~> 0.6.2' gem 'telegram-bot-types', '~> 0.6.2'
gem 'rspec', '~> 3.5.0' gem 'rspec', '~> 3.10.0'
gem 'rspec-its', '~> 1.1.0' gem 'rspec-its', '~> 1.3.0'
gem 'rspec-rails', '~> 3.5.0' gem 'rspec-rails', '~> 4.0.2'
gem 'rubocop', '~> 0.52.1' gem 'rubocop', '~> 0.52.1'
gem 'coveralls', '~> 0.8.2', require: false gem 'coveralls', '~> 0.8.23', require: false
end end

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

@@ -7,15 +7,15 @@ gem "railties", "~> 4.2.0"
group :development do group :development do
gem "appraisal", "~> 2.2" gem "appraisal", "~> 2.2"
gem "pry", "~> 0.10.1" gem "pry", "~> 0.13.1"
gem "pry-byebug", "~> 3.2.0" gem "pry-byebug", "~> 3.9.0"
gem "sdoc", "~> 0.4.1" gem "sdoc", "~> 2.0.3"
gem "telegram-bot-types", "~> 0.6.2" gem "telegram-bot-types", "~> 0.6.2"
gem "rspec", "~> 3.5.0" gem "rspec", "~> 3.10.0"
gem "rspec-its", "~> 1.1.0" gem "rspec-its", "~> 1.3.0"
gem "rspec-rails", "~> 3.5.0" gem "rspec-rails", "~> 4.0.2"
gem "rubocop", "~> 0.52.1" gem "rubocop", "~> 0.52.1"
gem "coveralls", "~> 0.8.2", require: false gem "coveralls", "~> 0.8.23", require: false
end end
gemspec path: "../" gemspec path: "../"

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

@@ -7,15 +7,15 @@ gem "railties", "~> 5.0.0"
group :development do group :development do
gem "appraisal", "~> 2.2" gem "appraisal", "~> 2.2"
gem "pry", "~> 0.10.1" gem "pry", "~> 0.13.1"
gem "pry-byebug", "~> 3.2.0" gem "pry-byebug", "~> 3.9.0"
gem "sdoc", "~> 0.4.1" gem "sdoc", "~> 2.0.3"
gem "telegram-bot-types", "~> 0.6.2" gem "telegram-bot-types", "~> 0.6.2"
gem "rspec", "~> 3.5.0" gem "rspec", "~> 3.10.0"
gem "rspec-its", "~> 1.1.0" gem "rspec-its", "~> 1.3.0"
gem "rspec-rails", "~> 3.5.0" gem "rspec-rails", "~> 4.0.2"
gem "rubocop", "~> 0.52.1" gem "rubocop", "~> 0.52.1"
gem "coveralls", "~> 0.8.2", require: false gem "coveralls", "~> 0.8.23", require: false
end end
gemspec path: "../" gemspec path: "../"

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

@@ -7,15 +7,15 @@ gem "railties", "~> 5.1.0"
group :development do group :development do
gem "appraisal", "~> 2.2" gem "appraisal", "~> 2.2"
gem "pry", "~> 0.10.1" gem "pry", "~> 0.13.1"
gem "pry-byebug", "~> 3.2.0" gem "pry-byebug", "~> 3.9.0"
gem "sdoc", "~> 0.4.1" gem "sdoc", "~> 2.0.3"
gem "telegram-bot-types", "~> 0.6.2" gem "telegram-bot-types", "~> 0.6.2"
gem "rspec", "~> 3.5.0" gem "rspec", "~> 3.10.0"
gem "rspec-its", "~> 1.1.0" gem "rspec-its", "~> 1.3.0"
gem "rspec-rails", "~> 3.5.0" gem "rspec-rails", "~> 4.0.2"
gem "rubocop", "~> 0.52.1" gem "rubocop", "~> 0.52.1"
gem "coveralls", "~> 0.8.2", require: false gem "coveralls", "~> 0.8.23", require: false
end end
gemspec path: "../" gemspec path: "../"

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

@@ -7,15 +7,15 @@ gem "railties", "~> 5.2.0"
group :development do group :development do
gem "appraisal", "~> 2.2" gem "appraisal", "~> 2.2"
gem "pry", "~> 0.10.1" gem "pry", "~> 0.13.1"
gem "pry-byebug", "~> 3.2.0" gem "pry-byebug", "~> 3.9.0"
gem "sdoc", "~> 0.4.1" gem "sdoc", "~> 2.0.3"
gem "telegram-bot-types", "~> 0.6.2" gem "telegram-bot-types", "~> 0.6.2"
gem "rspec", "~> 3.5.0" gem "rspec", "~> 3.10.0"
gem "rspec-its", "~> 1.1.0" gem "rspec-its", "~> 1.3.0"
gem "rspec-rails", "~> 3.5.0" gem "rspec-rails", "~> 4.0.2"
gem "rubocop", "~> 0.52.1" gem "rubocop", "~> 0.52.1"
gem "coveralls", "~> 0.8.2", require: false gem "coveralls", "~> 0.8.23", require: false
end end
gemspec path: "../" gemspec path: "../"

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

@@ -7,15 +7,15 @@ gem "railties", "~> 6.0.0"
group :development do group :development do
gem "appraisal", "~> 2.2" gem "appraisal", "~> 2.2"
gem "pry", "~> 0.10.1" gem "pry", "~> 0.13.1"
gem "pry-byebug", "~> 3.2.0" gem "pry-byebug", "~> 3.9.0"
gem "sdoc", "~> 0.4.1" gem "sdoc", "~> 2.0.3"
gem "telegram-bot-types", "~> 0.6.2" gem "telegram-bot-types", "~> 0.6.2"
gem "rspec", "~> 3.5.0" gem "rspec", "~> 3.10.0"
gem "rspec-its", "~> 1.1.0" gem "rspec-its", "~> 1.3.0"
gem "rspec-rails", "~> 3.5.0" gem "rspec-rails", "~> 4.0.2"
gem "rubocop", "~> 0.52.1" gem "rubocop", "~> 0.52.1"
gem "coveralls", "~> 0.8.2", require: false gem "coveralls", "~> 0.8.23", require: false
end end
gemspec path: "../" gemspec path: "../"

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

@@ -7,15 +7,15 @@ gem "railties", "~> 6.1.0"
group :development do group :development do
gem "appraisal", "~> 2.2" gem "appraisal", "~> 2.2"
gem "pry", "~> 0.10.1" gem "pry", "~> 0.13.1"
gem "pry-byebug", "~> 3.2.0" gem "pry-byebug", "~> 3.9.0"
gem "sdoc", "~> 0.4.1" gem "sdoc", "~> 2.0.3"
gem "telegram-bot-types", "~> 0.6.2" gem "telegram-bot-types", "~> 0.6.2"
gem "rspec", "~> 3.5.0" gem "rspec", "~> 3.10.0"
gem "rspec-its", "~> 1.1.0" gem "rspec-its", "~> 1.3.0"
gem "rspec-rails", "~> 3.5.0" gem "rspec-rails", "~> 4.0.2"
gem "rubocop", "~> 0.52.1" gem "rubocop", "~> 0.52.1"
gem "coveralls", "~> 0.8.2", require: false gem "coveralls", "~> 0.8.23", require: false
end end
gemspec path: "../" gemspec path: "../"

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

@@ -5,11 +5,11 @@ module Telegram
attr_reader :requests attr_reader :requests
module StubbedConstructor module StubbedConstructor
def new(*args) def new(*args, **kwargs)
if self == ClientStub || !ClientStub.stub_all? if self == ClientStub || !ClientStub.stub_all?
super super
else else
ClientStub.new(*args) ClientStub.new(*args, **kwargs)
end end
end end
end end

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

@@ -1,4 +1,4 @@
RSpec.shared_examples 'async' do |request_args: -> {}| RSpec.shared_examples 'async' do |request_args:|
let(:instance) { described_class.new(token: token, id: id, async: async) } let(:instance) { described_class.new(token: token, id: id, async: async) }
let(:id) { :default_bot } let(:id) { :default_bot }
let(:async) { true } let(:async) { true }
@@ -103,7 +103,7 @@ RSpec.shared_examples 'async' do |request_args: -> {}|
end end
describe '#request' do describe '#request' do
subject { ->(*args) { instance.request(*(args.empty? ? self.args : args)) } } subject { ->(*args) { instance.request(*args) } }
let(:args, &request_args) let(:args, &request_args)
let(:result) { double(:result) } let(:result) { double(:result) }
@@ -112,7 +112,7 @@ RSpec.shared_examples 'async' do |request_args: -> {}|
expect(instance).to_not receive(:http_request) expect(instance).to_not receive(:http_request)
expect(described_class).to receive(:prepare_async_args).with(*args) { args } expect(described_class).to receive(:prepare_async_args).with(*args) { args }
expect(instance.async).to receive(:perform_later).with(id.to_s, *args) { result } expect(instance.async).to receive(:perform_later).with(id.to_s, *args) { result }
expect(subject.call).to eq result expect(subject.call(*args)).to eq result
end end
end end
@@ -131,12 +131,11 @@ RSpec.shared_examples 'async' do |request_args: -> {}|
context 'when async is disabled' do context 'when async is disabled' do
let(:async) { false } let(:async) { false }
let(:result) { double(status: 200, body: '{"test":"ok"}') } let(:result) { double(status: 200, body: '{"test":"ok"}') }
let(:args, &request_args)
it 'performs request immediately' do it 'performs request immediately' do
expect(instance).to receive(:request).with(*args).and_call_original expect(instance).to receive(:request).with(*args).and_call_original
expect(instance).to receive(:http_request) { result } expect(instance).to receive(:http_request) { result }
expect(subject[]).to eq 'test' => 'ok' expect(subject.call(*args)).to eq 'test' => 'ok'
end end
end end
end end

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

@@ -14,7 +14,10 @@ RSpec.describe Telegram::Bot::Client do
let(:input) { token } let(:input) { token }
it 'treats string as token' do it 'treats string as token' do
expect(described_class).to receive(:new).with(token, {}) { result } expect(described_class).to receive(:new) do |*args, **kwargs|
expect([*args, kwargs]).to eq([token, {}]) # not using .with to support ruby 2.x and 3.x
result
end
should eq result should eq result
end end
@@ -94,7 +97,9 @@ RSpec.describe Telegram::Bot::Client do
end end
describe '.new' do describe '.new' do
subject { described_class.new(*args) } subject { described_class.new(*args, **kwargs) }
let(:args) { [] }
let(:kwargs) { {} }
let(:token) { 'secret' } let(:token) { 'secret' }
let(:username) { 'superbot' } let(:username) { 'superbot' }
@@ -106,7 +111,7 @@ RSpec.describe Telegram::Bot::Client do
end end
context 'when hash is given' do context 'when hash is given' do
let(:args) { [token: 'secret', username: 'superbot'] } let(:kwargs) { {token: 'secret', username: 'superbot'} }
its(:token) { should eq token } its(:token) { should eq token }
its(:username) { should eq username } its(:username) { should eq username }
its(:base_uri) { should eq "#{described_class::SERVER}/bot#{token}/" } its(:base_uri) { should eq "#{described_class::SERVER}/bot#{token}/" }
@@ -114,11 +119,12 @@ RSpec.describe Telegram::Bot::Client do
context 'with custom server' do context 'with custom server' do
let(:server) { 'http://my.server' } let(:server) { 'http://my.server' }
let(:args) { [token, username, server: server] } let(:args) { [token, username] }
let(:kwargs) { {server: server} }
its(:base_uri) { should eq "#{server}/bot#{token}/" } its(:base_uri) { should eq "#{server}/bot#{token}/" }
context 'and hash options' do context 'and hash options' do
let(:args) { [token: token, username: username, server: server] } let(:kwargs) { {token: token, username: username, server: server} }
its(:base_uri) { should eq "#{server}/bot#{token}/" } its(:base_uri) { should eq "#{server}/bot#{token}/" }
end end
end end

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

@@ -37,11 +37,13 @@ RSpec.describe Telegram::Bot::ClientStub do
end end
describe '#new' do describe '#new' do
subject { described_class.new(*args) } subject { described_class.new(*args, **kwargs) }
let(:args) { [] }
let(:kwargs) { {} }
context 'when only username is given' do context 'when only username is given' do
let(:args) { 'superbot' } let(:args) { ['superbot'] }
its(:username) { should eq args } its(:username) { should eq args[0] }
end end
context 'when username and token are given' do context 'when username and token are given' do
@@ -51,9 +53,9 @@ RSpec.describe Telegram::Bot::ClientStub do
end end
context 'when hash config is given' do context 'when hash config is given' do
let(:args) { [token: 'token', username: 'superbot'] } let(:kwargs) { {token: 'token', username: 'superbot'} }
its(:token) { should eq args[0][:token] } its(:token) { should eq kwargs[:token] }
its(:username) { should eq args[0][:username] } its(:username) { should eq kwargs[:username] }
end end
end end
end end

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

@@ -41,7 +41,7 @@ RSpec.describe Telegram::Bot::RoutesHelper do
end end
describe '#telegram_webhook' do describe '#telegram_webhook' do
subject { ->(*args) { mapper.telegram_webhook(*args) } } subject { ->(*args, **kwargs) { mapper.telegram_webhook(*args, **kwargs) } }
let(:mapper) { double(:mapper).tap { |x| x.extend described_class } } let(:mapper) { double(:mapper).tap { |x| x.extend described_class } }
let(:controller) { double(:controller, name: :controller) } let(:controller) { double(:controller, name: :controller) }
before { allow(Telegram).to receive(:bots) { bots } } before { allow(Telegram).to receive(:bots) { bots } }

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

@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ['lib'] spec.require_paths = ['lib']
spec.required_ruby_version = '~> 2.0' spec.required_ruby_version = '>= 2.4'
spec.add_dependency 'actionpack', '>= 4.0', '< 6.2' spec.add_dependency 'actionpack', '>= 4.0', '< 6.2'
spec.add_dependency 'activesupport', '>= 4.0', '< 6.2' spec.add_dependency 'activesupport', '>= 4.0', '< 6.2'