telegrator 0.2.0 → 0.3.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: 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