ass_launcher 0.1.1.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.simplecov +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +122 -0
- data/Rakefile +10 -0
- data/ass_launcher.gemspec +32 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/ass_launcher/enterprise/binary_wrapper.rb +367 -0
- data/lib/ass_launcher/enterprise/cli/arguments_builder.rb +41 -0
- data/lib/ass_launcher/enterprise/cli/cli.spec +256 -0
- data/lib/ass_launcher/enterprise/cli/parameters.rb +289 -0
- data/lib/ass_launcher/enterprise/cli/spec_dsl/dsl_helpers.rb +66 -0
- data/lib/ass_launcher/enterprise/cli/spec_dsl.rb +209 -0
- data/lib/ass_launcher/enterprise/cli.rb +131 -0
- data/lib/ass_launcher/enterprise/ole/ole_binaries.rb +249 -0
- data/lib/ass_launcher/enterprise/ole/win32ole.rb +92 -0
- data/lib/ass_launcher/enterprise/ole.rb +188 -0
- data/lib/ass_launcher/enterprise/web_clients.rb +59 -0
- data/lib/ass_launcher/enterprise.rb +111 -0
- data/lib/ass_launcher/support/connection_string.rb +422 -0
- data/lib/ass_launcher/support/platforms.rb +232 -0
- data/lib/ass_launcher/support/shell/process_holder.rb +212 -0
- data/lib/ass_launcher/support/shell.rb +374 -0
- data/lib/ass_launcher/support/v8i_file.rb +66 -0
- data/lib/ass_launcher/support/v8i_section.rb +70 -0
- data/lib/ass_launcher/support.rb +9 -0
- data/lib/ass_launcher/version.rb +3 -0
- data/lib/ass_launcher.rb +6 -0
- metadata +202 -0
@@ -0,0 +1,256 @@
|
|
1
|
+
# Здесь описана спецификация параметров cli запуска 1С:Предприятие
|
2
|
+
# Для описания спецификации используется интерфейс модуля:
|
3
|
+
# AssLauncher::Enterprise::Cli::Dsl
|
4
|
+
|
5
|
+
# Параметры определяются для режимов запуска платформы и разбиваются на группы.
|
6
|
+
# Режимы запуска определены в AssLauncher::Enterprise::Cli::DEFINED_MODES
|
7
|
+
# Группы определяются в этом модуле вызовом define_group
|
8
|
+
#
|
9
|
+
# Определение параметра производится вызовом методов string, parh и т.д завернутых в блоки
|
10
|
+
# @example
|
11
|
+
# mode :name do #Параметры для заданных режимов запуска 1С:Предприятие
|
12
|
+
# group :name do #Добавляет параметры в указанную группу
|
13
|
+
# #определение параметра cli
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# Группы параметров определяют группу описывают группу и задают приоритет группы
|
18
|
+
# параметров для формирования справочной информации
|
19
|
+
# @example
|
20
|
+
# define_group :grou_name, 'grop description', 10 # => grou_name: {desc: 'grop description', priority: 10}
|
21
|
+
|
22
|
+
# ==== Определение максимальной версии платформы для котророй определены параметры
|
23
|
+
# При изменении спецификации требуется установить актуальный номер версии
|
24
|
+
enterprise_version '8.2.17'
|
25
|
+
|
26
|
+
# ==== Описание режимов запуска ====
|
27
|
+
|
28
|
+
describe_mode :enterprise, 'Запуск в режиме предприятия', 'ENTERPRISE [parameters]'
|
29
|
+
describe_mode :designer, 'Запуск в режиме конфигуратора', 'DESIGNER [parameters]'
|
30
|
+
describe_mode :createinfobase, 'Создание информационной базы', 'CREATEINFOBASE <connection_string> [parameters]'
|
31
|
+
|
32
|
+
# ==== Определения групп параметров ====
|
33
|
+
|
34
|
+
define_group :connection, 'Соединение с информационной базой', 0
|
35
|
+
define_group :authentication, 'Авторизация пользователя информационной базы', 10
|
36
|
+
define_group :debug, 'Отладка и тестирование', 30
|
37
|
+
define_group :packge_mode, 'Пакетный режим конфигуратора', 40
|
38
|
+
define_group :repository, 'Работа с хранилищем конфигурации', 50
|
39
|
+
define_group :distribution, 'Cоздание файлов поставки и обновления', 60
|
40
|
+
define_group :other, 'Прочие', 100
|
41
|
+
|
42
|
+
# ==== Определения параметров ====
|
43
|
+
|
44
|
+
mode :createinfobase do
|
45
|
+
group :other do
|
46
|
+
path '/UseTemplate', 'создание информационной базы на основе дампа (.dt файл) или конфигурации (.cf файл)'
|
47
|
+
string '/AddInList', 'имя под которым надо добавить базу в пользовательский файл .v8i'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
mode :enterprise, :designer, :createinfobase do
|
52
|
+
group :other do
|
53
|
+
path('/Out', 'файл используемый 1С вместо stdout и stderr. В файл выводятся служебные сообщения, а также сообщения метода Сообщить()')
|
54
|
+
flag('/DisableStartupDialogs', 'подавляет gui диалоги')
|
55
|
+
flag('/DisableStartupMessages', 'подавляет gui сообщения')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
mode :enterprise, :designer do
|
60
|
+
group :connection do
|
61
|
+
path '/F', 'путь к файловой информационной базе'
|
62
|
+
string '/S', 'адрес информационной базы, хранящейся на сервере "1С:Предприятие 8". Имеет вид "host:port/ib_name"'
|
63
|
+
end
|
64
|
+
|
65
|
+
group :authentication do
|
66
|
+
string '/N', 'имя пользователя информационной базы'
|
67
|
+
string '/P', 'пароль пользователя информационной базы'
|
68
|
+
end
|
69
|
+
|
70
|
+
group :other do
|
71
|
+
switch '/UseHwLicenses', 'определяет режим поиска локального ключа защиты', switch_list: switch_list(:"+" => 'поиск выполняется', :"-" => 'поиск не выполняется')
|
72
|
+
string '/L', 'указывается код языка интерфейса платформы: ru - Русский, en - Английский, uk - Украинский и т.д. Полный список см. в документации 1С'
|
73
|
+
skip '/RunShortcut', 'позволяет запустить систему со списком баз из указанного файла v8i'
|
74
|
+
string '/Z', 'установка разделителей', all_client('>= 8.2.17')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
mode :enterprise do
|
79
|
+
group :connection do
|
80
|
+
url '/WS', 'url соединения c базой опубликованной через web сервер', thin_client('>= 8.2')
|
81
|
+
flag '/SAOnRestart', 'указывает на обязательность запроса пароля при перезапуске системы из данного сеанса работы'
|
82
|
+
flag '/NoProxy', 'запретить использование прокси', thin_client('>= 8.2')
|
83
|
+
flag '/Proxy', 'использовать указанные настройки прокси', thin_client('>= 8.2') do
|
84
|
+
url '-PSrv', 'адрес прокси', required: true
|
85
|
+
num '-PPort', 'порт прокси', required: true
|
86
|
+
string '-PUser', 'имя пользователя прокси'
|
87
|
+
string '-PPwd', 'имя пользователя прокси'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
group :authentication do
|
92
|
+
switch '/WA', 'аутентификация средствами операционной системы', switch_list: switch_list(:"+" => 'обязательное применение (значение по умолчанию)', :"-" => 'запрет применения')
|
93
|
+
skip '/WSA'
|
94
|
+
string '/WSN', 'имя пользователя для аутентификации на веб-сервере', thin_client('>= 8.2')
|
95
|
+
string '/WSP', 'пароль пользователя для аутентификации на веб-сервере', thin_client('>= 8.2')
|
96
|
+
end
|
97
|
+
|
98
|
+
group :other do
|
99
|
+
chose '/O', 'определяет скорость соединения', thin_client('>= 8.2'), chose_list: chose_list(Normal: 'обычная', Low: 'низкая')
|
100
|
+
skip '/AppAutoCheckVersion'
|
101
|
+
skip '/AppAutoCheckMode'
|
102
|
+
skip '/LogUI'
|
103
|
+
string '/VL', 'код локализации сеанса'
|
104
|
+
string '/C', 'передача строкового значения в экземпляр 1С приложения.'\
|
105
|
+
' Значение доступно в глобальной переменной `ПараметрЗапуска`.'\
|
106
|
+
' Если в строке есть двойные кавычки работает криво.',
|
107
|
+
value_validator: (Proc.new do |value|
|
108
|
+
fail ArgumentError, 'In /C parameter char `\"` forbidden for use' if /"/ =~ value
|
109
|
+
end)
|
110
|
+
flag '/RunModeOrdinaryApplication', 'запуск толстого клиента в режиме обычного приложения не зависимо от настроек', thick_client('>= 8.2')
|
111
|
+
flag '/RunModeManagedApplication', 'запуск толстого клиента в режиме управляемого приложения не зависимо от настроек', thick_client('>= 8.2')
|
112
|
+
string '/UC', 'код доступа для установки соединения с заблокированной базой'
|
113
|
+
skip '/SLev'
|
114
|
+
path '/Execute', 'запуска внешней обработки в режиме 1С:Предприятие непосредственно после старта системы'
|
115
|
+
skip '/ClearCache'
|
116
|
+
skip '/@'
|
117
|
+
flag '/UsePrivilegedMode', 'запуск в режиме привилегированного сеанса'
|
118
|
+
skip '/TComp'
|
119
|
+
flag '/itdi', 'режим интерфейса с использованием закладок'
|
120
|
+
end
|
121
|
+
|
122
|
+
group :debug do
|
123
|
+
flag '/Debug', 'запуск сессии отладки'
|
124
|
+
url '/DebuggerURL', 'url отладчика'
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
mode :designer do
|
129
|
+
group :packge_mode do
|
130
|
+
path '/DumpIB', 'выгрузка дампа информационной базы'
|
131
|
+
path '/RestoreIB', 'загрузка информационной базы из дампа'
|
132
|
+
path '/DumpCfg', 'сохранение конфигурации в файл'
|
133
|
+
path '/LoadCfg', 'загрузка конфигурации из файла'
|
134
|
+
flag '/UpdateDBCfg', 'обновление конфигурации базы данных' do
|
135
|
+
flag '-WarningsAsErrors', 'все предупредительные сообщения трактуются как ошибки'
|
136
|
+
flag '-Server', 'обновление будет выполняться на сервере'
|
137
|
+
end
|
138
|
+
path '/UpdateCfg', 'обновление конфигурации, находящейся на поддержке из .cf или .cfu файла'
|
139
|
+
skip '/ConfigurationRepositoryUpdateCfg' # похоже это параметр для работы с хранилищем
|
140
|
+
skip '/DumpConfigFiles', 'выгрузка свойств объектов метаданных конфигурации'
|
141
|
+
skip '/LoadConfigFiles', 'загрузка свойств объектов метаданных конфигурации'
|
142
|
+
path '/DumpDBCfg', 'сохранение конфигурации базы данных в файл'
|
143
|
+
flag '/RollbackCfg', 'возврат к конфигурации базы данных'
|
144
|
+
flag '/CheckModules', 'синт. контроль' do
|
145
|
+
flag '-ThinClient', 'в контексте тонкого клиента'
|
146
|
+
flag '-WebClient', 'в контексте веб-клиента'
|
147
|
+
flag '-Server', 'в контексте сервера'
|
148
|
+
flag '-ExternalConnection', 'в контексте внешнего соединения'
|
149
|
+
flag '-ThickClientOrdinaryApplication', 'в контексте толстого клиента'
|
150
|
+
end
|
151
|
+
|
152
|
+
flag '/IBCheckAndRepair', 'выполнить тестирование и исправление информационной базы' do
|
153
|
+
flag '-ReIndex', 'реиндексация таблиц'
|
154
|
+
flag '-LogIntegrity', 'проверка логической целостности'
|
155
|
+
flag '-LogAndRefsIntegrity', 'проверка логической и ссылочной целостности'
|
156
|
+
flag '-RecalcTotals', 'пересчет итогов'
|
157
|
+
flag '-IBCompression', 'сжатие таблиц'
|
158
|
+
flag '-Rebuild', 'реструктуризация таблиц информационной базы'
|
159
|
+
flag '-TestOnly', 'только тестирование'
|
160
|
+
switch '-BadRef', 'действия для битых ссылок',
|
161
|
+
switch_list: switch_list(
|
162
|
+
Create: 'создавать объекты для битых ссылок',
|
163
|
+
Clear: 'очищать объекты от битых ссылок',
|
164
|
+
None: 'не изменять'
|
165
|
+
)
|
166
|
+
switch '-BadData', 'при частичной потере объектов',
|
167
|
+
switch_list: switch_list(
|
168
|
+
Create: 'создавать объекты',
|
169
|
+
Delete: 'удалять объекты'
|
170
|
+
)
|
171
|
+
flag '-UseStartPoint', 'использовать сохраненную точку возврата для продолжения тестирования с места, на котором оно было прервано'
|
172
|
+
switch '-TimeLimit', 'ограничение максимального времени сеанса тестирования. Строка формата hhh:mm',
|
173
|
+
value_validator: (Proc.new do |value|
|
174
|
+
fail ArgumentError, "Use hhh:mm for -TimeLimit parameter but `#{value}' given" if /\A\d{1,3}:\d{2}\z/ =~ value
|
175
|
+
end),
|
176
|
+
switch_value: (Proc.new do |value|; ":#{value}" end)
|
177
|
+
end
|
178
|
+
|
179
|
+
path '/CreateDistributive', 'создания комплекта поставки в указанном каталоге' do
|
180
|
+
path '-File', 'имя файла описания комплекта поставки'
|
181
|
+
string '-Option','вариант поставки'
|
182
|
+
switch '-Make', 'создать',
|
183
|
+
switch_list: switch_list(
|
184
|
+
Setup: 'комплект поставки (используется по умолчанию)',
|
185
|
+
Files: 'файлы поставки'
|
186
|
+
)
|
187
|
+
path '-digisign', 'файл с параметрами лицензирования'
|
188
|
+
end
|
189
|
+
flag '/ResetMasterNode', 'сброс главного узла РИБ'
|
190
|
+
flag '/CheckConfig', 'централизованная проверка конфигурации' do
|
191
|
+
flag '-ConfigLogIntegrity', 'проверка логической целостности конфигурации'
|
192
|
+
flag '-IncorrectReferences', 'поиск некорректных ссылок, поиск ссылок на удаленные объекты'
|
193
|
+
flag '-ThinClient', 'синт. контроль модулей для режима управляемого приложения (тонкий клиент), выполняемого в файловом режиме'
|
194
|
+
flag '-WebClient', 'синт. контроль модулей в режиме веб-клиента'
|
195
|
+
flag '-Server', 'синт. контроль модулей в режиме сервера 1С:Предприятия'
|
196
|
+
flag '-ExternalConnection', 'синт. контроль модулей в режиме внешнего соединения, выполняемого в файловом режиме'
|
197
|
+
flag '-ExternalConnectionServer', 'синт. контроль модулей в режиме внешнего соединения, выполняемого в клиент-серверном режиме'
|
198
|
+
flag '-ThickClientManagedApplication', 'синт. контроль модулей в режиме управляемого приложения (толстый клиент), выполняемого в файловом режиме'
|
199
|
+
flag '-ThickClientServerManagedApplication', ' синт. контроль модулей в режиме управляемого приложения (толстый клиент), выполняемого в клиент-серверном режиме'
|
200
|
+
flag '-ThickClientOrdinaryApplication', 'синт. контроль модулей в режиме обычного приложения (толстый клиент), выполняемого в файловом режиме'
|
201
|
+
flag '-ThickClientServerOrdinaryApplication', 'синт. контроль модулей в режиме обычного приложения (толстый клиент), выполняемого в клиент-серверном режиме'
|
202
|
+
flag '-DistributiveModules', 'проверяется возможность генерации образов модулей без исходных текстов'
|
203
|
+
flag '-UnreferenceProcedures', 'поиск неиспользуемых процедур и функций'
|
204
|
+
flag '-HandlersExistence', 'проверка существования назначенных обработчиков'
|
205
|
+
flag '-EmptyHandlers', 'поиск пустых обработчиков'
|
206
|
+
flag '-ExtendedModulesCheck', 'проверка обращений к методам и свойствам объектов "через точку" (для ограниченного набора типов)'
|
207
|
+
end
|
208
|
+
string '/ReduceEventLogSize', 'сокращение журнала регистрации, дата в формате ГГГГ-ММ-ДД',
|
209
|
+
value_validator: (Proc.new do |value|
|
210
|
+
fail ArgumentError, "Use ГГГГ-ММ-ДД for /ReduceEventLogSize parameter but `#{value}' given" if /\A\d{4}-\d{2}-\d{2}\z/ =~ value
|
211
|
+
end) do
|
212
|
+
path '-saveAs', 'файл для сохранения копии удаляемых записей'
|
213
|
+
flag '-KeepSplitting', 'требуется сохранить разделение на файлы по периодам'
|
214
|
+
end
|
215
|
+
path '/CreateTemplateListFile', 'создание файла шаблонов конфигураций в указанном файле' do
|
216
|
+
flag '-TemplatesSourcePath', 'путь для поиска файлов шаблонов конфигураций'
|
217
|
+
end
|
218
|
+
skip '/ConvertFiles', 'параметр пакетной конвертации файлов 1С:Предприятия 8.x'
|
219
|
+
flag '/Visible', 'делает исполнение пакетной команды видимым пользователю'
|
220
|
+
skip '/RunEnterprise', 'предназначен для запуска 1С:Предприятия после исполнения пакетной команды'
|
221
|
+
skip '/DumpResult', 'предназначен для записи результата работы конфигуратора в файл'
|
222
|
+
end
|
223
|
+
|
224
|
+
group :repository do
|
225
|
+
path '/ConfigurationRepositoryF', 'каталог хранилища'
|
226
|
+
string '/ConfigurationRepositoryN', 'имя пользователя хранилища'
|
227
|
+
string '/ConfigurationRepositoryP', 'пароль пользователя хранилища'
|
228
|
+
path '/ConfigurationRepositoryDumpCfg', 'сохранить конфигурацию из хранилища в файл' do
|
229
|
+
string '-v', 'номер версии хранилища'
|
230
|
+
end
|
231
|
+
path '/ConfigurationRepositoryUpdateCfg', 'обновить конфигурацию хранилища из хранилища' do
|
232
|
+
string '-v', 'номер версии хранилища'
|
233
|
+
flag '-revised', 'получать захваченные объекты, если потребуется'
|
234
|
+
flag '-force', 'подтверждение получения новых или удаления существующих объектов конфигурации'
|
235
|
+
end
|
236
|
+
flag '/ConfigurationRepositoryUnbindCfg', 'отключение конфигурации от хранилища' do
|
237
|
+
flag '-force', 'принудительное отключение от хранилища'
|
238
|
+
end
|
239
|
+
path '/ConfigurationRepositoryReport', 'построение отчета по истории хранилища' do
|
240
|
+
string '-NBegin', 'номер версии начала отчета'
|
241
|
+
string '-NEnd', 'номер версии окончания отчета'
|
242
|
+
flag '-GroupByObject', 'с группировкой по объектам'
|
243
|
+
flag '-GroupByComment', 'с группировкой по комментарию'
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
group :distribution do
|
248
|
+
flag '/CreateDistributionFiles', 'создание файлов поставки и обновления' do
|
249
|
+
path '-cffile', 'создать дистрибутив (.cf файл)'
|
250
|
+
path '-cfufile', 'создать обновление дистрибутива (.cfu файл)'
|
251
|
+
path '-f', 'дистрибутив включаемый в обновление (.cf файл)'
|
252
|
+
string '-v', 'версия дистрибутива включаемого в обновление'
|
253
|
+
path '–digisign', 'файл с параметрами лицензирования'
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
@@ -0,0 +1,289 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module AssLauncher
|
4
|
+
module Enterprise
|
5
|
+
module Cli
|
6
|
+
# 1C Enterprise cli parameters
|
7
|
+
# Fuckin 1C have very obscure cli api
|
8
|
+
# Parameters may have subparameters. All parameters and subparameters
|
9
|
+
# expects argument or not. Some parameters may be modified with + or - or
|
10
|
+
# other values like this: /Parm or /Param+ or /Param- or /Param:date:time.
|
11
|
+
#
|
12
|
+
# For implement binding parameters and subparameters, parameter have
|
13
|
+
# +parent+ propery. If +parent+ property is +nil+ it is root parameter
|
14
|
+
# and subpurameter if else
|
15
|
+
module Parameters
|
16
|
+
DEFAULT_OPTIONS = {
|
17
|
+
required: false,
|
18
|
+
value_validator: proc { |value| value },
|
19
|
+
switch_list: nil,
|
20
|
+
chose_list: nil,
|
21
|
+
switch_value: proc { |value| value }
|
22
|
+
}.freeze
|
23
|
+
|
24
|
+
# Parameter name like it define in 1C cli api
|
25
|
+
# Name may start with '/' or '-' key. Example: /Parameter or
|
26
|
+
# -subpurameter
|
27
|
+
# @return string
|
28
|
+
attr_reader :name
|
29
|
+
# Parameter help message
|
30
|
+
# @return string
|
31
|
+
attr_reader :desc
|
32
|
+
# 1C binary type and version for which parameter defined
|
33
|
+
# @return [BinaryMatcher]
|
34
|
+
# @api private
|
35
|
+
attr_reader :binary_matcher
|
36
|
+
# Parameter group for build cli api help
|
37
|
+
# @return [Symbol]
|
38
|
+
attr_reader :group
|
39
|
+
# 1C binary run mode for which parameter defined. see
|
40
|
+
# {Cli::DEFINED_MODES}
|
41
|
+
# @return [Array<Symbol>]
|
42
|
+
attr_reader :modes
|
43
|
+
# Parent parameter for subpurameter
|
44
|
+
# @return kinde of [String]
|
45
|
+
attr_reader :parent
|
46
|
+
# Options
|
47
|
+
# @return [Hash]
|
48
|
+
attr_reader :options
|
49
|
+
|
50
|
+
def match?(binary_wrapper, run_mode)
|
51
|
+
binary_matcher.match?(binary_wrapper) && modes.include?(run_mode)
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_sym
|
55
|
+
name.downcase.to_sym
|
56
|
+
end
|
57
|
+
|
58
|
+
def full_name
|
59
|
+
return name if root?
|
60
|
+
"#{parent.full_name}#{name}"
|
61
|
+
end
|
62
|
+
|
63
|
+
def parents
|
64
|
+
return [] if root?
|
65
|
+
parent.parents << parent
|
66
|
+
end
|
67
|
+
|
68
|
+
def deep
|
69
|
+
parents.size
|
70
|
+
end
|
71
|
+
|
72
|
+
def root?
|
73
|
+
parent.nil?
|
74
|
+
end
|
75
|
+
|
76
|
+
def child?(expected_parent)
|
77
|
+
return false if root?
|
78
|
+
parent == expected_parent
|
79
|
+
end
|
80
|
+
|
81
|
+
def to_s
|
82
|
+
name.to_s
|
83
|
+
end
|
84
|
+
|
85
|
+
def to_args(value)
|
86
|
+
[key(value), value(value)]
|
87
|
+
end
|
88
|
+
|
89
|
+
def switch_list
|
90
|
+
options[:switch_list]
|
91
|
+
end
|
92
|
+
|
93
|
+
def chose_list
|
94
|
+
options[:chose_list]
|
95
|
+
end
|
96
|
+
|
97
|
+
def value_validator
|
98
|
+
options[:value_validator]
|
99
|
+
end
|
100
|
+
|
101
|
+
def required?
|
102
|
+
options[:required]
|
103
|
+
end
|
104
|
+
|
105
|
+
def key(_value)
|
106
|
+
name
|
107
|
+
end
|
108
|
+
private :key
|
109
|
+
|
110
|
+
def validate(value)
|
111
|
+
value_validator.call value
|
112
|
+
end
|
113
|
+
private :validate
|
114
|
+
|
115
|
+
def value(value)
|
116
|
+
validate(value)
|
117
|
+
value
|
118
|
+
end
|
119
|
+
private :value
|
120
|
+
|
121
|
+
def def_options
|
122
|
+
DEFAULT_OPTIONS
|
123
|
+
end
|
124
|
+
private :def_options
|
125
|
+
|
126
|
+
def usage
|
127
|
+
fail NotImplementedError
|
128
|
+
end
|
129
|
+
|
130
|
+
def auto_binary_matcher(arg)
|
131
|
+
return arg if arg.is_a? BinaryMatcher
|
132
|
+
return BinaryMatcher.new(auto_client, arg) if arg.is_a? String
|
133
|
+
BinaryMatcher.new auto_client
|
134
|
+
end
|
135
|
+
private :auto_binary_matcher
|
136
|
+
|
137
|
+
def auto_client
|
138
|
+
#return :thick if modes.include?(:createinfobase) ||
|
139
|
+
# modes.include?(:designer)
|
140
|
+
return :thick unless modes.include?(:enterprise)
|
141
|
+
:all
|
142
|
+
end
|
143
|
+
private :auto_client
|
144
|
+
|
145
|
+
# Parameter expects string value
|
146
|
+
class StringParam
|
147
|
+
include Parameters
|
148
|
+
# @api private
|
149
|
+
# @param name [String] name of parameter like defined 1C cli api
|
150
|
+
# @param desc [String] help description
|
151
|
+
# @param binary_matcher [BinaryMatcher, String, nil] for which
|
152
|
+
# parameter defined
|
153
|
+
# - If nil will be build default matcher.
|
154
|
+
# - If string. String value mast be suitable for Gem::Requirement.
|
155
|
+
# In this case, will be build matcher for version defined in
|
156
|
+
# string and suitable bynary type detected on run_modes
|
157
|
+
# @param group [Symbol] parameter group
|
158
|
+
# @param modes [Array] run modes for which parameter defined
|
159
|
+
# @param parent kinde of [StringParam] parent for subpurameter
|
160
|
+
# @param options [Hash] see {Parameters::DEFAULT_OPTIONS}
|
161
|
+
def initialize(name, desc, binary_matcher,
|
162
|
+
group, modes, parent = nil, **options)
|
163
|
+
@name = name
|
164
|
+
@desc = desc
|
165
|
+
@modes = modes || Cli::DEFINED_MODES
|
166
|
+
@binary_matcher = auto_binary_matcher(binary_matcher)
|
167
|
+
@group = group
|
168
|
+
@options = def_options.merge options
|
169
|
+
@parent = parent
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
# Parameter expects filesystem path
|
174
|
+
# Path string cam came from diferent sources
|
175
|
+
# and have windows, unix or unix-cygwin format
|
176
|
+
# It class instance make path string platform independet use
|
177
|
+
# {AssLauncher::Support::Platforms::PathExtension} class
|
178
|
+
class Path < StringParam
|
179
|
+
include AssLauncher::Support::Platforms
|
180
|
+
def value(value)
|
181
|
+
platform.path(value).to_s
|
182
|
+
end
|
183
|
+
private :value
|
184
|
+
end
|
185
|
+
|
186
|
+
# Chose parameter expects argunment value from chose_list
|
187
|
+
class Chose < StringParam
|
188
|
+
def validate(value)
|
189
|
+
fail ArgumentError, "Wrong value `#{value}' for #{name} parameter"\
|
190
|
+
unless chose_list.key? value.to_sym
|
191
|
+
end
|
192
|
+
private :validate
|
193
|
+
end
|
194
|
+
|
195
|
+
# Flag parameter not expects argument
|
196
|
+
class Flag < StringParam
|
197
|
+
def to_args
|
198
|
+
super ''
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
# Switch parameter is most stupid cli parameter of 1C:Enterprise.
|
203
|
+
# Switch parameter expects argument value from +:switch_list* or
|
204
|
+
# block +:switch_value+ which return modified value argument.
|
205
|
+
# Switch parameter modifyed self name when uses parameter value
|
206
|
+
# @example
|
207
|
+
# # /UseHwLicenses have {:"+"=>'',:"-"=>''} switch_list and:
|
208
|
+
# to_args(:"+") # => ['/UseHwLicenses+','']
|
209
|
+
# to_args(:"-") # => ['/UseHwLicenses-','']
|
210
|
+
# to_args(:"bad value") # => ArgumentError
|
211
|
+
#
|
212
|
+
# # -TimeLimit have block:
|
213
|
+
# switch_value: =>{|value|; ":#{value}"}
|
214
|
+
# # and
|
215
|
+
# to_args("12:00") #=> ['-TimeLimit:12:00','']
|
216
|
+
class Switch < StringParam
|
217
|
+
def value(_value)
|
218
|
+
''
|
219
|
+
end
|
220
|
+
private :value
|
221
|
+
|
222
|
+
def key(value)
|
223
|
+
"#{name}#{switch_value(value)}"
|
224
|
+
end
|
225
|
+
private :key
|
226
|
+
|
227
|
+
def switch_value(value)
|
228
|
+
if switch_list
|
229
|
+
fail ArgumentError, "Wrong value #{value} for parameter #{name}"\
|
230
|
+
unless switch_list.key? value.to_sym
|
231
|
+
end
|
232
|
+
validate(value)
|
233
|
+
options[:switch_value].call(value)
|
234
|
+
end
|
235
|
+
private :switch_value
|
236
|
+
end
|
237
|
+
|
238
|
+
# List of parameters
|
239
|
+
class ParametersList
|
240
|
+
def initialize
|
241
|
+
@parameters = []
|
242
|
+
end
|
243
|
+
|
244
|
+
attr_reader :parameters
|
245
|
+
private :parameters
|
246
|
+
|
247
|
+
def param_defined?(p)
|
248
|
+
!find(p.name, p.parent).nil?
|
249
|
+
end
|
250
|
+
|
251
|
+
# Add parameter in to tail of list
|
252
|
+
# @param p [StringParam Flag Path Switch Chose] parameter instance
|
253
|
+
# @raise [ArgumentError] if parameter alrady present in list
|
254
|
+
def <<(p)
|
255
|
+
fail ArgumentError,
|
256
|
+
"Parameter #{p.full_name} alrady defined" if\
|
257
|
+
param_defined?(p)
|
258
|
+
@parameters << p
|
259
|
+
end
|
260
|
+
alias_method :"+", :"<<"
|
261
|
+
alias_method :add, :"<<"
|
262
|
+
|
263
|
+
# Find parameter in list
|
264
|
+
# @param name [String] name of finded parameter
|
265
|
+
# @param parent [StringParam Flag Path Switch Chose] parent for
|
266
|
+
# subparameter
|
267
|
+
# @return [StringParam Flag Path Switch Chose nil] founded parameter
|
268
|
+
def find(name, parent)
|
269
|
+
parameters.each do |p|
|
270
|
+
if p.to_sym == name.downcase.to_sym &&
|
271
|
+
p.parent == parent
|
272
|
+
return p
|
273
|
+
end
|
274
|
+
end
|
275
|
+
nil
|
276
|
+
end
|
277
|
+
|
278
|
+
def each(&block)
|
279
|
+
parameters.each(&block)
|
280
|
+
end
|
281
|
+
|
282
|
+
def usage
|
283
|
+
fail NotImplementedError
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module AssLauncher
|
4
|
+
module Enterprise
|
5
|
+
module Cli
|
6
|
+
module SpecDsl
|
7
|
+
# @api private
|
8
|
+
module DslHelpers
|
9
|
+
# Translating stub
|
10
|
+
def _t(s)
|
11
|
+
s
|
12
|
+
end
|
13
|
+
|
14
|
+
def defined_modes
|
15
|
+
AssLauncher::Enterprise::Cli::DEFINED_MODES
|
16
|
+
end
|
17
|
+
private :defined_modes
|
18
|
+
|
19
|
+
def described_modes
|
20
|
+
@described_modes ||= {}
|
21
|
+
end
|
22
|
+
|
23
|
+
def parameters_groups
|
24
|
+
@parameters_groups ||= {}
|
25
|
+
end
|
26
|
+
|
27
|
+
def parameters
|
28
|
+
@parameters ||= Parameters::ParametersList.new
|
29
|
+
end
|
30
|
+
|
31
|
+
attr_accessor :current_modes
|
32
|
+
private :current_modes, :current_modes=
|
33
|
+
|
34
|
+
attr_accessor :current_group
|
35
|
+
private :current_group, :current_group=
|
36
|
+
|
37
|
+
def parents_stack
|
38
|
+
@parents_stack ||= []
|
39
|
+
end
|
40
|
+
private :parents_stack
|
41
|
+
|
42
|
+
def current_parent
|
43
|
+
parents_stack[0]
|
44
|
+
end
|
45
|
+
private :current_parent
|
46
|
+
|
47
|
+
def new_param(klass, name, desc, binary_matcher, **options, &block)
|
48
|
+
p = klass.new(name, desc, binary_matcher, current_group,
|
49
|
+
current_modes, current_parent, **options)
|
50
|
+
return unless p.match?(binary_wrapper, run_mode)
|
51
|
+
parameters << p
|
52
|
+
eval_sub_params(p, &block) if block_given?
|
53
|
+
end
|
54
|
+
private :new_param
|
55
|
+
|
56
|
+
def eval_sub_params(p, &block)
|
57
|
+
parents_stack.unshift p
|
58
|
+
instance_eval(&block)
|
59
|
+
parents_stack.shift
|
60
|
+
end
|
61
|
+
private :eval_sub_params
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|