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 +4 -4
- data/README.md +47 -2
- data/lib/cli_application/app.rb +3 -0
- data/lib/cli_application/config.rb +2 -3
- data/lib/cli_application/mail.rb +79 -0
- data/lib/cli_application/version.rb +1 -1
- data/lib/cli_application.rb +2 -0
- data/test/examples/1/stat/app.yml +22 -22
- data/test/examples/7/app.rb +27 -0
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 42d3b23f523ec6e2a71aec78781c946599743010
|
|
4
|
+
data.tar.gz: 278b38b045459d7b3bd2ebda1490e48ad2546004
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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 )
|
data/lib/cli_application/app.rb
CHANGED
|
@@ -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 =
|
|
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.
|
|
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
|
+
|
data/lib/cli_application.rb
CHANGED
|
@@ -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: "Пример
|
|
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-
|
|
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/
|
|
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:
|
|
14
|
-
:executed_at: 0.
|
|
15
|
-
:executed_at_human: 0.
|
|
16
|
-
:memory:
|
|
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-
|
|
19
|
-
:executed_at:
|
|
20
|
-
:executed_at_human:
|
|
21
|
-
:memory:
|
|
22
|
-
:exitcode:
|
|
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-
|
|
25
|
-
- 2015-05-
|
|
26
|
-
- 2015-05-
|
|
27
|
-
- 2015-05-
|
|
28
|
-
- 2015-05-
|
|
29
|
-
- 2015-05-
|
|
30
|
-
- 2015-05-
|
|
31
|
-
- 2015-05-
|
|
32
|
-
- 2015-05-
|
|
33
|
-
- 2015-05-
|
|
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.
|
|
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-
|
|
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
|