ass_launcher 0.1.1.alpha
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 +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
|