cli_application 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +480 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/cli_application/app.rb +267 -0
- data/lib/cli_application/argv.rb +152 -0
- data/lib/cli_application/config.rb +82 -0
- data/lib/cli_application/databases.rb +39 -0
- data/lib/cli_application/includes.rb +21 -0
- data/lib/cli_application/json_struct.rb +48 -0
- data/lib/cli_application/stat.rb +170 -0
- data/lib/cli_application/version.rb +3 -0
- data/lib/cli_application.rb +21 -0
- data/test/cli_example.rb +25 -0
- data/test/examples/1/app.rb +26 -0
- data/test/examples/1/cli_example.rb +14 -0
- data/test/examples/1/stat/app.yml +33 -0
- data/test/examples/2/app.rb +28 -0
- data/test/examples/3/app.rb +25 -0
- data/test/examples/4/app.rb +49 -0
- data/test/examples/5/app.rb +33 -0
- data/test/examples/6/app.rb +31 -0
- data/test/examples/6/offer.rb +5 -0
- data/test/stat/rdebug-ide +21 -0
- data/test/stat/test_app.yml +29 -0
- data/test/test_app.rb +60 -0
- data/test/tovar.rb +5 -0
- metadata +145 -0
@@ -0,0 +1,170 @@
|
|
1
|
+
module CliApplication
|
2
|
+
class Stat # :nodoc:
|
3
|
+
attr_reader :stat
|
4
|
+
|
5
|
+
def initialize(folders)
|
6
|
+
@stat_filename = File.join([folders[:class], 'stat', ::StTools::System.exename.gsub(/\.rb$/, '.yml')])
|
7
|
+
@stat_folder = File.join([folders[:class], 'stat'])
|
8
|
+
create_folder
|
9
|
+
|
10
|
+
init_stat
|
11
|
+
folders[:stat] = @stat_folder
|
12
|
+
@stat[:folders] = folders
|
13
|
+
|
14
|
+
@prev = load_stat
|
15
|
+
end
|
16
|
+
|
17
|
+
#-------------------------------------------------------------
|
18
|
+
#
|
19
|
+
# Функции настройки приложения
|
20
|
+
#
|
21
|
+
#-------------------------------------------------------------
|
22
|
+
def exitcode=(code)
|
23
|
+
@stat[:last][:exitcode] = code
|
24
|
+
end
|
25
|
+
|
26
|
+
def executed_at=(at)
|
27
|
+
@stat[:last][:executed_at] = at
|
28
|
+
end
|
29
|
+
|
30
|
+
def last_started_at=(at)
|
31
|
+
@stat[:last][:started_at] = at.to_s
|
32
|
+
@stat[:last_started_at] = at.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def version=(val)
|
36
|
+
@stat[:version] = val
|
37
|
+
end
|
38
|
+
|
39
|
+
def description=(val)
|
40
|
+
@stat[:description] = val
|
41
|
+
end
|
42
|
+
|
43
|
+
def shortdescription=(val)
|
44
|
+
@stat[:shortdescription] = val
|
45
|
+
end
|
46
|
+
|
47
|
+
def releasedate=(val)
|
48
|
+
@stat[:releasedate] = val
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
def last_started_at_human
|
57
|
+
res = last_started_at
|
58
|
+
if res.nil? || res == ''
|
59
|
+
'Ранее не запускалось'
|
60
|
+
else
|
61
|
+
"Последний запуск: #{res.to_time.human_datetime} (#{res.to_time.human_ago})"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def startes_human
|
66
|
+
res = @prev[:avg][:starts]
|
67
|
+
"Всего было #{res} запусков"
|
68
|
+
end
|
69
|
+
|
70
|
+
def last_started_at
|
71
|
+
@prev[:last][:started_at] || ::Time.zone.now
|
72
|
+
end
|
73
|
+
|
74
|
+
def load_stat
|
75
|
+
YAML.load_file(@stat_filename)
|
76
|
+
rescue
|
77
|
+
Marshal.load( Marshal.dump(init_stat))
|
78
|
+
end
|
79
|
+
|
80
|
+
def save
|
81
|
+
@prev = load_stat
|
82
|
+
update_stat
|
83
|
+
File.open(@stat_filename, 'w') {|f| f.write @prev.to_yaml }
|
84
|
+
end
|
85
|
+
|
86
|
+
def create_folder
|
87
|
+
unless Dir.exist?(@stat_folder)
|
88
|
+
Dir.mkdir(@stat_folder, 0777)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def timezone=(val)
|
93
|
+
@stat[:timezone] = val
|
94
|
+
end
|
95
|
+
|
96
|
+
def update_stat
|
97
|
+
@prev[:name] = @stat[:name]
|
98
|
+
@prev[:shortdescription] = @stat[:shortdescription]
|
99
|
+
@prev[:version] = @stat[:version]
|
100
|
+
@prev[:releasedate] = @stat[:releasedate]
|
101
|
+
@prev[:timezone] = ::Time.zone.name
|
102
|
+
@prev[:last_started_at] = @stat[:last_started_at]
|
103
|
+
@prev[:folders] = @stat[:folders]
|
104
|
+
|
105
|
+
make_averages(@prev[:avg])
|
106
|
+
make_last(@prev[:last])
|
107
|
+
|
108
|
+
tmp = Array.new
|
109
|
+
tmp << @prev[:last_started_at]
|
110
|
+
tmp << @prev[:last][:exitcode]
|
111
|
+
tmp << @prev[:last][:executed_at]
|
112
|
+
tmp << @prev[:last][:memory]
|
113
|
+
|
114
|
+
@prev[:last10].unshift(tmp.join(','))
|
115
|
+
@prev[:last10] = @prev[:last10][0,10]
|
116
|
+
end
|
117
|
+
|
118
|
+
def init_stat
|
119
|
+
@stat = Hash.new
|
120
|
+
@stat[:name] = ::StTools::System.exename
|
121
|
+
@stat[:shortdescription] = ''
|
122
|
+
@stat[:version] = ''
|
123
|
+
@stat[:releasedate] = ''
|
124
|
+
@stat[:timezone] = ''
|
125
|
+
@stat[:last_started_at] = ''
|
126
|
+
@stat[:folders] = @folders
|
127
|
+
|
128
|
+
@stat[:avg] = Hash.new
|
129
|
+
@stat[:avg][:starts] = 0
|
130
|
+
@stat[:avg][:executed_at] = 0
|
131
|
+
@stat[:avg][:executed_at_human] = ''
|
132
|
+
@stat[:avg][:memory] = 0
|
133
|
+
|
134
|
+
@stat[:last] = Hash.new
|
135
|
+
@stat[:last][:started_at] = nil
|
136
|
+
@stat[:last][:executed_at] = 0
|
137
|
+
@stat[:last][:executed_at_human] = ''
|
138
|
+
@stat[:last][:memory] = ''
|
139
|
+
@stat[:last][:exitcode] = 0
|
140
|
+
|
141
|
+
@stat[:last10] = Array.new
|
142
|
+
|
143
|
+
@stat
|
144
|
+
end
|
145
|
+
|
146
|
+
def make_averages(avg)
|
147
|
+
if avg[:starts] == 0
|
148
|
+
avg[:starts] = 1
|
149
|
+
avg[:executed_at] = @stat[:last][:executed_at]
|
150
|
+
avg[:executed_at_human] = ::StTools::Human.ago_in_words_pair(avg[:executed_at].to_i).join(' ')
|
151
|
+
avg[:memory] = ::StTools::System.memory.to_i
|
152
|
+
else
|
153
|
+
mul = avg[:starts]
|
154
|
+
avg[:starts] += 1
|
155
|
+
avg[:executed_at] = ((avg[:executed_at]*mul + @stat[:last][:executed_at]).to_f / avg[:starts]).round(6)
|
156
|
+
avg[:executed_at_human] = ::StTools::Human.ago_in_words_pair(avg[:executed_at]).join(' ')
|
157
|
+
avg[:memory] = (avg[:memory]*mul + ::StTools::System.memory).to_i / avg[:starts]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def make_last(last)
|
162
|
+
last[:started_at] = @stat[:last_started_at]
|
163
|
+
last[:executed_at] = @stat[:last][:executed_at]
|
164
|
+
last[:executed_at_human] = ::StTools::Human.ago_in_words_pair(last[:executed_at]).join(' ')
|
165
|
+
last[:memory] = ::StTools::Human.memory
|
166
|
+
last[:exitcode] = @stat[:last][:exitcode]
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
2
|
+
|
3
|
+
require "cli_application/version"
|
4
|
+
require 'st_tools'
|
5
|
+
require 'cli_application/includes'
|
6
|
+
|
7
|
+
require 'active_support/time'
|
8
|
+
require 'mysql2'
|
9
|
+
require 'pg'
|
10
|
+
require 'active_record'
|
11
|
+
require 'ostruct'
|
12
|
+
|
13
|
+
|
14
|
+
module CliApplication # :nodoc:
|
15
|
+
require 'cli_application/json_struct'
|
16
|
+
require 'cli_application/config'
|
17
|
+
require 'cli_application/databases'
|
18
|
+
require 'cli_application/stat'
|
19
|
+
require 'cli_application/argv'
|
20
|
+
require 'cli_application/app'
|
21
|
+
end
|
data/test/cli_example.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
|
3
|
+
require 'ruby-progressbar'
|
4
|
+
require '../lib/cli_application.rb'
|
5
|
+
|
6
|
+
class CliExample < CliApplication::App
|
7
|
+
|
8
|
+
def initialize(argv, folder, lang = :ru)
|
9
|
+
super(argv, folder, __dir__, lang)
|
10
|
+
end
|
11
|
+
|
12
|
+
def init_app
|
13
|
+
super
|
14
|
+
add_config('class_config.yml', :class)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Данный метод позволяет загружать модели ActiveRecords
|
18
|
+
def init_active_records
|
19
|
+
require './tovar.rb'
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
# todo: redmine wiki: создание заголовков категорий и наборов и искоренение type в mysql
|
25
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#encoding: utf-8
|
3
|
+
require './cli_example.rb'
|
4
|
+
|
5
|
+
class TestApp < CliExample
|
6
|
+
|
7
|
+
def main
|
8
|
+
puts "Hello, #{argv.user}!"
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
app = TestApp.new(ARGV, __dir__)
|
14
|
+
|
15
|
+
app.version = '1.0'
|
16
|
+
app.releasedate = '2015-05-11'
|
17
|
+
app.shortdescription = 'Пример 1 - Hello, world'
|
18
|
+
app.description = "CliApplication gem демо. #{app.shortdescription}"
|
19
|
+
|
20
|
+
app.set_argv(:string, 'user', 'World', 'Имя того, кого приветствуем')
|
21
|
+
|
22
|
+
app.help
|
23
|
+
|
24
|
+
app.run
|
25
|
+
exit(app.exitcode)
|
26
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
---
|
2
|
+
:name: app.rb
|
3
|
+
:shortdescription: "Пример 4 - Различные параметры командной строки"
|
4
|
+
:version: '1.0'
|
5
|
+
:releasedate: '2015-05-11'
|
6
|
+
:timezone: Moscow
|
7
|
+
:last_started_at: '2015-05-14 00:00:49 +0300'
|
8
|
+
:folders:
|
9
|
+
:app: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/5"
|
10
|
+
:class: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/1"
|
11
|
+
:stat: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/examples/1/stat"
|
12
|
+
:avg:
|
13
|
+
:starts: 61
|
14
|
+
:executed_at: 0.059675
|
15
|
+
:executed_at_human: 0.059675 секунд
|
16
|
+
:memory: 32057
|
17
|
+
:last:
|
18
|
+
:started_at: '2015-05-14 00:00:49 +0300'
|
19
|
+
:executed_at: 0.045486
|
20
|
+
:executed_at_human: 0.045486 секунд
|
21
|
+
:memory: 33 кбайт
|
22
|
+
:exitcode: 0
|
23
|
+
:last10:
|
24
|
+
- 2015-05-14 00:00:49 +0300,0,0.045486,33 кбайт
|
25
|
+
- 2015-05-13 22:04:12 +0300,0,1.267228,38 кбайт
|
26
|
+
- 2015-05-13 22:02:47 +0300,0,0.034901,34 кбайт
|
27
|
+
- 2015-05-13 21:58:13 +0300,0,0.061671,32 кбайт
|
28
|
+
- 2015-05-13 21:55:36 +0300,0,0.033505,31 кбайт
|
29
|
+
- 2015-05-13 21:54:50 +0300,0,0.034287,31 кбайт
|
30
|
+
- 2015-05-13 21:50:54 +0300,255,0.045199,32 кбайт
|
31
|
+
- 2015-05-13 21:49:27 +0300,255,0.02996,31 кбайт
|
32
|
+
- 2015-05-13 21:30:34 +0300,255,0.049195,31 кбайт
|
33
|
+
- 2015-05-13 21:29:22 +0300,0,0.031453,32 кбайт
|
@@ -0,0 +1,28 @@
|
|
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 "Приложение: #{exename}"
|
9
|
+
puts "Запущено из папки: #{folders[:app]}"
|
10
|
+
puts "Базовый класс в: #{folders[:class]}"
|
11
|
+
puts "Занимает сейчас в памяти #{StTools::Human.memory}"
|
12
|
+
puts "С момента начала выполнения прошло #{executed_at} секунд"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
app = TestApp.new(ARGV, __dir__)
|
18
|
+
|
19
|
+
app.version = '1.0'
|
20
|
+
app.releasedate = '2015-05-11'
|
21
|
+
app.shortdescription = 'Пример 2 - Настройки CLI-приложения'
|
22
|
+
app.description = "CliApplication gem демо. #{app.shortdescription}"
|
23
|
+
|
24
|
+
app.help
|
25
|
+
|
26
|
+
app.run
|
27
|
+
exit(app.exitcode)
|
28
|
+
|
@@ -0,0 +1,25 @@
|
|
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
|
+
return 10
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
app = TestApp.new(ARGV, __dir__)
|
14
|
+
|
15
|
+
app.version = '1.0'
|
16
|
+
app.releasedate = '2015-05-11'
|
17
|
+
app.shortdescription = 'Пример 3 - Настройка футера'
|
18
|
+
app.description = "CliApplication gem демо. #{app.shortdescription}"
|
19
|
+
|
20
|
+
app.help
|
21
|
+
app.footer = "{status} ({exitcode}) - приложение завершено за {executed_at} секунд (занято в памяти {memory})"
|
22
|
+
|
23
|
+
app.run
|
24
|
+
exit(app.exitcode)
|
25
|
+
|
@@ -0,0 +1,49 @@
|
|
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 ":downcase - #{argv.ex1.inspect} (#{argv.ex1.class.to_s})"
|
9
|
+
puts ":upcase - #{argv.ex2.inspect} (#{argv.ex2.class.to_s})"
|
10
|
+
puts ":bool - #{argv.ex3.inspect} (#{argv.ex3.class.to_s})"
|
11
|
+
puts ":split - #{argv.ex4.inspect} (#{argv.ex4.class.to_s})"
|
12
|
+
puts ":range - #{argv.ex5.inspect} (#{argv.ex5.class.to_s})"
|
13
|
+
puts ":float - #{argv.ex6.inspect} (#{argv.ex6.class.to_s})"
|
14
|
+
puts ":integer - #{argv.ex7.inspect} (#{argv.ex7.class.to_s})"
|
15
|
+
puts ":normalize - #{argv.ex8.inspect} (#{argv.ex8.class.to_s})"
|
16
|
+
puts ":caps - #{argv.ex9.inspect} (#{argv.ex9.class.to_s})"
|
17
|
+
puts ":string - #{argv.ex10.inspect} (#{argv.ex10.class.to_s})"
|
18
|
+
puts "Неизвестный ключ возвращает nil - #{argv.no_key.inspect}"
|
19
|
+
|
20
|
+
puts
|
21
|
+
0
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
app = TestApp.new(ARGV, __dir__)
|
27
|
+
|
28
|
+
app.version = '1.0'
|
29
|
+
app.releasedate = '2015-05-11'
|
30
|
+
app.shortdescription = 'Пример 4 - Различные параметры командной строки'
|
31
|
+
app.description = "CliApplication gem демо. #{app.shortdescription}"
|
32
|
+
|
33
|
+
app.set_argv(:downcase, 'ex1', 'НИКолай', 'Пример преобразования аргумента в нижний регистр')
|
34
|
+
app.set_argv(:upcase, 'ex2', 'НИКолай', 'Пример преобразования аргумента в верхний регистр')
|
35
|
+
app.set_argv(:bool, 'ex3', true, 'Пример преобразования логического аргумента в тип boolean')
|
36
|
+
app.set_argv(:split, 'ex4', 'Москва,Санкт-Петербург,Абакан', 'Пример преобразования входного списка в массив')
|
37
|
+
app.set_argv(:range, 'ex5', '1, 35, 23, 10-14', 'Пример преобразования диапазона в массив')
|
38
|
+
app.set_argv(:float, 'ex6', 3.14, 'Пример числа с плавающей запятой')
|
39
|
+
app.set_argv(:integer, 'ex7', 3.14, 'Пример целого числа')
|
40
|
+
app.set_argv(:normalize, 'ex8', 'Москва - крупный город ', 'Пример нормализации строки')
|
41
|
+
app.set_argv(:caps, 'ex9', 'иванов иВАН иваныч', 'Пример перевода строки в красивый human-вид')
|
42
|
+
app.set_argv(:string, 'ex10', 'ПрИвВеТ', 'Пример неизменного аргумента командной строки')
|
43
|
+
|
44
|
+
app.help
|
45
|
+
app.footer = "{status} ({exitcode}) - приложение завершено за {executed_at} секунд (занято в памяти {memory})"
|
46
|
+
|
47
|
+
app.run
|
48
|
+
exit(app.exitcode)
|
49
|
+
|
@@ -0,0 +1,33 @@
|
|
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 "Временная зона для приложения (из конфига класса): #{config.cli.timezone}"
|
9
|
+
puts "Тестовый ключ (из доп. конфига приложения): #{config.this_app.test_key}"
|
10
|
+
puts
|
11
|
+
0
|
12
|
+
end
|
13
|
+
|
14
|
+
def init_app
|
15
|
+
super
|
16
|
+
@config.add('app_config.yml', :app)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
app = TestApp.new(ARGV, __dir__)
|
22
|
+
|
23
|
+
app.version = '1.0'
|
24
|
+
app.releasedate = '2015-05-11'
|
25
|
+
app.shortdescription = 'Пример 4 - Различные параметры командной строки'
|
26
|
+
app.description = "CliApplication gem демо. #{app.shortdescription}"
|
27
|
+
|
28
|
+
app.help
|
29
|
+
app.footer = "{status} ({exitcode}) - приложение завершено за {executed_at} секунд (занято в памяти {memory})"
|
30
|
+
|
31
|
+
app.run
|
32
|
+
exit(app.exitcode)
|
33
|
+
|
@@ -0,0 +1,31 @@
|
|
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 Offer.first.inspect
|
9
|
+
puts
|
10
|
+
0
|
11
|
+
end
|
12
|
+
|
13
|
+
def init_active_records
|
14
|
+
require './offer.rb'
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
app = TestApp.new(ARGV, __dir__)
|
20
|
+
|
21
|
+
app.version = '1.0'
|
22
|
+
app.releasedate = '2015-05-11'
|
23
|
+
app.shortdescription = 'Пример 6 - подключение ActiveRecords и баз данных'
|
24
|
+
app.description = "CliApplication gem демо. #{app.shortdescription}"
|
25
|
+
|
26
|
+
app.help
|
27
|
+
app.footer = "{status} ({exitcode}) - приложение завершено за {executed_at} секунд (занято в памяти {memory})"
|
28
|
+
|
29
|
+
app.run
|
30
|
+
exit(app.exitcode)
|
31
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
:name: rdebug-ide
|
3
|
+
:shortdescription: ''
|
4
|
+
:version: ''
|
5
|
+
:releasedate: ''
|
6
|
+
:timezone: Moscow
|
7
|
+
:last_started_at: ''
|
8
|
+
:folders:
|
9
|
+
:avg:
|
10
|
+
:starts: 1
|
11
|
+
:executed_at: 0
|
12
|
+
:executed_at_human: 0 секунд
|
13
|
+
:memory: 28860
|
14
|
+
:last:
|
15
|
+
:started_at: ''
|
16
|
+
:executed_at: 0
|
17
|
+
:executed_at_human: 0 секунд
|
18
|
+
:memory: 28 кбайт
|
19
|
+
:exitcode: 0
|
20
|
+
:last10:
|
21
|
+
- ",0,0,28 кбайт"
|
@@ -0,0 +1,29 @@
|
|
1
|
+
---
|
2
|
+
:name: test_app.rb
|
3
|
+
:shortdescription: "Тестовое приложение"
|
4
|
+
:version: '1.0'
|
5
|
+
:releasedate: '2015-04-28'
|
6
|
+
:timezone: Moscow
|
7
|
+
:last_started_at: '2015-05-11 20:18:08 +0300'
|
8
|
+
:folders:
|
9
|
+
:app: "/Users/Stan/Documents/Development/RubyMine/cli_application/test"
|
10
|
+
:class: "/Users/Stan/Documents/Development/RubyMine/cli_application/test"
|
11
|
+
:stat: "/Users/Stan/Documents/Development/RubyMine/cli_application/test/stat"
|
12
|
+
:avg:
|
13
|
+
:starts: 6
|
14
|
+
:executed_at: 0.457864
|
15
|
+
:executed_at_human: 0.457864 секунд
|
16
|
+
:memory: 34187
|
17
|
+
:last:
|
18
|
+
:started_at: '2015-05-11 20:18:08 +0300'
|
19
|
+
:executed_at: 1.354743
|
20
|
+
:executed_at_human: 1.354743 секунд
|
21
|
+
:memory: 38 кбайт
|
22
|
+
:exitcode: 0
|
23
|
+
:last10:
|
24
|
+
- 2015-05-11 20:18:08 +0300,0,1.354743,38 кбайт
|
25
|
+
- 2015-05-10 08:51:15 +0300,0,1.242313,39 кбайт
|
26
|
+
- 2015-05-10 08:43:39 +0300,0,0.066742,37 кбайт
|
27
|
+
- 2015-05-10 08:36:33 +0300,0,0.056735,34 кбайт
|
28
|
+
- 2015-05-08 22:33:07 +0300,0,0.02665,27 кбайт
|
29
|
+
- ",0,0,25 кбайт"
|
data/test/test_app.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#encoding: utf-8
|
3
|
+
require './cli_example.rb'
|
4
|
+
|
5
|
+
class TestApp < CliExample
|
6
|
+
|
7
|
+
def main
|
8
|
+
# Внутри класса можно получать папки приложения или базового класса
|
9
|
+
# что эквивалентно __FILE__, но более удобно
|
10
|
+
puts "Приложение запущено из папки: #{self.folder.inspect}"
|
11
|
+
puts "Базовый класс расположен: #{self.folder(:class).inspect}"
|
12
|
+
|
13
|
+
# В базовом классе CliExample добавлена необязательная функция init_app
|
14
|
+
# в которой осуществляется подгрузка дополнительного конфига класса
|
15
|
+
puts @config.config.inspect
|
16
|
+
puts "Значение из доп. конфига класса: #{@config.config[:common][:test_key]}"
|
17
|
+
|
18
|
+
# В этот класс TestApp добавлена необязательная функция init_app
|
19
|
+
# в которой осуществляется подгрузка дополнительного конфига приложения
|
20
|
+
puts "Значение из доп. конфига приложения: #{@config.config[:app][:test_key]}"
|
21
|
+
|
22
|
+
puts "! Число конфигов неограничено"
|
23
|
+
|
24
|
+
# todo: progress_bar и методы st_tools
|
25
|
+
|
26
|
+
puts
|
27
|
+
puts "--- Часть 2 - ActiveRecords ------------------"
|
28
|
+
tc = Tovar.first
|
29
|
+
puts tc.inspect
|
30
|
+
|
31
|
+
|
32
|
+
puts
|
33
|
+
return 0
|
34
|
+
end
|
35
|
+
|
36
|
+
def init_app
|
37
|
+
super
|
38
|
+
add_config('app_config.yml', :app)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
app = TestApp.new(ARGV, __dir__)
|
44
|
+
|
45
|
+
app.version = '1.0'
|
46
|
+
app.releasedate = '2015-04-28'
|
47
|
+
app.shortdescription = 'Тестовое приложение'
|
48
|
+
app.description = "CliApplication gem. #{app.shortdescription}"
|
49
|
+
|
50
|
+
app.set_argv(:donwcase, 'do', 'none', 'Начать исполнение действий')
|
51
|
+
app.set_argv(:range, 'user_id', '53,124', 'Массив идентификаторов пользователей')
|
52
|
+
app.set_argv(:range, 'empty', '', 'Массив пустых значений. Массив пустых значений. Массив пустых значений. Массив пустых значений. ')
|
53
|
+
app.set_argv(:boolean, 'debug', 'false', 'Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. Начать отладку. ')
|
54
|
+
app.set_argv(:upcase, 'city', 'Нет', 'Город для анализа')
|
55
|
+
|
56
|
+
app.help
|
57
|
+
|
58
|
+
app.run
|
59
|
+
exit(app.exitcode)
|
60
|
+
|