telegram-bot 0.12.4 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c1e4241ed0e42a58308758e38cd7aba2f377b518
4
- data.tar.gz: 2433f93912e2ed5656ddcb2fec42e09652f73458
3
+ metadata.gz: fd54d434c70a78a128767db94de31a6fbf07ca11
4
+ data.tar.gz: 669957947937536ba2257af7362d97c75e82a236
5
5
  SHA512:
6
- metadata.gz: ea6b59982b236a96a24d90778ee2055a9cd50088d17b7fbc764e89cf6794a53bdb5df4b99204123ff54b1a27e8f298d86e1d9d5d43950ee3544e01a3ac200c03
7
- data.tar.gz: 3c451c937b2b79da1fb66745be8041b29c32f05b3ab97bb6c37a18d9ad2e2853e0c33d925c5b29040ab13b73f85ce1ff8176ebf26cae3c412579355d64331698
6
+ metadata.gz: abaa6ac4240292eb5200fca36b3fc30e9e30a9232a4694cf797ef3754eb8240c728203718b6a29bf8b29792b0e9312b93bfbccc5682cfaef250a12ec95e6e9e6
7
+ data.tar.gz: 77715ec8f7cc3f2f9752d1ab3faa821dbbbaf748f8c90dcc450c351e8786150301c84e1d78c87f2ae974b5413e12a49c5617fdec737d5864837ba0cc3fb1ad3a
@@ -0,0 +1,8 @@
1
+ checks:
2
+ method-complexity:
3
+ config:
4
+ threshold: 6 # should be just fine
5
+
6
+ plugins:
7
+ rubocop:
8
+ enabled: true
@@ -1,3 +1,6 @@
1
+ # Rubocop does not support 2.0
2
+ Gemspec/RequiredRubyVersion: {Enabled: false}
3
+
1
4
  Rails: {Enabled: true}
2
5
 
3
6
  Layout/AlignParameters:
@@ -1,10 +1,17 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
- - 2.2.3
4
+ - 2.5
5
+ - 2.4
6
+ - 2.3
5
7
  gemfile:
6
- - gemfiles/rails_42.gemfile
7
- - gemfiles/rails_50.gemfile
8
+ - gemfiles/rails_52.gemfile
8
9
  - gemfiles/rails_51.gemfile
10
+ - gemfiles/rails_50.gemfile
11
+ - gemfiles/rails_42.gemfile
9
12
  notifications:
10
13
  email: false
14
+
15
+ # for 2.5.0 until 2.5.1 is released: https://github.com/travis-ci/travis-ci/issues/8978
16
+ before_install:
17
+ - gem update --system
data/Appraisals CHANGED
@@ -1,3 +1,8 @@
1
+ appraise 'rails-52' do
2
+ gem 'actionpack', '~> 5.2.0.beta2'
3
+ gem 'railties', '~> 5.2.0.beta2'
4
+ end
5
+
1
6
  appraise 'rails-51' do
2
7
  gem 'actionpack', '~> 5.1'
3
8
  gem 'railties', '~> 5.1'
@@ -1,5 +1,12 @@
1
1
  # Unreleased
2
2
 
3
+ # 0.13.0
4
+
5
+ - `rescue_from`.
6
+ - Support for `credentials` store in Rails 5.2.
7
+ - Deprecate `telegram_webhooks` in favor of `telegram_webhook`.
8
+ It was too complicated and such routes looked ugly.
9
+
3
10
  # 0.12.4
4
11
 
5
12
  - Fix spec helpers for callback queries.
data/Gemfile CHANGED
@@ -14,7 +14,7 @@ group :development do
14
14
  gem 'rspec-its', '~> 1.1.0'
15
15
  gem 'rspec-rails', '~> 3.5.0'
16
16
 
17
- gem 'rubocop', '~> 0.51.0'
17
+ gem 'rubocop', '~> 0.52.1'
18
18
 
19
19
  gem 'coveralls', '~> 0.8.2', require: false
20
20
  end
data/README.md CHANGED
@@ -130,6 +130,9 @@ can represent actions as separate methods keeping source much more readable and
130
130
  New instance of controller is instantiated for each update.
131
131
  This way every update is processed in isolation from others.
132
132
 
