ass_launcher 0.1.1.alpha → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|