cli_application 0.1.2 → 0.1.4

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: 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