telegrator 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1570bb5bb5f21daeb0442224c24fbd454de61540
4
- data.tar.gz: a4e20acf9ea74b51ffdae4ebb9febceb1e853c44
3
+ metadata.gz: e1ad76a03640833177bec21dd4edccb7c8ac5027
4
+ data.tar.gz: 4c1b58e2ed91b1e2919fd72e7f727eea75789e92
5
5
  SHA512:
6
- metadata.gz: 68bdb6495e650a711fad8435149da2b35e8dd7e9a9371a3b223f42b038d1fc651bfc67a4780a5e2f93b6fdf46dc958561704f6401c4beb8719007850352a04ab
7
- data.tar.gz: 6a92a1a93d1b65e149283576abedee0bed95bf399c54989c9e4d7ffffde9d4a3f96b8337a208f9f074687c37d0d8f9d52bf8db10a202230139956bd29c336d43
6
+ metadata.gz: 3139ea3b7a0b80928f39a8bde4f55883960ceda918254f968b22142e38b244f87bbafc6a05ce93d57ca735d22bfef219d8be5dff355007d0125de2c4027fd66a
7
+ data.tar.gz: dcf50f2af18f666b9c55d6d97d9ebd6a31b6b7ccada47b1fb42c7457088697fb4327d3f4c876965f7b2ca51c122a10f7f0e4be6f0551f0888b115ff8504bf53c
@@ -2,6 +2,12 @@ require 'thor'
2
2
 
3
3
  module Telegrator
4
4
  class CLI < Thor
