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