133
+ Bot controllers like usual rails controllers provides features like callbacks,
134
+ `rescue_from` and instrumentation.
135
+
133
136
  ```ruby
134
137
  class Telegram::WebhookController < Telegram::Bot::UpdatesController
135
138
  # use callbacks like in any other controllers
@@ -325,29 +328,37 @@ Callback queries without prefix stay untouched.
325
328
  # This one handles `set_value:%{something}`.
326
329
  def set_value_callback_query(new_value = nil, *)
327
330
  save_this(value)
328
- answer_callback_query('Saved!)
331
+ answer_callback_query('Saved!')
329
332
  end
330
333
 
331
334
  # And this one is for `make_cool:%{something}`
332
335
  def make_cool_callback_query(thing = nil, *)
333
336
  do_it(thing)
334
- answer_callback_query("#{thing} is cool now! Like a callback query context.")
337
+ answer_callback_query("#{thing} is cool now! Like a callback query context.")
335
338
  end
336
339
  ```
337
340
 
338
341
  ### Routes in Rails app
339
342
 
340
- There is `telegram_webhooks` helper for rails app to define routes for webhooks.
343
+ There is `telegram_webhook` helper for rails app to define routes for webhooks.
341
344
  It defines routes at `telegram/#{bot.token}` and connects bots with controller.
