ass_launcher 0.1.1.alpha → 0.2.0
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 +4 -4
- data/README.md +69 -67
- data/Rakefile +19 -0
- data/ass_launcher.gemspec +8 -2
- data/bin/dev-helper +7 -0
- data/bin/lib/dev_helper/cli_def_report.rb +191 -0
- data/bin/lib/dev_helper/cli_def_snippets.rb +426 -0
- data/bin/lib/dev_helper/designer.rb +172 -0
- data/bin/lib/dev_helper.rb +59 -0
- data/examples/arguments_builder_example.rb +150 -0
- data/examples/binary_wrappers_example.rb +211 -0
- data/examples/connection_string_example.rb +59 -0
- data/examples/create_infobase_example.rb +45 -0
- data/examples/enterprise_ole_example.rb +238 -0
- data/examples/enterprise_out_example.rb +87 -0
- data/examples/enterprise_running_example.rb +103 -0
- data/examples/example_helper.rb +122 -0
- data/examples/templates/example_template.cf +0 -0
- data/examples/templates/example_template.v8i +9 -0
- data/examples/templates/hello.epf +0 -0
- data/examples/troubles/with_creteinfobase_example.rb +408 -0
- data/examples/troubles/with_running_1c_example.rb +212 -0
- data/examples/v8i_file_example.rb +72 -0
- data/examples/webclient_example.rb +67 -0
- data/lib/ass_launcher/api.rb +113 -0
- data/lib/ass_launcher/enterprise/binary_wrapper.rb +159 -144
- data/lib/ass_launcher/enterprise/cli/arguments_builder.rb +177 -16
- data/lib/ass_launcher/enterprise/cli/binary_matcher.rb +69 -0
- data/lib/ass_launcher/enterprise/cli/parameters.rb +297 -44
- data/lib/ass_launcher/enterprise/cli/spec_dsl/dsl_helpers.rb +111 -5
- data/lib/ass_launcher/enterprise/cli/spec_dsl.rb +102 -51
- data/lib/ass_launcher/enterprise/cli.rb +50 -90
- data/lib/ass_launcher/enterprise/cli_def/8.2.17.rb +317 -0
- data/lib/ass_launcher/enterprise/cli_def/8.2.18.rb +3 -0
- data/lib/ass_launcher/enterprise/cli_def/8.3.3.rb +90 -0
- data/lib/ass_launcher/enterprise/cli_def/8.3.4.rb +58 -0
- data/lib/ass_launcher/enterprise/cli_def/8.3.5.rb +21 -0
- data/lib/ass_launcher/enterprise/cli_def/8.3.6.rb +91 -0
- data/lib/ass_launcher/enterprise/cli_def/8.3.7.rb +34 -0
- data/lib/ass_launcher/enterprise/cli_def/8.3.8.rb +127 -0
- data/lib/ass_launcher/enterprise/cli_def/8.3.9.rb +131 -0
- data/lib/ass_launcher/enterprise/cli_def.rb +46 -0
- data/lib/ass_launcher/enterprise/cli_defs_loader.rb +36 -0
- data/lib/ass_launcher/enterprise/ole/ole_binaries.rb +9 -2
- data/lib/ass_launcher/enterprise/ole/win32ole.rb +1 -1
- data/lib/ass_launcher/enterprise/ole.rb +17 -1
- data/lib/ass_launcher/enterprise/web_client.rb +164 -0
- data/lib/ass_launcher/enterprise.rb +33 -6
- data/lib/ass_launcher/support/connection_string.rb +33 -8
- data/lib/ass_launcher/support/linux.rb +88 -0
- data/lib/ass_launcher/support/platforms.rb +42 -10
- data/lib/ass_launcher/support/shell.rb +33 -6
- data/lib/ass_launcher/support/v8i_file.rb +3 -1
- data/lib/ass_launcher/support/v8i_section.rb +88 -40
- data/lib/ass_launcher/support.rb +1 -0
- data/lib/ass_launcher/version.rb +8 -1
- data/lib/ass_launcher.rb +1 -0
- metadata +79 -17
- data/lib/ass_launcher/enterprise/cli/cli.spec +0 -256
- data/lib/ass_launcher/enterprise/web_clients.rb +0 -59
@@ -0,0 +1,69 @@
|
|
1
|
+
module AssLauncher
|
2
|
+
module Enterprise
|
3
|
+
module Cli
|
4
|
+
# @api private
|
5
|
+
class BinaryMatcher
|
6
|
+
ALL_CLIENTS = [:thick, :thin, :web]
|
7
|
+
|
8
|
+
def self.modes_for
|
9
|
+
@modes_for ||= {
|
10
|
+
web: Enterprise::WebClient.run_modes,
|
11
|
+
thick: Enterprise::BinaryWrapper::ThickClient.run_modes,
|
12
|
+
thin: Enterprise::BinaryWrapper::ThinClient.run_modes
|
13
|
+
}
|
14
|
+
end
|
15
|
+
private_class_method :modes_for
|
16
|
+
|
17
|
+
# Calculate matcher for +run_mode+
|
18
|
+
def self.auto(run_modes, requirement = '> 0')
|
19
|
+
new auto_client(run_modes), requirement
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.auto_client(modes)
|
23
|
+
r = []
|
24
|
+
r << :web if satisfied? modes, :web
|
25
|
+
r << :thick if satisfied? modes, :thick
|
26
|
+
r << :thin if satisfied? modes, :thin
|
27
|
+
r
|
28
|
+
end
|
29
|
+
private_class_method :auto_client
|
30
|
+
|
31
|
+
def self.satisfied?(modes, client)
|
32
|
+
(modes & modes_for[client]).size > 0
|
33
|
+
end
|
34
|
+
private_class_method :satisfied?
|
35
|
+
|
36
|
+
attr_reader :clients, :requirement
|
37
|
+
def initialize(clients_array = nil, requirement = '>= 0')
|
38
|
+
@clients = nil_if_zsize(clients_array) || ALL_CLIENTS
|
39
|
+
@requirement = Gem::Requirement.new requirement.to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
def nil_if_zsize(array)
|
43
|
+
return nil if (array || []).size == 0
|
44
|
+
array
|
45
|
+
end
|
46
|
+
private :nil_if_zsize
|
47
|
+
|
48
|
+
def requirement=(r)
|
49
|
+
fail ArgumentError unless r.is_a? Gem::Version::Requirement
|
50
|
+
@requirement = r
|
51
|
+
end
|
52
|
+
|
53
|
+
def match?(binary_wrapper)
|
54
|
+
match_client?(binary_wrapper) && match_version?(binary_wrapper)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def match_client?(bw)
|
59
|
+
clients.include? bw.class.name.split('::').last.
|
60
|
+
to_s.downcase.gsub(/client$/,'').to_sym
|
61
|
+
end
|
62
|
+
|
63
|
+
def match_version?(bw)
|
64
|
+
requirement.satisfied_by? bw.version
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -13,12 +13,13 @@ module AssLauncher
|
|
13
13
|
# +parent+ propery. If +parent+ property is +nil+ it is root parameter
|
14
14
|
# and subpurameter if else
|
15
15
|
module Parameters
|
16
|
+
# Options for parameter
|
16
17
|
DEFAULT_OPTIONS = {
|
17
18
|
required: false,
|
18
|
-
value_validator:
|
19
|
+
value_validator: nil,
|
19
20
|
switch_list: nil,
|
20
21
|
chose_list: nil,
|
21
|
-
switch_value:
|
22
|
+
switch_value: nil
|
22
23
|
}.freeze
|
23
24
|
|
24
25
|
# Parameter name like it define in 1C cli api
|
@@ -43,61 +44,98 @@ module AssLauncher
|
|
43
44
|
# Parent parameter for subpurameter
|
44
45
|
# @return kinde of [String]
|
45
46
|
attr_reader :parent
|
46
|
-
# Options
|
47
|
+
# Options see {DEFAULT_OPTIONS}
|
47
48
|
# @return [Hash]
|
48
49
|
attr_reader :options
|
49
50
|
|
51
|
+
# Return +true+ if parameter defined for +binary_wrapper+ and +run_mode+
|
52
|
+
# @param binary_wrapper [BinaryWrapper::ThickClient
|
53
|
+
# BinaryWrapper::ThinClient WebClient]
|
54
|
+
# @param run_mode [Symbol] see {Parameters#modes}
|
50
55
|
def match?(binary_wrapper, run_mode)
|
51
56
|
binary_matcher.match?(binary_wrapper) && modes.include?(run_mode)
|
52
57
|
end
|
53
58
|
|
59
|
+
# Return +true+ if parameter defined for +version+
|
60
|
+
# @param version [Gem::Version]
|
61
|
+
def match_version?(version)
|
62
|
+
binary_matcher.requirement.satisfied_by? version
|
63
|
+
end
|
64
|
+
|
65
|
+
# :nodoc:
|
54
66
|
def to_sym
|
55
67
|
name.downcase.to_sym
|
56
68
|
end
|
57
69
|
|
70
|
+
# Returns parameter full name. Full name
|
71
|
+
# composed from +full_name+ of all
|
72
|
+
# {#parents} parameters
|
73
|
+
# @return [String]
|
58
74
|
def full_name
|
59
75
|
return name if root?
|
60
76
|
"#{parent.full_name}#{name}"
|
61
77
|
end
|
62
78
|
|
79
|
+
# Array of parent parameters
|
80
|
+
# @return [Array]
|
63
81
|
def parents
|
64
82
|
return [] if root?
|
65
83
|
parent.parents << parent
|
66
84
|
end
|
67
85
|
|
86
|
+
# Returns deep parameter in hierarchy tree
|
87
|
+
# @return [Fixnum]
|
68
88
|
def deep
|
69
89
|
parents.size
|
70
90
|
end
|
71
91
|
|
92
|
+
# Returns +true+ if haven't {#parent} parameter
|
72
93
|
def root?
|
73
94
|
parent.nil?
|
74
95
|
end
|
75
96
|
|
97
|
+
# Returns +true+ if it's child of +expected_parent+ parameter
|
98
|
+
# @param expected_parent kinde of [StringParam]
|
76
99
|
def child?(expected_parent)
|
77
100
|
return false if root?
|
78
101
|
parent == expected_parent
|
79
102
|
end
|
80
103
|
|
104
|
+
# :nodoc:
|
81
105
|
def to_s
|
82
106
|
name.to_s
|
83
107
|
end
|
84
108
|
|
109
|
+
# Returns self with +value+ as 1C:Enterprise CLI argumets array
|
110
|
+
# @example
|
111
|
+
# param.name #=> "/Parm"
|
112
|
+
# param.to_args 'value' #=> ["/Param", "value"]
|
113
|
+
# @return [Array<String>]
|
85
114
|
def to_args(value)
|
86
|
-
[key(value), value(value)]
|
115
|
+
[key(value).to_s, value(value).to_s]
|
87
116
|
end
|
88
117
|
|
118
|
+
# Wrapper for {#options}
|
89
119
|
def switch_list
|
90
120
|
options[:switch_list]
|
91
121
|
end
|
92
122
|
|
123
|
+
# (see #switch_list)
|
93
124
|
def chose_list
|
94
125
|
options[:chose_list]
|
95
126
|
end
|
96
127
|
|
128
|
+
# (see #switch_list)
|
97
129
|
def value_validator
|
98
|
-
options[:value_validator]
|
130
|
+
options[:value_validator] || proc { |value| value }
|
99
131
|
end
|
100
132
|
|
133
|
+
# (see #switch_list)
|
134
|
+
def switch_value
|
135
|
+
options[:switch_value] || proc { |value| value }
|
136
|
+
end
|
137
|
+
|
138
|
+
# (see #switch_list)
|
101
139
|
def required?
|
102
140
|
options[:required]
|
103
141
|
end
|
@@ -123,24 +161,51 @@ module AssLauncher
|
|
123
161
|
end
|
124
162
|
private :def_options
|
125
163
|
|
164
|
+
# Builds usage message
|
126
165
|
def usage
|
127
166
|
fail NotImplementedError
|
128
167
|
end
|
129
168
|
|
130
169
|
def auto_binary_matcher(arg)
|
131
170
|
return arg if arg.is_a? BinaryMatcher
|
132
|
-
return BinaryMatcher.
|
133
|
-
BinaryMatcher.
|
171
|
+
return BinaryMatcher.auto(modes, arg) if arg.is_a? String
|
172
|
+
BinaryMatcher.auto modes
|
134
173
|
end
|
135
174
|
private :auto_binary_matcher
|
136
175
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
:all
|
176
|
+
# Array of subparameters
|
177
|
+
# @return [Array]
|
178
|
+
def childs
|
179
|
+
@childs ||= []
|
142
180
|
end
|
143
|
-
|
181
|
+
|
182
|
+
# Add subparameter into {#childs} array
|
183
|
+
# @param param kinde of {StringParam}
|
184
|
+
def add_child(param)
|
185
|
+
childs << param
|
186
|
+
end
|
187
|
+
|
188
|
+
# Restricts parameter from +version+
|
189
|
+
# and do it recursively for all subparameters from {#childs} array
|
190
|
+
# @param (see #match_version?)
|
191
|
+
def restrict_from(version)
|
192
|
+
restrict_childs(version)
|
193
|
+
binary_matcher.requirement =
|
194
|
+
restrict_v(binary_matcher.requirement,
|
195
|
+
version) if match_version? version
|
196
|
+
end
|
197
|
+
|
198
|
+
def restrict_childs(version)
|
199
|
+
childs.each do |p|
|
200
|
+
p.restrict_from version
|
201
|
+
end
|
202
|
+
end
|
203
|
+
private :restrict_childs
|
204
|
+
|
205
|
+
def restrict_v(r, v)
|
206
|
+
Gem::Version::Requirement.new r.to_s.split(','), "< #{v}"
|
207
|
+
end
|
208
|
+
private :restrict_v
|
144
209
|
|
145
210
|
# Parameter expects string value
|
146
211
|
class StringParam
|
@@ -151,12 +216,12 @@ module AssLauncher
|
|
151
216
|
# @param binary_matcher [BinaryMatcher, String, nil] for which
|
152
217
|
# parameter defined
|
153
218
|
# - If nil will be build default matcher.
|
154
|
-
# - If string. String value
|
219
|
+
# - If string. String value must be suitable for Gem::Requirement.
|
155
220
|
# In this case, will be build matcher for version defined in
|
156
221
|
# string and suitable bynary type detected on run_modes
|
157
222
|
# @param group [Symbol] parameter group
|
158
223
|
# @param modes [Array] run modes for which parameter defined
|
159
|
-
# @param parent kinde of
|
224
|
+
# @param parent kinde of {StringParam} parent for subpurameter
|
160
225
|
# @param options [Hash] see {Parameters::DEFAULT_OPTIONS}
|
161
226
|
def initialize(name, desc, binary_matcher,
|
162
227
|
group, modes, parent = nil, **options)
|
@@ -167,6 +232,17 @@ module AssLauncher
|
|
167
232
|
@group = group
|
168
233
|
@options = def_options.merge options
|
169
234
|
@parent = parent
|
235
|
+
@parent.add_child(self) unless parent.nil?
|
236
|
+
end
|
237
|
+
|
238
|
+
# Parameter require argumet
|
239
|
+
def argument_require
|
240
|
+
arguments_count > 0
|
241
|
+
end
|
242
|
+
|
243
|
+
# Count of parameter argumets
|
244
|
+
def arguments_count
|
245
|
+
1
|
170
246
|
end
|
171
247
|
end
|
172
248
|
|
@@ -176,43 +252,128 @@ module AssLauncher
|
|
176
252
|
# It class instance make path string platform independet use
|
177
253
|
# {AssLauncher::Support::Platforms::PathExtension} class
|
178
254
|
class Path < StringParam
|
255
|
+
# Extends for {Parameters::DEFAULT_OPTIONS}.
|
256
|
+
#
|
257
|
+
# Option: +:must_be+ expects +:exist+ or +:not_exist+ values.
|
258
|
+
#
|
259
|
+
# If +:exist+ given verified for path must be exists and
|
260
|
+
# if +:not_exist+ given verified for pat must be not exists
|
261
|
+
DEFAULT_OPTIONS = Parameters::DEFAULT_OPTIONS.merge(must_be: nil)
|
179
262
|
include AssLauncher::Support::Platforms
|
263
|
+
|
264
|
+
def default_options
|
265
|
+
DEFAULT_OPTIONS
|
266
|
+
end
|
267
|
+
private :default_options
|
268
|
+
|
269
|
+
# (see #switch_list)
|
270
|
+
def must_be
|
271
|
+
options[:must_be]
|
272
|
+
end
|
273
|
+
|
180
274
|
def value(value)
|
181
|
-
|
275
|
+
validate(value)
|
276
|
+
path = platform.path(value).realdirpath
|
277
|
+
verify(path)
|
278
|
+
path.to_s
|
182
279
|
end
|
183
280
|
private :value
|
281
|
+
|
282
|
+
def verify(path)
|
283
|
+
case must_be
|
284
|
+
when :exist then must_exists(path)
|
285
|
+
when :not_exist then must_not_exists(path)
|
286
|
+
end
|
287
|
+
end
|
288
|
+
private :verify
|
289
|
+
|
290
|
+
def must_exists(path)
|
291
|
+
fail ArgumentError, "Wrong value for #{name}."\
|
292
|
+
" Path #{path} not exists" unless path.exist?
|
293
|
+
end
|
294
|
+
private :must_exists
|
295
|
+
|
296
|
+
def must_not_exists(path)
|
297
|
+
fail ArgumentError, "Wrong value for #{name}."\
|
298
|
+
" Path #{path} exists" if path.exist?
|
299
|
+
end
|
300
|
+
private :must_not_exists
|
184
301
|
end
|
185
302
|
|
186
|
-
#
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
303
|
+
# In 8.3.8 platform add CLI parameters like as
|
304
|
+
# +/DumpExternalDataProcessorOrReportToFiles+ expects 2 argumetns
|
305
|
+
class PathTwice < StringParam
|
306
|
+
include AssLauncher::Support::Platforms
|
307
|
+
def to_args(p1, p2)
|
308
|
+
[key('').to_s, rdp_(p1).to_s, rdp_(p2).to_s]
|
191
309
|
end
|
192
|
-
|
310
|
+
|
311
|
+
def rdp_(p)
|
312
|
+
platform.path(p).realdirpath
|
313
|
+
end
|
314
|
+
private :rdp_
|
193
315
|
end
|
194
316
|
|
195
317
|
# Flag parameter not expects argument
|
196
318
|
class Flag < StringParam
|
197
|
-
|
319
|
+
# Returns self as 1C:Enterprise CLI argumets array like
|
320
|
+
# +["/Flag", ""]+
|
321
|
+
# @param _ [nil] {Flag} not expects argument
|
322
|
+
# @return (see StringParam#to_args)
|
323
|
+
def to_args(_ = nil)
|
198
324
|
super ''
|
199
325
|
end
|
326
|
+
|
327
|
+
# Count of parameter argumets
|
328
|
+
def arguments_count
|
329
|
+
0
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
class SkippedError < StandardError; end
|
334
|
+
|
335
|
+
# Stub for define stupid or not importand parameters
|
336
|
+
# {#to_args} raises of {SkippedError}
|
337
|
+
class Skip < StringParam
|
338
|
+
def to_args(*values)
|
339
|
+
fail SkippedError, "Parameter #{full_name} skipped and restricted for use"
|
340
|
+
end
|
341
|
+
|
342
|
+
def skip?
|
343
|
+
true
|
344
|
+
end
|
200
345
|
end
|
201
346
|
|
202
|
-
#
|
203
|
-
|
347
|
+
# Chose parameter expects argunment value from chose_list
|
348
|
+
class Chose < StringParam
|
349
|
+
def validate(value)
|
350
|
+
fail ArgumentError,
|
351
|
+
"Wrong value `#{value}' for #{name} parameter" unless\
|
352
|
+
valid?(value)
|
353
|
+
end
|
354
|
+
private :validate
|
355
|
+
|
356
|
+
def valid?(value)
|
357
|
+
chose_list.keys.map(&:to_s).map(&:downcase).include?\
|
358
|
+
value.to_s.downcase
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
|
363
|
+
# Switch parameter is most stupid CLI parameter of 1C:Enterprise.
|
364
|
+
# Switch parameter expects argument value from +:switch_list+ or
|
204
365
|
# block +:switch_value+ which return modified value argument.
|
205
366
|
# Switch parameter modifyed self name when uses parameter value
|
206
367
|
# @example
|
207
|
-
# # /UseHwLicenses have {
|
208
|
-
# to_args(
|
209
|
-
# to_args(
|
210
|
-
# to_args(:
|
368
|
+
# # /UseHwLicenses have {:+=>'',:-=>''} switch_list and:
|
369
|
+
# to_args(:+) # => ['/UseHwLicenses+','']
|
370
|
+
# to_args(:-) # => ['/UseHwLicenses-','']
|
371
|
+
# to_args(:bad_value) # => ArgumentError
|
211
372
|
#
|
212
373
|
# # -TimeLimit have block:
|
213
|
-
# switch_value:
|
374
|
+
# {switch_value: ->(value) { ":#{value}"}}
|
214
375
|
# # and
|
215
|
-
# to_args("12:00")
|
376
|
+
# to_args("12:00") # => ['-TimeLimit:12:00','']
|
216
377
|
class Switch < StringParam
|
217
378
|
def value(_value)
|
218
379
|
''
|
@@ -220,30 +381,38 @@ module AssLauncher
|
|
220
381
|
private :value
|
221
382
|
|
222
383
|
def key(value)
|
223
|
-
"#{name}#{
|
384
|
+
"#{name}#{switch_value_get(value)}"
|
224
385
|
end
|
225
386
|
private :key
|
226
387
|
|
227
|
-
def
|
388
|
+
def switch_value_get(value)
|
228
389
|
if switch_list
|
229
|
-
fail ArgumentError,
|
230
|
-
|
390
|
+
fail ArgumentError,
|
391
|
+
"Wrong value #{value} for parameter #{name}" unless\
|
392
|
+
valid?(value)
|
231
393
|
end
|
232
394
|
validate(value)
|
233
|
-
|
395
|
+
switch_value.call(value)
|
396
|
+
end
|
397
|
+
private :switch_value_get
|
398
|
+
|
399
|
+
def valid?(value)
|
400
|
+
switch_list.keys.map(&:to_s).map(&:downcase).include?\
|
401
|
+
value.to_s.downcase
|
234
402
|
end
|
235
|
-
private :switch_value
|
236
403
|
end
|
237
404
|
|
238
|
-
# List of parameters
|
405
|
+
# List of parameters defined for one version
|
406
|
+
# @raise (see #<<)
|
239
407
|
class ParametersList
|
240
|
-
|
241
|
-
|
408
|
+
# Array of parameters.
|
409
|
+
# For add parameter into array use {#<<}
|
410
|
+
def parameters
|
411
|
+
@parameters ||= []
|
242
412
|
end
|
243
413
|
|
244
|
-
|
245
|
-
|
246
|
-
|
414
|
+
# Returns +true+ if parameter +p+ presents in list
|
415
|
+
# @param p kinde of {StringParam}
|
247
416
|
def param_defined?(p)
|
248
417
|
!find(p.name, p.parent).nil?
|
249
418
|
end
|
@@ -255,7 +424,7 @@ module AssLauncher
|
|
255
424
|
fail ArgumentError,
|
256
425
|
"Parameter #{p.full_name} alrady defined" if\
|
257
426
|
param_defined?(p)
|
258
|
-
|
427
|
+
parameters << p
|
259
428
|
end
|
260
429
|
alias_method :"+", :"<<"
|
261
430
|
alias_method :add, :"<<"
|
@@ -275,14 +444,98 @@ module AssLauncher
|
|
275
444
|
nil
|
276
445
|
end
|
277
446
|
|
447
|
+
# :nodoc:
|
278
448
|
def each(&block)
|
279
449
|
parameters.each(&block)
|
280
450
|
end
|
281
451
|
|
452
|
+
# (see Parameters#usage)
|
282
453
|
def usage
|
283
454
|
fail NotImplementedError
|
284
455
|
end
|
285
456
|
end
|
457
|
+
|
458
|
+
# List of parameters defined for all versions
|
459
|
+
# @raise (see #add)
|
460
|
+
class AllParameters
|
461
|
+
# Array of parameters.
|
462
|
+
# For add parameter into array use {#add}
|
463
|
+
def parameters
|
464
|
+
@parameters ||= []
|
465
|
+
end
|
466
|
+
|
467
|
+
# Add parameter into list
|
468
|
+
# @param (see #param_defined?)
|
469
|
+
# @raise [ArgumentError] if parameter +p.name+ alrady defined for
|
470
|
+
# +version+
|
471
|
+
def add(p, version)
|
472
|
+
fail_if_difined(p, version)
|
473
|
+
parameters << p
|
474
|
+
end
|
475
|
+
|
476
|
+
def fail_if_difined(p, version)
|
477
|
+
fail ArgumentError,
|
478
|
+
"Parameter #{p.full_name} alrady defined for version"\
|
479
|
+
" #{version}" if param_defined? p, version
|
480
|
+
end
|
481
|
+
private :fail_if_difined
|
482
|
+
|
483
|
+
# Returns +true+ if parameter +p+ for +version+ presents in list
|
484
|
+
# @param p kinde of {StringParam}
|
485
|
+
# @param version (see Parameters#match_version?)
|
486
|
+
def param_defined?(p, version)
|
487
|
+
find(p.name, p.parent).each do |p_|
|
488
|
+
return true if p_.match_version? version
|
489
|
+
end
|
490
|
+
false
|
491
|
+
end
|
492
|
+
|
493
|
+
# Return parameters list for given +binary_wrapper+ and +run_mode+
|
494
|
+
# @return [ParametersList] for given +binary_wrapper+ and +run_mode+
|
495
|
+
# @param (see Parameters#match?)
|
496
|
+
def to_parameters_list(binary_wrapper, run_mode)
|
497
|
+
r = new_list
|
498
|
+
parameters.each do |p|
|
499
|
+
r << p if p.match? binary_wrapper, run_mode
|
500
|
+
end
|
501
|
+
r
|
502
|
+
end
|
503
|
+
|
504
|
+
def new_list
|
505
|
+
ParametersList.new
|
506
|
+
end
|
507
|
+
private :new_list
|
508
|
+
|
509
|
+
# Find actual parameter for +version+
|
510
|
+
# @return kinde of {StringParam}
|
511
|
+
# @param name (see #find)
|
512
|
+
# @param parent (see #find)
|
513
|
+
# @param version [Gem::Version]
|
514
|
+
def find_for_version(name, parent, version)
|
515
|
+
r = nil
|
516
|
+
find(name, parent).each do |p|
|
517
|
+
r = oops!(r, p, version) if p.match_version? version
|
518
|
+
end
|
519
|
+
r
|
520
|
+
end
|
521
|
+
|
522
|
+
def oops!(r, p, v)
|
523
|
+
fail "Too many params #{p.full_name} spec for #{v}" unless r.nil?
|
524
|
+
p
|
525
|
+
end
|
526
|
+
private :oops!
|
527
|
+
|
528
|
+
# Find all parameter versions
|
529
|
+
# @param name (see StringParam#initialize)
|
530
|
+
# @param parent (see StringParam#initialize)
|
531
|
+
# @return [Array] of parameters
|
532
|
+
def find(name, parent)
|
533
|
+
parameters.select do |p|
|
534
|
+
p.to_sym == name.downcase.to_sym &&
|
535
|
+
p.parent == parent
|
536
|
+
end
|
537
|
+
end
|
538
|
+
end
|
286
539
|
end
|
287
540
|
end
|
288
541
|
end
|