5
+ desc "version", "Print version info"
6
+ def version
7
+ say "Telegrator #{Telegrator::VERSION}"
8
+ end
9
+ map %w(-v --version) => :version
10
+
5
11
  register(
6
12
  Generators::Bot,
7
13
  'bot',
@@ -18,6 +18,9 @@ module Telegrator
18
18
  class_option :database, type: :string, aliases: '-d', default: 'postgresql', enum: DATABASES,
19
19
  desc: 'Preconfigure for selected database'
20
20
 
21
+ class_option :skip_bundler, type: :boolean, default: false,
22
+ desc: 'Skip Bundler'
23
+
21
24
  class_option :skip_capistrano, type: :boolean, default: false,
22
25
  desc: 'Skip Capistrano'
23
26
 
@@ -37,7 +40,6 @@ module Telegrator
37
40
 
38
41
  def create_root_files
39
42
  template 'gitignore.tt', '.gitignore'
40
- inside { run 'git init' }
41
43
 
42
44
  template 'env.tt', '.env.sample'
43
45
  template 'env.tt', '.env'
@@ -45,6 +47,7 @@ module Telegrator
45
47
  template 'Gemfile.tt'
46
48
  template 'Rakefile.tt'
47
49
  template 'Capfile.tt' unless options[:skip_capistrano]
50
+ template 'config.ru.tt' unless options[:skip_webhook]
48
51
  end
49
52
 
50
53
  # === app/ directory ===
@@ -70,6 +73,11 @@ module Telegrator
70
73
  directory 'app/models'
71
74
  end
72
75
 
76
+ def create_services
77
+ template 'app/services.rb'
78
+ directory 'app/services'
79
+ end
80
+
73
81
  def create_workers
74
82
  template 'app/workers.rb'
75
83
  directory 'app/workers'
@@ -109,6 +117,11 @@ module Telegrator
109
117
  create_file 'log/.keep'
110
118
  end
111
119
 
120
+ def init
121
+ inside { run 'git init' }
122
+ inside { run 'bundle install' } unless options[:skip_bundler]
123
+ end
124
+
112
125
  private
113
126
 
114
127
  DATABASES.each do |db|
@@ -0,0 +1,3 @@
1
+ module Services
2
+ autoload :Processor, 'services/processor'
3
+ end
@@ -0,0 +1,49 @@
1
+ module Services
2
+ class Processor
3
+ HANDLERS = {
4
+ '\A\/start(\s.*|\z)' => Commands::Start,
5
+ '\A\/stop\z' => Commands::Stop
6
+ }.freeze
7
+
8
+ def self.call(*args)
9
+ new(*args).call
10
+ end
11
+
12
+ def initialize(message_dump)
13
+ @message_dump = message_dump
14
+ end
15
+
16
+ def call
17
+ process_message YAML.load(@message_dump)
18
+ end
19
+
20
+ private
21
+
22
+ def process_message(message)
23
+ user = user_by_message(message)
24
+ command_klass(message).invoke(message, user)
25
+ end
26
+
27
+ def user_by_message(message)
28
+ from = message.from
29
+ user = Models::User.find_or_initialize_by(telegram_id: from.id)
30
+ if user.new_record?
31
+ user.update(first_name: from.first_name, last_name: from.last_name, username: from.username)
32
+ end
33
+ user
34
+ end
35
+
36
+ def command_klass(message)
37
+ command_klass_by_text(message.text) || Commands::Missing
38
+ end
39
+
40
+ def command_klass_by_text(text)
41
+ key = HANDLERS.keys.find { |regex| /#{regex}/ =~ prepare_text(text) }
42
+ HANDLERS[key]
43
+ end
44
+
45
+ def prepare_text(text)
46
+ text.strip
47
+ end
48
+ end
49
+ end
@@ -1,41 +1,7 @@
1
1
  module Workers
2
2
  class Processor < Base
3
- HANDLERS = {
4
- '\A\/start(\s.*|\z)' => Commands::Start,
5
- '\A\/stop\z' => Commands::Stop
6
- }.freeze
7
-
8
3
  def perform(message_dump)
9
- process_message YAML.load(message_dump)
10
- end
11
-
12
- private
13
-
14
- def process_message(message)
15
- user = user_by_message(message)
16
- command_klass(message).invoke(message, user)
17
- end
18
-
19
- def user_by_message(message)
20
- from = message.from
21
- user = Models::User.find_or_initialize_by(telegram_id: from.id)
22
- if user.new_record?
23
- user.update(first_name: from.first_name, last_name: from.last_name, username: from.username)
24
- end
25
- user
26
- end
27
-
28
- def command_klass(message)
29
- command_klass_by_text(message.text) || Commands::Missing
30
- end
31
-
32
- def command_klass_by_text(text)
33
- key = HANDLERS.keys.find { |regex| /#{regex}/ =~ prepare_text(text) }
34
- HANDLERS[key]
35
- end
36
-
37
- def prepare_text(text)
38
- text.strip
4
+ Services::Processor.call(message_dump)
39
5
  end
40
6
  end
41
7
  end
@@ -0,0 +1,17 @@
1
+ require 'rack/contrib'
2
+ require File.expand_path('../config/boot', __FILE__)
3
+
4
+ class Listener
5
+ def call(env)
6
+ req = Rack::Request.new(env)
7
+
8
+ update = Telegram::Bot::Types::Update.new(req.params)
9
+ Services::Processor.call YAML.dump(update.current_message)
10
+
11
+ [200, {}, []]
12
+ end
13
+ end
14
+
15
+ use Rack::PostBodyContentTypeParser
16
+
17
+ run Listener.new
@@ -11,4 +11,5 @@ require 'commands'
11
11
  require 'keyboards'
12
12
  <%- end -%>
13
13
  require 'models'
14
+ require 'services'
14
15
  require 'workers'
@@ -18,4 +18,4 @@ set :default_env, path: '~/.rbenv/shims:~/.rbenv/bin:$PATH'
18
18
 
19
19
  set :sidekiq_pid, File.join(shared_path, 'tmp', 'pids', 'sidekiq.pid')
20
20
  set :sidekiq_config, File.join(current_path, 'config', 'sidekiq.yml')
21
- set :sidekiq_require, File.join(current_path, 'app', 'boot.rb')
21
+ set :sidekiq_require, File.join(current_path, 'config', 'boot.rb')
@@ -1,3 +1,3 @@
1
1
  module Telegrator
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_runtime_dependency 'thor', '~> 0.19.1'
25
+ spec.add_runtime_dependency 'thor', '~> 0.20.0'
26
26
 
27
27
  spec.add_development_dependency 'bundler', '~> 1.14'
28
28
  spec.add_development_dependency 'rake', '~> 12.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: telegrator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksey Ivanov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-18 00:00:00.000000000 Z
11
+ date: 2017-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.19.1
19
+ version: 0.20.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.19.1
26
+ version: 0.20.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -117,10 +117,13 @@ files:
117
117
  - lib/telegrator/generators/bot/templates/app/models.rb.tt
118
118
  - lib/telegrator/generators/bot/templates/app/models/base.rb.tt
119
119
  - lib/telegrator/generators/bot/templates/app/models/user.rb.tt
120
+ - lib/telegrator/generators/bot/templates/app/services.rb.tt
121
+ - lib/telegrator/generators/bot/templates/app/services/processor.rb.tt
120
122
  - lib/telegrator/generators/bot/templates/app/workers.rb.tt
121
123
  - lib/telegrator/generators/bot/templates/app/workers/base.rb.tt
122
124
  - lib/telegrator/generators/bot/templates/app/workers/processor.rb.tt
123
125
  - lib/telegrator/generators/bot/templates/bin/bot
126
+ - lib/telegrator/generators/bot/templates/config.ru.tt
124
127
  - lib/telegrator/generators/bot/templates/config/boot.rb.tt
125
128
  - lib/telegrator/generators/bot/templates/config/deploy.rb.tt
126
129
  - lib/telegrator/generators/bot/templates/config/deploy/production.rb.tt
@@ -157,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
160
  version: '0'
158
161
  requirements: []
159
162
  rubyforge_project:
160
- rubygems_version: 2.6.12
163
+ rubygems_version: 2.6.13
161
164
  signing_key:
162
165
  specification_version: 4
163
166
  summary: A generator to set up new Telegram bot easily