xqsr3 0.8.6 → 0.10.1
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/lib/xqsr3/containers/multi_map.rb +11 -1
- data/lib/xqsr3/quality/parameter_checking.rb +54 -13
- data/lib/xqsr3/version.rb +3 -3
- data/test/unit/command_line_utilities/tc_map_option_string.rb +1 -1
- data/test/unit/command_line_utilities/ts_all.rb +1 -1
- data/test/unit/containers/tc_frequency_map.rb +1 -1
- data/test/unit/containers/tc_multi_map.rb +77 -1
- data/test/unit/containers/ts_all.rb +1 -1
- data/test/unit/diagnostics/tc_exception_utilities.rb +1 -1
- data/test/unit/diagnostics/ts_all.rb +1 -1
- data/test/unit/extensions/ts_all.rb +1 -1
- data/test/unit/io/tc_writelines.rb +1 -1
- data/test/unit/io/ts_all.rb +1 -1
- data/test/unit/quality/tc_parameter_checking.rb +49 -3
- data/test/unit/quality/ts_all.rb +1 -1
- data/test/unit/tc_version.rb +1 -2
- data/test/unit/ts_all.rb +1 -1
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fc131e56227103bb95b7ccf5dfc3c19dd15b2a6
|
4
|
+
data.tar.gz: 4fb63d6d6d8f764e2ca09fc0fe0859897c16a807
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec36713f0a9cd50f16d826d3a6ca58a4c36d14ad5aeea9ab0c73a77fb2b90ad7c632dbafd7b9a4dfb4225e1e73c1d1f18bb7020b5b9e12cbc531f10d274ac270
|
7
|
+
data.tar.gz: e9c1695f3091a1bd265da1b8943e9a97d9de645c4efddae0798b1d9103508d212348e226330c1f9578f55f0e458390c09765a9243f4505d3028e92563f88691c
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# Purpose: multimap container
|
6
6
|
#
|
7
7
|
# Created: 21st March 2007
|
8
|
-
# Updated:
|
8
|
+
# Updated: 2nd October 2016
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/xqsr3
|
11
11
|
#
|
@@ -202,6 +202,16 @@ class MultiMap < ::Hash
|
|
202
202
|
@inner.each_key { |key| yield key }
|
203
203
|
end
|
204
204
|
|
205
|
+
def each_unflattened
|
206
|
+
|
207
|
+
@inner.each { |key, value| yield key, value }
|
208
|
+
end
|
209
|
+
|
210
|
+
def each_unflattened_with_index
|
211
|
+
|
212
|
+
@inner.each_with_index { |kv, index| yield kv, index }
|
213
|
+
end
|
214
|
+
|
205
215
|
def each_value
|
206
216
|
|
207
217
|
@inner.each do |key, values|
|
@@ -5,13 +5,13 @@
|
|
5
5
|
# Purpose: Definition of the ParameterChecking module
|
6
6
|
#
|
7
7
|
# Created: 12th February 2015
|
8
|
-
# Updated:
|
8
|
+
# Updated: 26th February 2017
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/xqsr3
|
11
11
|
#
|
12
12
|
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
-
# Copyright (c) 2015-
|
14
|
+
# Copyright (c) 2015-2017, Matthew Wilson and Synesis Software
|
15
15
|
# All rights reserved.
|
16
16
|
#
|
17
17
|
# Redistribution and use in source and binary forms, with or without
|
@@ -54,6 +54,23 @@ module Quality
|
|
54
54
|
#
|
55
55
|
module ParameterChecking
|
56
56
|
|
57
|
+
private
|
58
|
+
module Util_
|
59
|
+
|
60
|
+
def self.join_with_or a
|
61
|
+
|
62
|
+
case a.size
|
63
|
+
when 1
|
64
|
+
a[0]
|
65
|
+
when 2
|
66
|
+
"#{a[0]} or #{a[1]}"
|
67
|
+
else
|
68
|
+
"#{a[0...-1].join(', ')}, or #{a[-1]}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end # module Util_
|
72
|
+
|
73
|
+
public
|
57
74
|
# Check a given parameter (value=+value+, name=+name+) for type and value
|
58
75
|
#
|
59
76
|
# @param +value+ the parameter whose value and type is to be checked
|
@@ -63,7 +80,9 @@ module ParameterChecking
|
|
63
80
|
# @option +:allow_nil+ the +value+ must not be +nil+ unless this option
|
64
81
|
# is true
|
65
82
|
# @option +:types+ an array of types one of which +value+ must be (or
|
66
|
-
# must be derived from)
|
83
|
+
# must be derived from). One of these types may be an array
|
84
|
+
# of types, in which case +value+ may be an array that must
|
85
|
+
# consist wholly of those types
|
67
86
|
# @option +:values+ an array of values one of which +value+ must be
|
68
87
|
# @option +:reject_empty+ requires value to respond to +empty?+
|
69
88
|
# message and to do so with false, unless +nil+
|
@@ -121,9 +140,22 @@ module ParameterChecking
|
|
121
140
|
type_found = false
|
122
141
|
|
123
142
|
warn "#{self}::check_parameter: options[:types] of type #{types.class} - should be #{::Array}" unless types.is_a?(Array)
|
124
|
-
warn "#{self}::check_parameter: options[:types] should contain only classes" if types.is_a?(Array) && !types.all? { |c| ::Class === c }
|
143
|
+
warn "#{self}::check_parameter: options[:types] should contain only classes or arrays of classes" if types.is_a?(::Array) && !types.all? { |c| ::Class === c || (::Array === c || c.all? { |c2| ::Class === c2 }) }
|
144
|
+
|
145
|
+
unless types.any? do |t|
|
125
146
|
|
126
|
-
|
147
|
+
case t
|
148
|
+
when ::Class
|
149
|
+
|
150
|
+
# the (presumed) scalar argument is of type t?
|
151
|
+
value.is_a?(t)
|
152
|
+
when ::Array
|
153
|
+
|
154
|
+
# the (presumed) vector argument's elements are the
|
155
|
+
# possible types
|
156
|
+
value.all? { |v| t.any? { |t2| v.is_a?(t2) }}
|
157
|
+
end
|
158
|
+
end
|
127
159
|
|
128
160
|
failed_check = true
|
129
161
|
|
@@ -132,20 +164,29 @@ module ParameterChecking
|
|
132
164
|
unless message
|
133
165
|
|
134
166
|
s_name = name.is_a?(String) ? "'#{name}' " : ''
|
167
|
+
s_be = 'be' #::Array === value ? 'contain' : 'be'
|
168
|
+
|
169
|
+
types_0 = types.select { |t| ::Class === t }.uniq
|
170
|
+
types_ar = types.select { |t| ::Array === t }.flatten.uniq
|
171
|
+
|
172
|
+
if types_ar.empty?
|
135
173
|
|
136
|
-
|
137
|
-
when 1
|
174
|
+
s_types_0 = Util_.join_with_or types_0
|
138
175
|
|
139
|
-
|
140
|
-
|
176
|
+
message = "#{param_s} #{s_name}(#{value.class}) must be an instance of #{s_types_0}"
|
177
|
+
elsif types_0.empty?
|
141
178
|
|
142
|
-
|
179
|
+
s_types_ar = Util_.join_with_or types_ar
|
180
|
+
|
181
|
+
message = "#{param_s} #{s_name}(#{value.class}) must be an array containing instance(s) of #{s_types_ar}"
|
143
182
|
else
|
144
183
|
|
145
|
-
|
146
|
-
end
|
184
|
+
s_types_0 = Util_.join_with_or types_0
|
147
185
|
|
148
|
-
|
186
|
+
s_types_ar = Util_.join_with_or types_ar
|
187
|
+
|
188
|
+
message = "#{param_s} #{s_name}(#{value.class}) must be an instance of #{s_types_0}, or an array containing instance(s) of #{s_types_ar}"
|
189
|
+
end
|
149
190
|
end
|
150
191
|
|
151
192
|
raise TypeError, message
|
data/lib/xqsr3/version.rb
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
# Purpose: Version for Xqsr3 library
|
6
6
|
#
|
7
7
|
# Created: 3rd April 2016
|
8
|
-
# Updated:
|
8
|
+
# Updated: 26th February 2017
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/xqsr3
|
11
11
|
#
|
12
12
|
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
-
# Copyright (c) 2016, Matthew Wilson and Synesis Software
|
14
|
+
# Copyright (c) 2016-2017, Matthew Wilson and Synesis Software
|
15
15
|
# All rights reserved.
|
16
16
|
#
|
17
17
|
# Redistribution and use in source and binary forms, with or without
|
@@ -50,7 +50,7 @@
|
|
50
50
|
module Xqsr3
|
51
51
|
|
52
52
|
# Current version of the Xqsr3 library
|
53
|
-
VERSION = '0.
|
53
|
+
VERSION = '0.10.1'
|
54
54
|
|
55
55
|
private
|
56
56
|
VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
$:.unshift File.join(File.dirname(__FILE__), '../../../lib')
|
4
4
|
|
@@ -59,6 +59,36 @@ class Test_Xqsr3_Containers_MultiMap < Test::Unit::TestCase
|
|
59
59
|
assert_raise(::ArgumentError) { MultiMap[ [ :abc ], [] ] }
|
60
60
|
end
|
61
61
|
|
62
|
+
def test_class_operator_subscript_6
|
63
|
+
|
64
|
+
ar = [ [ :abc, '1' ] ]
|
65
|
+
|
66
|
+
mm = MultiMap[ar]
|
67
|
+
|
68
|
+
assert_equal 1, ar.size
|
69
|
+
assert_equal 1, mm.size
|
70
|
+
assert_equal [ '1' ], mm[:abc]
|
71
|
+
|
72
|
+
ar = [ [ :abc, '1' ], [ :def, '2' ] ]
|
73
|
+
|
74
|
+
mm = MultiMap[ar]
|
75
|
+
|
76
|
+
assert_equal 2, ar.size
|
77
|
+
assert_equal 2, mm.size
|
78
|
+
assert_equal [ '1' ], mm[:abc]
|
79
|
+
assert_equal [ '2' ], mm[:def]
|
80
|
+
|
81
|
+
ar = [ [ 1, 11 ], [ 1, 111 ], [ 2, 22 ], [ 3, 333 ], [ 1, 1111 ] ]
|
82
|
+
|
83
|
+
mm = MultiMap[ar]
|
84
|
+
|
85
|
+
assert_equal 5, ar.size
|
86
|
+
assert_equal 3, mm.size
|
87
|
+
assert_equal [ 11, 111, 1111 ], mm[1]
|
88
|
+
assert_equal [ 22 ], mm[2]
|
89
|
+
assert_equal [ 333 ], mm[3]
|
90
|
+
end
|
91
|
+
|
62
92
|
def test_instance_operator_equals
|
63
93
|
|
64
94
|
mm1 = MultiMap.new
|
@@ -323,6 +353,52 @@ class Test_Xqsr3_Containers_MultiMap < Test::Unit::TestCase
|
|
323
353
|
assert_equal [ [ :abc, 'a1', 0 ], [ :abc, 'a2', 1 ], [ :abc, 'a3', 2 ], [ :abc, 'a4', 3 ], [ :ghi, 'g1', 4 ], [ :ghi, 'g2', 5 ] ], r
|
324
354
|
end
|
325
355
|
|
356
|
+
def test_each_unflattened
|
357
|
+
|
358
|
+
mm = MultiMap.new
|
359
|
+
|
360
|
+
mm.push :def
|
361
|
+
mm.push :abc, 'a1', 'a2', 'a3', 'a4'
|
362
|
+
mm.push :ghi, 'g1', 'g2'
|
363
|
+
|
364
|
+
r = []
|
365
|
+
|
366
|
+
mm.each_unflattened do |key, value|
|
367
|
+
|
368
|
+
r << [ key, value ]
|
369
|
+
end
|
370
|
+
|
371
|
+
r.sort!
|
372
|
+
|
373
|
+
assert_equal 3, r.size
|
374
|
+
assert_equal [ :abc, [ 'a1', 'a2', 'a3', 'a4' ] ], r[0]
|
375
|
+
assert_equal [ :def, [] ], r[1]
|
376
|
+
assert_equal [ :ghi, [ 'g1', 'g2' ] ], r[2]
|
377
|
+
end
|
378
|
+
|
379
|
+
def test_each_unflattened_with_index
|
380
|
+
|
381
|
+
mm = MultiMap.new
|
382
|
+
|
383
|
+
mm.push :def
|
384
|
+
mm.push :abc, 'a1', 'a2', 'a3', 'a4'
|
385
|
+
mm.push :ghi, 'g1', 'g2'
|
386
|
+
|
387
|
+
r = []
|
388
|
+
|
389
|
+
mm.each_unflattened_with_index do |(key, value), index|
|
390
|
+
|
391
|
+
r << [ key, value, index ]
|
392
|
+
end
|
393
|
+
|
394
|
+
r.sort!
|
395
|
+
|
396
|
+
assert_equal 3, r.size
|
397
|
+
assert_equal [ :abc, [ 'a1', 'a2', 'a3', 'a4' ], 1 ], r[0]
|
398
|
+
assert_equal [ :def, [], 0 ], r[1]
|
399
|
+
assert_equal [ :ghi, [ 'g1', 'g2' ], 2 ], r[2]
|
400
|
+
end
|
401
|
+
|
326
402
|
def test_empty
|
327
403
|
|
328
404
|
mm = MultiMap.new
|
data/test/unit/io/ts_all.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
$:.unshift File.join(File.dirname(__FILE__), '../../../..', 'lib')
|
4
4
|
|
@@ -159,7 +159,7 @@ end
|
|
159
159
|
assert_match /^parameter 'a' \(String\) must be an instance of Hash$/, ax.message
|
160
160
|
rescue => x
|
161
161
|
|
162
|
-
assert(false, "wrong exception type
|
162
|
+
assert(false, "wrong exception type #{x.class} (with message '#{x.message}')")
|
163
163
|
end
|
164
164
|
|
165
165
|
|
@@ -172,10 +172,56 @@ end
|
|
172
172
|
assert_match /^parameter 'a' value '' not found equal\/within any of required values or ranges$/, ax.message
|
173
173
|
rescue => x
|
174
174
|
|
175
|
-
assert(false, "wrong exception type
|
175
|
+
assert(false, "wrong exception type #{x.class} (with message '#{x.message}')")
|
176
176
|
end
|
177
|
+
end
|
178
|
+
|
179
|
+
|
180
|
+
# test 7 - verify that can include an array of types in the array of types
|
181
|
+
|
182
|
+
def check_method_7 a, types, values, options = {}, &block
|
177
183
|
|
184
|
+
self.class.check_param a, 'a', options.merge({ types: types, values: values }), &block
|
178
185
|
end
|
179
186
|
|
187
|
+
def test_7
|
188
|
+
|
189
|
+
assert_equal [], check_method_7([], [ ::Array ], nil)
|
190
|
+
|
191
|
+
assert_equal [ 'abc' ], check_method_7([ 'abc' ], [ ::Array ], nil)
|
192
|
+
|
193
|
+
assert_equal [ 'abc' ], check_method_7([ 'abc' ], [ [ ::String ] ], nil)
|
194
|
+
|
195
|
+
assert_equal [ 'abc' ], check_method_7([ 'abc' ], [ [ ::Regexp, ::String ] ], nil)
|
196
|
+
|
197
|
+
assert_equal [ :'abc' ], check_method_7([ :'abc' ], [ [ ::Regexp, ::Symbol ] ], nil)
|
198
|
+
|
199
|
+
|
200
|
+
begin
|
201
|
+
check_method_7 [ 'abc' ], [ ::Symbol, [ ::Regexp, ::Symbol ], ::Hash ], nil
|
202
|
+
|
203
|
+
assert(false, 'should not get here')
|
204
|
+
rescue TypeError => ax
|
205
|
+
|
206
|
+
assert_match /^parameter 'a' \(Array\) must be an instance of Symbol or Hash, or an array containing instance\(s\) of Regexp or Symbol$/, ax.message
|
207
|
+
rescue => x
|
208
|
+
|
209
|
+
assert(false, "wrong exception type #{x.class}) (with message '#{x.message}'")
|
210
|
+
end
|
211
|
+
|
212
|
+
|
213
|
+
begin
|
214
|
+
check_method_7 [ 'abc' ], [ [ ::Regexp, ::Symbol ] ], nil
|
215
|
+
|
216
|
+
assert(false, 'should not get here')
|
217
|
+
rescue TypeError => ax
|
218
|
+
|
219
|
+
assert_match /^parameter 'a' \(Array\) must be an array containing instance\(s\) of Regexp or Symbol$/, ax.message
|
220
|
+
rescue => x
|
221
|
+
|
222
|
+
assert(false, "wrong exception type #{x.class}) (with message '#{x.message}'")
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
180
226
|
end
|
181
227
|
|
data/test/unit/quality/ts_all.rb
CHANGED
data/test/unit/tc_version.rb
CHANGED
data/test/unit/ts_all.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xqsr3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Wilson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
eXtensions by fine Quantum for Standard Ruby and 3rd-party libraries is a
|
@@ -19,32 +19,30 @@ executables: []
|
|
19
19
|
extensions: []
|
20
20
|
extra_rdoc_files: []
|
21
21
|
files:
|
22
|
-
- LICENSE
|
23
|
-
- README.md
|
24
22
|
- lib/xqsr3/command_line_utilities/map_option_string.rb
|
25
23
|
- lib/xqsr3/containers/frequency_map.rb
|
26
24
|
- lib/xqsr3/containers/multi_map.rb
|
27
25
|
- lib/xqsr3/diagnostics/exception_utilities.rb
|
28
26
|
- lib/xqsr3/doc_.rb
|
29
|
-
- lib/xqsr3/extensions/enumerable.rb
|
30
27
|
- lib/xqsr3/extensions/enumerable/collect_with_index.rb
|
31
28
|
- lib/xqsr3/extensions/enumerable/unique.rb
|
32
|
-
- lib/xqsr3/extensions/
|
29
|
+
- lib/xqsr3/extensions/enumerable.rb
|
33
30
|
- lib/xqsr3/extensions/io/writelines.rb
|
34
|
-
- lib/xqsr3/extensions/
|
31
|
+
- lib/xqsr3/extensions/io.rb
|
35
32
|
- lib/xqsr3/extensions/kernel/raise_with_options.rb
|
36
|
-
- lib/xqsr3/extensions/
|
33
|
+
- lib/xqsr3/extensions/kernel.rb
|
37
34
|
- lib/xqsr3/extensions/string/ends_with.rb
|
38
35
|
- lib/xqsr3/extensions/string/map_option_string.rb
|
39
36
|
- lib/xqsr3/extensions/string/starts_with.rb
|
40
37
|
- lib/xqsr3/extensions/string/to_symbol.rb
|
41
|
-
- lib/xqsr3/extensions/
|
38
|
+
- lib/xqsr3/extensions/string.rb
|
42
39
|
- lib/xqsr3/extensions/test/unit/assert_eql.rb
|
43
40
|
- lib/xqsr3/extensions/test/unit/assert_not.rb
|
44
41
|
- lib/xqsr3/extensions/test/unit/assert_not_eql.rb
|
42
|
+
- lib/xqsr3/extensions/test/unit.rb
|
45
43
|
- lib/xqsr3/io/writelines.rb
|
46
|
-
- lib/xqsr3/quality.rb
|
47
44
|
- lib/xqsr3/quality/parameter_checking.rb
|
45
|
+
- lib/xqsr3/quality.rb
|
48
46
|
- lib/xqsr3/string_utilities/ends_with.rb
|
49
47
|
- lib/xqsr3/string_utilities/starts_with.rb
|
50
48
|
- lib/xqsr3/string_utilities/to_symbol.rb
|
@@ -75,6 +73,8 @@ files:
|
|
75
73
|
- test/unit/quality/ts_all.rb
|
76
74
|
- test/unit/tc_version.rb
|
77
75
|
- test/unit/ts_all.rb
|
76
|
+
- README.md
|
77
|
+
- LICENSE
|
78
78
|
homepage: http://github.com/synesissoftware/xqsr3
|
79
79
|
licenses:
|
80
80
|
- 3-clause BSD
|
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
95
|
version: '0'
|
96
96
|
requirements: []
|
97
97
|
rubyforge_project:
|
98
|
-
rubygems_version: 2.
|
98
|
+
rubygems_version: 2.0.14.1
|
99
99
|
signing_key:
|
100
100
|
specification_version: 4
|
101
101
|
summary: xqsr3
|