342
- For more options see [examples in wiki](https://github.com/telegram-bot-rb/telegram-bot/wiki/Routes-helpers-in-details).
343
345
 
344
346
  ```ruby
345
- # Create routes for all Telegram.bots using single controller:
346
- telegram_webhooks TelegramController
347
+ # Most off apps would require
348
+ telegram_webhook TelegramController
349
+ # which is same as
350
+ telegram_webhook TelegramController, :default
347
351
 
348
352
  # Use different controllers for each bot:
349
- telegram_webhooks chat: TelegramChatController,
350
- auction: TelegramAuctionController
353
+ telegram_webhook TelegramChatController, :chat
354
+ telegram_webhook TelegramAuctionController, :auction
355
+
356
+ # Defined route is named and its name depends on `Telegram.bots`.
357
+ # For single bot it will use 'telegram_webhook',
358
+ # for multiple bots it uses bot's key in the `Telegram.bots` as prefix
359
+ # (eg. `chat_telegram_webhook`).
360
+ # You can override this with `as` option:
361
+ telegram_webhook TelegramController, as: :custom_telegram_webhook
351
362
  ```
352
363
 
353
364
  #### Processesing updates
@@ -360,7 +371,7 @@ There are several options to run it automatically:
360
371
  - Use poller (described in the next section).
361
372
 
362
373
  To run action without update (ex., send notifications from jobs),
363
- you can call `#process` directly. In this case controller can be initialized
374
+ you can call `#process` directly. In this case controller can be initialized
364
375
  with `:from` and/or `:chat` options instead of `update` object:
365
376
 
366
377
  ```ruby
@@ -374,7 +385,7 @@ Use `rake telegram:bot:poller` to run poller in rails app. It automatically load
374
385
  changes without restart in development env.
375
386
  Optionally pass bot id in `BOT` envvar (`BOT=chat`) to specify bot to run poller for.
376
387
 
377
- This task requires `telegram_webhooks` helper to be used as it connects bots with controller.
388
+ This task requires `telegram_webhook` helper to be used as it connects bots with controller.
378
389
  To run poller in other cases use:
379
390
 
380
391
  ```ruby
@@ -523,7 +534,7 @@ Yes, it's threadsafe too.
523
534
 
524
535
  ## Development
525
536
 
526
- After checking out the repo, run `bin/setup` to install dependencies.
537
+ After checking out the repo, run `bin/setup` to install dependencies and git hooks.
527
538
  Then, run `appraisal rake spec` to run the tests.
528
539
  You can also run `bin/console` for an interactive prompt that will allow you to experiment.
529
540
 
@@ -14,7 +14,7 @@ group :development do
14
14
  gem "rspec", "~> 3.5.0"
15
15
  gem "rspec-its", "~> 1.1.0"
16
16
  gem "rspec-rails", "~> 3.5.0"
17
- gem "rubocop", "~> 0.51.0"
17
+ gem "rubocop", "~> 0.52.1"
18
18
  gem "coveralls", "~> 0.8.2", require: false
19
19
  end
20
20
 
@@ -14,7 +14,7 @@ group :development do
14
14
  gem "rspec", "~> 3.5.0"
15
15
  gem "rspec-its", "~> 1.1.0"
16
16
  gem "rspec-rails", "~> 3.5.0"
17
- gem "rubocop", "~> 0.51.0"
17
+ gem "rubocop", "~> 0.52.1"
18
18
  gem "coveralls", "~> 0.8.2", require: false
19
19
  end
20
20
 
@@ -14,7 +14,7 @@ group :development do
14
14
  gem "rspec", "~> 3.5.0"
15
15
  gem "rspec-its", "~> 1.1.0"
16
16
  gem "rspec-rails", "~> 3.5.0"
17
- gem "rubocop", "~> 0.51.0"
17
+ gem "rubocop", "~> 0.52.1"
18
18
  gem "coveralls", "~> 0.8.2", require: false
19
19
  end
20
20
 
@@ -0,0 +1,21 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "actionpack", "~> 5.2.0.beta2"
6
+ gem "railties", "~> 5.2.0.beta2"
7
+
8
+ group :development do
9
+ gem "appraisal", "~> 2.2"
10
+ gem "pry", "~> 0.10.1"
11
+ gem "pry-byebug", "~> 3.2.0"
12
+ gem "sdoc", "~> 0.4.1"
13
+ gem "telegram-bot-types", "~> 0.3.0"
14
+ gem "rspec", "~> 3.5.0"
15
+ gem "rspec-its", "~> 1.1.0"
16
+ gem "rspec-rails", "~> 3.5.0"
17
+ gem "rubocop", "~> 0.52.1"
18
+ gem "coveralls", "~> 0.8.2", require: false
19
+ end
20
+
21
+ gemspec path: "../"
@@ -5,9 +5,22 @@ module Telegram
5
5
 
6
6
  module Bot
7
7
  class Error < StandardError; end
8
- class NotFound < Error; end
8
+
9
+ # Raised for valid telegram response with 403 status code.
9
10
  class Forbidden < Error; end
10
11
 
12
+ # Raised for valid telegram response with 404 status code.
13
+ class NotFound < Error; end
14
+
15
+ module_function
16
+
17
+ def deprecation_0_14
18
+ @deprecation ||= begin
19
+ require 'active_support/deprecation'
20
+ ActiveSupport::Deprecation.new('0.14', 'Telegram::Bot')
21
+ end
22
+ end
23
+
11
24
  autoload :Async, 'telegram/bot/async'
12
25
  autoload :Botan, 'telegram/bot/botan'
13
26
  autoload :Client, 'telegram/bot/client'
@@ -4,7 +4,7 @@ require 'httpclient'
4
4
  module Telegram
5
5
  module Bot
6
6
  class Client
7
- URL_TEMPLATE = 'https://api.telegram.org/bot%s/'.freeze
7
+ URL_TEMPLATE = 'https://api.telegram.org/bot%<token>s/'.freeze
8
8
 
9
9
  autoload :TypedResponse, 'telegram/bot/client/typed_response'
10
10
  extend Initializers
@@ -36,6 +36,18 @@ module Telegram
36
36
  def prepare_async_args(action, body = {})
37
37
  [action.to_s, Async.prepare_hash(prepare_body(body))]
38
38
  end
39
+
40
+ def error_for_response(response)
41
+ result = JSON.parse(response.body) rescue nil # rubocop:disable RescueModifier
42
+ return Error.new(response.reason) unless result
43
+ message = result['description'] || '-'
44
+ # This errors are raised only for valid responses from Telegram
45
+ case response.status
46
+ when 403 then Forbidden.new(message)
47
+ when 404 then NotFound.new(message)
48
+ else Error.new("#{response.reason}: #{message}")
49
+ end
50
+ end
39
51
  end
40
52
 
41
53
  attr_reader :client, :token, :username, :base_uri
@@ -44,23 +56,13 @@ module Telegram
44
56
  @client = HTTPClient.new
45
57
  @token = token || options[:token]
46
58
  @username = username || options[:username]
47
- @base_uri = format URL_TEMPLATE, self.token
59
+ @base_uri = format(URL_TEMPLATE, token: self.token)
48
60
  end
49
61
 
50
62
  def request(action, body = {})
51
- res = http_request("#{base_uri}#{action}", self.class.prepare_body(body))
52
- status = res.status
53
- return JSON.parse(res.body) if status < 300
54
- result = JSON.parse(res.body) rescue nil # rubocop:disable RescueModifier
55
- err_msg = result && result['description'] || '-'
56
- if result
57
- # This errors are raised only for valid responses from Telegram
58
- case status
59
- when 403 then raise Forbidden, err_msg
60
- when 404 then raise NotFound, err_msg
61
- end
62
- end
63
- raise Error, "#{res.reason}: #{err_msg}"
63
+ response = http_request("#{base_uri}#{action}", self.class.prepare_body(body))
64
+ raise self.class.error_for_response(response) if response.status >= 300
65
+ JSON.parse(response.body)
64
66
  end
65
67
 
66
68
  # Endpoint for low-level request. For easy host highjacking & instrumentation.
@@ -53,8 +53,9 @@ module Telegram
53
53
  def bots_config
54
54
  @bots_config ||=
55
55
  if defined?(Rails.application)
56
- secrets = Rails.application.secrets.
57
- fetch(:telegram, {}).with_indifferent_access
56
+ app = Rails.application
57
+ store = app.respond_to?(:credentials) ? app.credentials : app.secrets
58
+ secrets = store.fetch(:telegram, {}).with_indifferent_access
58
59
  secrets.fetch(:bots, {}).symbolize_keys.tap do |config|
59
60
  default = secrets[:bot]
60
61
  config[:default] = default if default
@@ -28,40 +28,49 @@ module Telegram
28
28
  # telegram_webhooks TelegramController
29
29
  #
30
30
  # # Or pass custom bots usin any of supported config options:
31
- # telegram_webhooks TelegramController,
32
- # bot,
33
- # {token: token, username: username},
34
- # other_bot_token
35
- #
36
- # # Use different controllers for each bot:
37
- # telegram_webhooks bot => TelegramChatController,
38
- # other_bot => TelegramAuctionController
39
- #
40
- # # telegram_webhooks creates named routes. See
41
- # # RoutesHelper.route_name_for_bot for more info.
42
- # # You can override this options or specify others:
43
- # telegram_webhooks TelegramController, as: :my_webhook
44
- # telegram_webhooks bot => [TelegramChatController, as: :chat_webhook],
45
- # other_bot => TelegramAuctionController,
46
- # admin_chat: TelegramAdminChatController
47
- #
31
+ # telegram_webhooks TelegramController, [
32
+ # bot,
33
+ # {token: token, username: username},
34
+ # other_bot_token,
35
+ # ]
48
36
  def telegram_webhooks(controllers, bots = nil, **options)
37
+ Bot.deprecation_0_14.deprecation_warning(:telegram_webhooks, <<-TXT.strip_heredoc)
38
+ It brings unnecessary complexity and encourages writeng less readable code.
39
+ Please use telegram_webhook method instead.
40
+ It's signature `telegram_webhook(controller, bot = :default, **options)`.
41
+ Multiple-bot environments now requires calling this method in a loop
42
+ or using statement for each bot.
43
+ TXT
49
44
  unless controllers.is_a?(Hash)
50
45
  bots = bots ? Array.wrap(bots) : Telegram.bots.values
51
46
  controllers = Hash[bots.map { |x| [x, controllers] }]
52
47
  end
53
48
  controllers.each do |bot, controller|
54
- bot = Client.wrap(bot)
55
49
  controller, bot_options = controller if controller.is_a?(Array)
56
- params = {
57
- to: Middleware.new(bot, controller),
58
- as: RoutesHelper.route_name_for_bot(bot),
59
- format: false,
60
- }.merge!(options).merge!(bot_options || {})
61
- post("telegram/#{RoutesHelper.escape_token bot.token}", params)
62
- UpdatesPoller.add(bot, controller) if Telegram.bot_poller_mode?
50
+ telegram_webhook(controller, bot, options.merge(bot_options || {}))
63
51
  end
64
52
  end
53
+
54
+ # Define route which processes requests using given controller and bot.
55
+ #
56
+ # telegram_webhook TelegramController, bot
57
+ #
58
+ # telegram_webhook TelegramController
59
+ # # same as:
60
+ # telegram_webhook TelegramController, :default
61
+ #
62
+ # # pass additional options
63
+ # telegram_webhook TelegramController, :default, as: :custom_route_name
64
+ def telegram_webhook(controller, bot = :default, **options)
65
+ bot = Client.wrap(bot)
66
+ params = {
67
+ to: Middleware.new(bot, controller),
68
+ as: RoutesHelper.route_name_for_bot(bot),
69
+ format: false,
70
+ }.merge!(options)
71
+ post("telegram/#{RoutesHelper.escape_token bot.token}", params)
72
+ UpdatesPoller.add(bot, controller) if Telegram.bot_poller_mode?
73
+ end
65
74
  end
66
75
  end
67
76
  end
@@ -53,12 +53,19 @@ module Telegram
53
53
  class UpdatesController < AbstractController::Base # rubocop:disable ClassLength
54
54
  abstract!
55
55
 
56
- require 'telegram/bot/updates_controller/session'
57
- require 'telegram/bot/updates_controller/log_subscriber'
58
- require 'telegram/bot/updates_controller/instrumentation'
59
- require 'telegram/bot/updates_controller/reply_helpers'
60
- autoload :CallbackQueryContext, 'telegram/bot/updates_controller/callback_query_context'
61
- autoload :MessageContext, 'telegram/bot/updates_controller/message_context'
56
+ %w[
57
+ instrumentation
58
+ log_subscriber
59
+ reply_helpers
60
+ rescue
61
+ session
62
+ ].each { |file| require "telegram/bot/updates_controller/#{file}" }
63
+
64
+ %w[
65
+ CallbackQueryContext
66
+ MessageContext
67
+ TypedUpdate
68
+ ].each { |mod| autoload mod, "telegram/bot/updates_controller/#{mod.underscore}" }
62
69
 
63
70
  include AbstractController::Callbacks
64
71
  # Redefine callbacks with default terminator.
@@ -72,11 +79,11 @@ module Telegram
72
79
  end
73
80
 
74
81
  include AbstractController::Translation
82
+ include Rescue
75
83
  include ReplyHelpers
76
- prepend Instrumentation
77
- extend Session::ConfigMethods
84
+ include Instrumentation
78
85
 
79
- autoload :TypedUpdate, 'telegram/bot/updates_controller/typed_update'
86
+ extend Session::ConfigMethods
80
87
 
81
88
  PAYLOAD_TYPES = %w[
82
89
  message
@@ -113,10 +120,17 @@ module Telegram
113
120
  # any commands.
114
121
  def command_from_text(text, username = nil)
115
122
  return unless text
116
- match = text.match CMD_REGEX
123
+ match = text.match(CMD_REGEX)
117
124
  return unless match
118
- return if match[3] && username != true && match[3] != username
119
- [match[1], text.split.drop(1)]
125
+ mention = match[3]
126
+ [match[1], text.split.drop(1)] if username == true || !mention || mention == username
127
+ end
128
+
129
+ def payload_from_update(update)
130
+ update && PAYLOAD_TYPES.find do |type|
131
+ item = update[type]
132
+ return [item, type] if item
133
+ end
120
134
  end
121
135
  end
122
136
 
@@ -135,13 +149,7 @@ module Telegram
135
149
  @_update = update
136
150
  @_bot = bot
137
151
  @_chat, @_from = options && options.values_at(:chat, :from)
138
-
139
- payload_data = nil
140
- update && PAYLOAD_TYPES.find do |type|
141
- item = update[type]
142
- payload_data = [item, type] if item
143
- end
144
- @_payload, @_payload_type = payload_data
152
+ @_payload, @_payload_type = self.class.payload_from_update(update)
145
153
  end
146
154
 
147
155
  # Accessor to `'chat'` field of payload. Also tries `'chat'` in `'message'`
@@ -4,12 +4,13 @@ module Telegram
4
4
  # Most methods are taken from ActionController::Instrumentation,
5
5
  # some are slightly modified.
6
6
  module Instrumentation
7
- class << self
8
- def prepended(base)
9
- base.send :config_accessor, :logger
10
- base.extend ClassMethods
11
- end
7
+ extend ActiveSupport::Concern
12
8
 
9
+ included do
10
+ config_accessor :logger
11
+ end
12
+
13
+ class << self
13
14
  def instrument(action, *args, &block)
14
15
  ActiveSupport::Notifications.instrument(
15
16
  "#{action}.updates_controller.bot.telegram",
@@ -0,0 +1,20 @@
1
+ require 'active_support/rescuable'
2
+
3
+ module Telegram
4
+ module Bot
5
+ class UpdatesController
6
+ module Rescue
7
+ extend ActiveSupport::Concern
8
+ include ActiveSupport::Rescuable
9
+
10
+ private
11
+
12
+ def process_action(*)
13
+ super
14
+ rescue Exception => exception # rubocop:disable RescueException
15
+ rescue_with_handler(exception) || raise
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -41,40 +41,54 @@ module Telegram
41
41
 
42
42
  def start
43
43
  return if running
44
- @running = true
45
- log { 'Started bot poller.' }
44
+ begin
45
+ @running = true
46
+ log { 'Started bot poller.' }
47
+ run
48
+ rescue Interrupt
49
+ nil # noop
50
+ ensure
51
+ @running = false
52
+ end
53
+ log { 'Stoped polling bot updates.' }
54
+ end
55
+
56
+ def run
46
57
  while running
47
- begin
48
- fetch_updates do |update|
49
- controller.dispatch(bot, update)
50
- end
51
- rescue Interrupt
52
- @running = false
53
- rescue StandardError => e
54
- logger.error { ([e.message] + e.backtrace).join("\n") } if logger
55
- end
58
+ updates = fetch_updates
59
+ process_updates(updates) if updates && updates.any?
56
60
  end
57
- log { 'Stop polling bot updates.' }
58
61
  end
59
62
 
63
+ # Method to stop poller from other thread.
60
64
  def stop
61
65
  return unless running
62
- log { 'Killing polling thread.' }
66
+ log { 'Stopping polling bot updates.' }
63
67
  @running = false
64
68
  end
65
69
 
66
- def fetch_updates
70
+ def fetch_updates(offset = self.offset)
67
71
  response = bot.async(false) { bot.get_updates(offset: offset, timeout: timeout) }
68
- updates = response.is_a?(Array) ? response : response['result']
69
- return unless updates && updates.any?
72
+ response.is_a?(Array) ? response : response['result']
73
+ rescue Timeout::Error
74
+ log { 'Fetch timeout' }
75
+ nil
76
+ end
77
+
78
+ def process_updates(updates)
70
79
  reload! do
71
80
  updates.each do |update|
72
81
  @offset = update['update_id'] + 1
73
- yield update
82
+ process_update(update)
74
83
  end
75
84
  end
76
- rescue Timeout::Error
77
- log { 'Fetch timeout' }
85
+ rescue StandardError => e
86
+ logger.error { ([e.message] + e.backtrace).join("\n") } if logger
87
+ end
88
+
89
+ # Override this method to setup custom error collector.
90
+ def process_update(update)
91
+ controller.dispatch(bot, update)
78
92
  end
79
93
 
80
94
  def reload!
@@ -1,6 +1,6 @@
1
1
  module Telegram
2
2
  module Bot
3
- VERSION = '0.12.4'.freeze
3
+ VERSION = '0.13.0'.freeze
4
4
 
5
5
  def self.gem_version
6
6
  Gem::Version.new VERSION
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'activesupport', '>= 4.0', '< 6.0'
24
24
  spec.add_dependency 'httpclient', '~> 2.7'
25
25
 
26
- spec.add_development_dependency 'bundler', '~> 1.11'
26
+ spec.add_development_dependency 'bundler', '~> 1.16'
27
27
  spec.add_development_dependency 'rake', '~> 10.0'
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: telegram-bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.4
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Melentiev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-04 00:00:00.000000000 Z
11
+ date: 2018-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -70,14 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '1.11'
73
+ version: '1.16'
74
74
  type: :development
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: '1.11'
80
+ version: '1.16'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rake
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -99,6 +99,7 @@ executables: []
99
99
  extensions: []
100
100
  extra_rdoc_files: []
101
101
  files:
102
+ - ".codeclimate.yml"
102
103
  - ".gitignore"
103
104
  - ".rspec"
104
105
  - ".rubocop.yml"
@@ -117,6 +118,7 @@ files:
117
118
  - gemfiles/rails_42.gemfile
118
119
  - gemfiles/rails_50.gemfile
119
120
  - gemfiles/rails_51.gemfile
121
+ - gemfiles/rails_52.gemfile
120
122
  - lib/tasks/telegram-bot.rake
121
123
  - lib/telegram/bot.rb
122
124
  - lib/telegram/bot/async.rb
@@ -143,6 +145,7 @@ files:
143
145
  - lib/telegram/bot/updates_controller/log_subscriber.rb
144
146
  - lib/telegram/bot/updates_controller/message_context.rb
145
147
  - lib/telegram/bot/updates_controller/reply_helpers.rb
148
+ - lib/telegram/bot/updates_controller/rescue.rb
146
149
  - lib/telegram/bot/updates_controller/rspec_helpers.rb
147
150
  - lib/telegram/bot/updates_controller/session.rb
148
151
  - lib/telegram/bot/updates_controller/testing.rb