cli_application 0.1.2 → 0.1.4

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: 0e981d5c55aa47613784ecc6f2d17c70ca88e92d
4
- data.tar.gz: 03f5a07216b3b51a7b11810c245b383a8e96ff55
3
+ metadata.gz: 42d3b23f523ec6e2a71aec78781c946599743010
4
+ data.tar.gz: 278b38b045459d7b3bd2ebda1490e48ad2546004
5
5
  SHA512:
6
- metadata.gz: fbe3f862151696d825fe8fb084662ebe8205e6b1387062f96dbdcea75d1624adf671c66b1be97e33bdd5e4fb90b8ceca0da256ce428c80da4f41cedb1615f9af
7
- data.tar.gz: 493e7cd85f4b1c1bb7ffce61215a49617332415ab7f18e888030cfd3648737560c0a546cee0d2f4c88390d17199599cab5f36a11c0346ee8cf47a8d58309e3cc
6
+ metadata.gz: abedb19ca01a4c4eda33948a2028dbb706d4912d7e4607d2bd2221938e4e1be9292c5315cea15de4ca64567bbf3e89983cd3f096fa94c740462c8b42cbe5e181
7
+ data.tar.gz: 56c5b38a063b9b2b777b24ce957b68af7c12810d5ba0baf366eb117f1e2819c8f18dac44b33924f9737767705bc2034df1ab32845a1148d1f50192eab797acc9
data/README.md CHANGED
@@ -81,7 +81,6 @@ end
81
81
  ```yaml
82
82
  cli:
83
83
  timezone: "Moscow"
84
- ar_timezone: "Moscow"
85
84
  ```
86
85
 
87
86
  И создаем своё тестовое приложение
