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.
@@ -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