ass_launcher 0.1.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
@@ -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