@@ -433,7 +432,6 @@ _См. /test/examples/6_
433
432
  ```yaml
434
433
  cli:
435
434
  timezone: "Moscow"
436
- ar_timezone: "Moscow" # Active Record timezone
437
435
 
438
436
  databases:
439
437
  default:
@@ -475,6 +473,53 @@ end
475
473
  Таким образом, буквально в несколько строк мы можем работать с базами данных в CLI-приложении, так же, как в привычном
476
474
  Rails-окружении.
477
475
 
476
+ ### Пример 7 - Отправка электронной почты
477
+
478
+ _См. /test/examples/7_
479
+
480
+ Иногда нужно отправлять различные нотификации из скрипта. Для этого классе CliApplication есть почтовый дивжок mail.
481
+ Попробуем использовать его
482
+
483
+ Сначала пропишем в конфиге параметры подключения к почтовой системе. Имя конфигуарции - `cli/mail`.
484
+
485
+ ```yaml
486
+ cli:
487
+ timezone: "Moscow"
488
+
489
+ mail:
490
+ enable: true
491
+ from: 'Admin <admin@test-mail.ru>'
492
+ host: test-mail.ru
493
+ port: 25
494
+ footer: '<br><br>--------------<br>Your gem <b>cli_application</b>'
495
+ ```
496
+
497
+ Допустимые ключи:
498
+ * `enable` - если true, то допускается отправка сообщений. Через эту опцию можно запретить отправку
499
+ * `from` - адрес почты, с которой будет отправлено сообщение
500
+ * `host` - SMPT-сервер. Пока имеется ограничение - использование должно быть без пароля
501
+ * `port` - IP-порт почтового сервера
502
+ * `footer` - Подпись сообщения
503
+
504
+ Затем отправим письмо.
505
+
506
+ ```ruby
507
+ def main
508
+ mail.quick_send('stan@test-mail.ru', 'Stan', 'Тестовый заголовок', 'Hellow, world')
509
+ 0
510
+ end
511
+ ```
512
+
513
+ В итоге получим.
514
+
515
+ ```html
516
+ Hellow, world
517
+
518
+ --------------
519
+ Your gem <b>cli_application</b>
520
+ ```
521
+
522
+
478
523
  ## Contributing
479
524
 
480
525
  1. Fork it ( https://github.com/[my-github-username]/cli_application/fork )
@@ -5,6 +5,8 @@ module CliApplication
5
5
  class App
6
6
  # Ссылка на класс, который содержит аргменты командной строки или значения по умолчанию
7
7
  attr_reader :argv
8
+ # Ссылка на класс - почтовик, для отсылки различных email'ов
9
+ attr_reader :mail
8
10
  # Код завершения приложения. Может быть использован в Bash-скриптах
9
11
  attr_reader :exitcode
10
12
  # Ссылка на массив, содержащий список директорий в которых исполняется приложение.
@@ -44,6 +46,7 @@ module CliApplication
44
46
  @config = ::CliApplication::Config.new(@folders)
45
47
 
46
48
  @databases = ::CliApplication::Databases.new(config.cli.databases)
49
+ @mail = ::CliApplication::Mail.new(config.cli.mail)
47
50
 
48
51
  @footer = nil
49
52
 
@@ -67,7 +67,7 @@ module CliApplication
67
67
  valid?
68
68
 
69
69
  ::Time.zone = self.cli.timezone
70
- ::ActiveRecord::Base.default_timezone = self.cli.ar_timezone
70
+ ::ActiveRecord::Base.default_timezone = :local
71
71
  end
72
72
 
73
73
  def set_pair(key, value) # :nodoc:
@@ -77,8 +77,7 @@ module CliApplication
77
77
 
78
78
  def valid? # :nodoc:
79
79
  raise "ОШИБКА: не найдена секция 'cli'" if self.cli.nil?
80
- raise "ОШИБКА: не найдена секция 'cli.tz'" if self.cli.timezone.nil?
81
- raise "ОШИБКА: не найдена секция 'cli.active_record_tz'" if self.cli.ar_timezone.nil?
80
+ raise "ОШИБКА: не найдена секция 'cli.timezone'" if self.cli.timezone.nil?
82
81
  end
83
82
 
84
83
 
@@ -0,0 +1,79 @@
1
+ # CliApplication::Mail - отсылка сообщений администратору системы
2
+ # может быть использован для отсылки критических сообщений
3
+
4
+ module CliApplication
5
+ class Mail
6
+
7
+ # Инициализация методов, позволяющих рассылать письма адимнистраторам
8
+ # системы
9
+ def initialize(config)
10
+ @config = config
11
+ if !@config.nil? && @config.enable
12
+ @is_valid = true
13
+ else
14
+ @is_valid = false
15
+ end
16
+ end
17
+
18
+ # Метод показывает готовность подсистемы отсылки почты администратору
19
+ # @return [Boolean] true, если разрешено отправлять письма администратору
20
+ def valid?
21
+ @is_valid
22
+ end
23
+
24
+ # Функция отправляет сообщение по электронной почте
25
+ # @param [String] to электронная почта лица, которому отправляется сообщение
26
+ # @param [String] name имя клиента, которому отправляется сообщение
27
+ # @param [String] title заголовок письма
28
+ # @param [String] body текст письма
29
+ # @return [Boolean] true, если письмо отправлено
30
+ def quick_send(to, name, title, body)
31
+ return false unless valid?
32
+
33
+ to_email = (name.nil? || name == '') ? to : "#{name} <#{to}>"
34
+ body_full = (@config.footer.nil? || @config.footer == '') ? body : (body+@config.footer)
35
+
36
+ begin
37
+ send_message(to_email, title, body_full)
38
+ true
39
+ rescue Errno::ECONNREFUSED
40
+ puts "Почтовый сервер не найден, выводим почтовое сообщение в консоль"
41
+ puts "From: #{@config.from.inspect}"
42
+ puts "To: #{to_email.inspect}"
43
+ puts "Title: #{title.inspect}"
44
+ puts "Body: #{(body_full[0,256] + '...').inspect}"
45
+ false
46
+ rescue Exception => e
47
+ puts "Ошибка отправки письма: #{e.message}"
48
+ false
49
+ end
50
+ end
51
+
52
+ def send_message(to, title, body)
53
+ msgstr = <<MESSAGE_END
54
+ From: #{@config.from}
55
+ To: #{to}
56
+ Subject: #{title}
57
+ Date: #{::Time.zone.now.to_formatted_s(:rfc822) }
58
+ MIME-Version: 1.0
59
+ Content-type: text/html
60
+
61
+ #{body}
62
+ MESSAGE_END
63
+
64
+ Net::SMTP.start(host, port) do |smtp|
65
+ smtp.send_message msgstr, @config.from, to
66
+ end
67
+ end
68
+
69
+ def host
70
+ @config.host || 'none'
71
+ end
72
+
73
+ def port
74
+ @config.port || 0
75
+ end
76
+
77
+ end
78
+ end
79
+
@@ -1,3 +1,3 @@
1
1
  module CliApplication
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -10,12 +10,14 @@ require 'pg'
10
10
  require 'sqlite3'
11
11
  require 'active_record'
12
12
  require 'ostruct'
13
+ require 'net/smtp'
13
14
 
14
15
 
15
16
  module CliApplication # :nodoc:
16
17
  require 'cli_application/json_struct'
17
18
  require 'cli_application/config'
18
19
  require 'cli_application/databases'
20
+ require 'cli_application/mail'
19
21
  require 'cli_application/stat'
20
22
  require 'cli_application/argv'
21
23
  require 'cli_application/app'
@@ -1,33 +1,33 @@
1
1
  ---
2
2
  :name: app.rb
3
- :shortdescription: "Пример 4 - Различные параметры командной строки"
3
+ :shortdescription: "Пример 2 - Настройки CLI-приложения"
4
4
  :version: '1.0'
5
5
  :releasedate: '2015-05-11'
6
6
  :timezone: Moscow
7
- :last_started_at: '2015-05-14 00:34:52 +0300'
7
+ :last_started_at: '2015-05-30 12:27:25 +0300'
8
8
  :folders:
9
- :app: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/4"
9
+ :app: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/7"
10
10
  :class: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/1"
11
11
  :stat: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/1/stat"
12
12
  :avg:
13
- :starts: 64
14
- :executed_at: 0.058898
15
- :executed_at_human: 0.058898 секунд
16
- :memory: 32213
13
+ :starts: 87
14
+ :executed_at: 0.698304
15
+ :executed_at_human: 0.698304 секунд
16
+ :memory: 33244
17
17
  :last:
18
- :started_at: '2015-05-14 00:34:52 +0300'
19
- :executed_at: 0.036307
20
- :executed_at_human: 0.036307 секунд
21
- :memory: 34 кбайт
22
- :exitcode: 0
18
+ :started_at: '2015-05-30 12:27:25 +0300'
19
+ :executed_at: 21.539793
20
+ :executed_at_human: 21.539793 секунд
21
+ :memory: 35 кбайт
22
+ :exitcode: true
23
23
  :last10:
24
- - 2015-05-14 00:34:52 +0300,0,0.036307,34 кбайт
25
- - 2015-05-14 00:34:41 +0300,255,0.056077,35 кбайт
26
- - 2015-05-14 00:34:16 +0300,255,0.036939,34 кбайт
27
- - 2015-05-14 00:00:49 +0300,0,0.045486,33 кбайт
28
- - 2015-05-13 22:04:12 +0300,0,1.267228,38 кбайт
29
- - 2015-05-13 22:02:47 +0300,0,0.034901,34 кбайт
30
- - 2015-05-13 21:58:13 +0300,0,0.061671,32 кбайт
31
- - 2015-05-13 21:55:36 +0300,0,0.033505,31 кбайт
32
- - 2015-05-13 21:54:50 +0300,0,0.034287,31 кбайт
33
- - 2015-05-13 21:50:54 +0300,255,0.045199,32 кбайт
24
+ - 2015-05-30 12:27:25 +0300,true,21.539793,35 кбайт
25
+ - 2015-05-30 11:52:07 +0300,true,0.880834,35 кбайт
26
+ - 2015-05-30 11:51:13 +0300,true,16.334672,36 кбайт
27
+ - 2015-05-30 11:43:31 +0300,true,1.077774,35 кбайт
28
+ - 2015-05-30 11:40:30 +0300,#<Net::SMTP::Response:0x007fe89425e1d8>,16.540158,34 кбайт
29
+ - 2015-05-30 11:26:21 +0300,255,0.031659,37 кбайт
30
+ - 2015-05-30 11:22:50 +0300,255,0.031873,36 кбайт
31
+ - 2015-05-30 11:22:36 +0300,255,0.034389,35 кбайт
32
+ - 2015-05-30 11:18:59 +0300,255,0.030666,35 кбайт
33
+ - 2015-05-30 11:18:33 +0300,255,0.030451,35 кбайт
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ #encoding: utf-8
3
+ require '../1/cli_example.rb'
4
+
5
+ class TestApp < CliExample
6
+
7
+ def main
8
+ puts "Почта доступна?: #{mail.valid?.inspect}"
9
+ puts "Почтовый сервер: #{mail.host}:#{mail.port}"
10
+
11
+ mail.quick_send('stan@test-mail.ru', 'Stan', 'Тестовый заголовок', 'Hellow, world')
12
+ end
13
+
14
+ end
15
+
16
+ app = TestApp.new(ARGV, __dir__)
17
+
18
+ app.version = '1.0'
19
+ app.releasedate = '2015-05-11'
20
+ app.shortdescription = 'Пример 2 - Настройки CLI-приложения'
21
+ app.description = "CliApplication gem демо. #{app.shortdescription}"
22
+
23
+ app.help
24
+
25
+ app.run
26
+ exit(app.exitcode)
27
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cli_application
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Zhuravlev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-05-15 00:00:00.000000000 Z
11
+ date: 2015-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,6 +100,7 @@ files:
100
100
  - lib/cli_application/databases.rb
101
101
  - lib/cli_application/includes.rb
102
102
  - lib/cli_application/json_struct.rb
103
+ - lib/cli_application/mail.rb
103
104
  - lib/cli_application/stat.rb
104
105
  - lib/cli_application/version.rb
105
106
  - test/cli_example.rb
@@ -112,6 +113,7 @@ files:
112
113
  - test/examples/5/app.rb
113
114
  - test/examples/6/app.rb
114
115
  - test/examples/6/offer.rb
116
+ - test/examples/7/app.rb
115
117
  - test/stat/rdebug-ide
116
118
  - test/stat/test_app.yml
117
119
  - test/test_app.rb