clasp-ruby 0.10.3 → 0.11.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/clasp/arguments.rb +30 -54
- data/lib/clasp/util/immutable_array.rb +169 -0
- data/lib/clasp/version.rb +2 -2
- data/test/unit/tc_immutable_array.rb +72 -0
- data/test/unit/tc_util_immutable_array.rb +72 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8da53dd37696e2528150ea2194a0b3455df79ce
|
4
|
+
data.tar.gz: 531aa7eb5a3f7fac55f024c021f22aefe84b5d75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 182e5db95920e7adbd62786d608d8a8de0c29f85e266d4a3ab481ed24a5c7665fe51c9e1a6a498e78d43d08b3597f145a05bf464fa5c44013001685f849a0e33
|
7
|
+
data.tar.gz: 72372e9151b6f1acf8efe591b9b1d9213acf52c5a042fd442d69c090908ba4f42d091297e6e709a5b18d317ba6f73d568448ce7c8a8a7749c6d720cf9f420513
|
data/lib/clasp/arguments.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# CLASP.Ruby
|
7
7
|
#
|
8
8
|
# Created: 14th February 2014
|
9
|
-
# Updated:
|
9
|
+
# Updated: 16th July 2016
|
10
10
|
#
|
11
11
|
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
12
12
|
#
|
@@ -46,6 +46,7 @@
|
|
46
46
|
|
47
47
|
|
48
48
|
|
49
|
+
require 'clasp/util/immutable_array'
|
49
50
|
|
50
51
|
=begin
|
51
52
|
=end
|
@@ -178,50 +179,25 @@ class Arguments
|
|
178
179
|
end
|
179
180
|
end
|
180
181
|
|
181
|
-
|
182
|
-
|
183
|
-
include Enumerable
|
184
|
-
|
185
|
-
#:nodoc:
|
186
|
-
def initialize(a)
|
187
|
-
|
188
|
-
@a = a
|
189
|
-
end
|
190
|
-
|
191
|
-
#:nodoc:
|
192
|
-
def each
|
182
|
+
#:startdoc:
|
193
183
|
|
194
|
-
|
195
|
-
end
|
184
|
+
class ImmutableArray < ::CLASP::Util::ImmutableArray
|
196
185
|
|
197
|
-
|
198
|
-
def size
|
186
|
+
def initialize a
|
199
187
|
|
200
|
-
|
188
|
+
super a
|
201
189
|
end
|
202
190
|
|
203
|
-
|
204
|
-
|
191
|
+
# returns truthy if the given flag/option is found or the
|
192
|
+
# given block is truthy
|
193
|
+
def specified? id = nil
|
205
194
|
|
206
|
-
|
207
|
-
end
|
208
|
-
|
209
|
-
#:nodoc:
|
210
|
-
def [](index)
|
195
|
+
return find(id) { |o| yield o } if block_given?
|
211
196
|
|
212
|
-
|
213
|
-
end
|
214
|
-
|
215
|
-
#:nodoc:
|
216
|
-
def ==(rhs)
|
217
|
-
|
218
|
-
return rhs == @a if rhs.is_a? self.class
|
219
|
-
@a == rhs
|
197
|
+
find { |item| item == id }
|
220
198
|
end
|
221
199
|
end
|
222
200
|
|
223
|
-
#:startdoc:
|
224
|
-
|
225
201
|
# ######################
|
226
202
|
# Construction
|
227
203
|
|
@@ -431,37 +407,37 @@ class Arguments
|
|
431
407
|
|
432
408
|
# unchanged copy of the original array of arguments passed to new
|
433
409
|
attr_reader :argv_original_copy
|
434
|
-
end
|
435
410
|
|
436
|
-
# ######################################################################## #
|
437
|
-
# module
|
438
411
|
|
439
|
-
|
412
|
+
# finds the first unknown flag or option; +nil+ if all used
|
413
|
+
def find_first_unknown options = {}
|
440
414
|
|
441
|
-
|
442
|
-
# extensions
|
415
|
+
option = {} if options.nil?
|
443
416
|
|
444
|
-
|
445
|
-
class Array
|
417
|
+
raise ArgumentError, "options must be nil or Hash - #{option.class} given" unless options.is_a? ::Hash
|
446
418
|
|
447
|
-
|
448
|
-
# ImmutableArray
|
449
|
-
#
|
450
|
-
# NOTE: do not do so for +eql?+
|
419
|
+
aliases = options[:aliases] || @aliases
|
451
420
|
|
452
|
-
|
453
|
-
alias_method :old_equal, :==
|
421
|
+
raise ArgumentError, "aliases may not be nil" if aliases.nil?
|
454
422
|
|
455
|
-
|
423
|
+
flags.each do |f|
|
456
424
|
|
457
|
-
|
458
|
-
|
425
|
+
return f unless aliases.any? { |al| al.is_a?(::CLASP::Flag) && al.name == f.name }
|
426
|
+
end
|
427
|
+
|
428
|
+
options.each do |o|
|
459
429
|
|
460
|
-
|
430
|
+
return o unless aliases.any? { |al| al.is_a?(::CLASP::Option) && al.name == o.name }
|
431
|
+
end
|
461
432
|
|
462
|
-
|
433
|
+
nil
|
463
434
|
end
|
464
435
|
end
|
465
436
|
|
437
|
+
# ######################################################################## #
|
438
|
+
# module
|
439
|
+
|
440
|
+
end # module CLASP
|
441
|
+
|
466
442
|
# ############################## end of file ############################# #
|
467
443
|
|
@@ -0,0 +1,169 @@
|
|
1
|
+
|
2
|
+
# ######################################################################## #
|
3
|
+
# File: clasp/util/immutable_array.rb
|
4
|
+
#
|
5
|
+
# Purpose: Definition of the CLASP::Util::ImmutableArray class
|
6
|
+
#
|
7
|
+
# Created: 14th February 2014
|
8
|
+
# Updated: 16th July 2016
|
9
|
+
#
|
10
|
+
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
|
+
#
|
12
|
+
# Author: Matthew Wilson
|
13
|
+
#
|
14
|
+
# Copyright (c) 2014-2016, Matthew Wilson and Synesis Software
|
15
|
+
# All rights reserved.
|
16
|
+
#
|
17
|
+
# Redistribution and use in source and binary forms, with or without
|
18
|
+
# modification, are permitted provided that the following conditions are
|
19
|
+
# met:
|
20
|
+
#
|
21
|
+
# * Redistributions of source code must retain the above copyright
|
22
|
+
# notice, this list of conditions and the following disclaimer.
|
23
|
+
#
|
24
|
+
# * Redistributions in binary form must reproduce the above copyright
|
25
|
+
# notice, this list of conditions and the following disclaimer in the
|
26
|
+
# documentation and/or other materials provided with the distribution.
|
27
|
+
#
|
28
|
+
# * Neither the names of the copyright holder nor the names of its
|
29
|
+
# contributors may be used to endorse or promote products derived from
|
30
|
+
# this software without specific prior written permission.
|
31
|
+
#
|
32
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
33
|
+
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
34
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
35
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
36
|
+
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
37
|
+
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
38
|
+
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
39
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
40
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
41
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
42
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
43
|
+
#
|
44
|
+
# ######################################################################## #
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
=begin
|
50
|
+
=end
|
51
|
+
|
52
|
+
module CLASP
|
53
|
+
module Util
|
54
|
+
|
55
|
+
# ######################################################################## #
|
56
|
+
# classes
|
57
|
+
|
58
|
+
# An immutable array
|
59
|
+
class ImmutableArray
|
60
|
+
|
61
|
+
include Enumerable
|
62
|
+
|
63
|
+
#:nodoc:
|
64
|
+
def initialize(a)
|
65
|
+
|
66
|
+
raise ArgumentError, "must supply array" if a.nil?
|
67
|
+
raise TypeError, "must supply instance of #{::Array}; #{a.class} given" unless a.is_a? ::Array
|
68
|
+
|
69
|
+
@a = a
|
70
|
+
end
|
71
|
+
|
72
|
+
# Calls the block once for each element in the array
|
73
|
+
def each
|
74
|
+
|
75
|
+
return @a.each unless block_given?
|
76
|
+
|
77
|
+
@a.each { |i| yield i }
|
78
|
+
end
|
79
|
+
|
80
|
+
# Alias for +length+
|
81
|
+
def size
|
82
|
+
|
83
|
+
@a.size
|
84
|
+
end
|
85
|
+
|
86
|
+
# Indicates whether the immutable array has no elements
|
87
|
+
def empty?
|
88
|
+
|
89
|
+
@a.empty?
|
90
|
+
end
|
91
|
+
|
92
|
+
# Same semantics as +Enumerable#find+ for the underlying array
|
93
|
+
def find ifnone = nil
|
94
|
+
|
95
|
+
return @a.find(ifnone) { |o| yield o } if block_given?
|
96
|
+
|
97
|
+
@a.find ifnone
|
98
|
+
end
|
99
|
+
|
100
|
+
# The number of elements in the immutable array
|
101
|
+
def length
|
102
|
+
|
103
|
+
@a.length
|
104
|
+
end
|
105
|
+
|
106
|
+
# Same semantics as +Array#slice+
|
107
|
+
def slice *args
|
108
|
+
|
109
|
+
case args.length
|
110
|
+
when 1
|
111
|
+
case args[0]
|
112
|
+
when ::Integer
|
113
|
+
return @a.slice args[0]
|
114
|
+
end
|
115
|
+
when 2
|
116
|
+
else
|
117
|
+
end
|
118
|
+
|
119
|
+
self.class.new @a.slice(*args)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Same semantics as +Array#[]+
|
123
|
+
def [] *args
|
124
|
+
|
125
|
+
slice(*args)
|
126
|
+
end
|
127
|
+
|
128
|
+
# Determines whether +rhs+ is each to the receiver
|
129
|
+
def == rhs
|
130
|
+
|
131
|
+
return rhs == @a if rhs.is_a? self.class
|
132
|
+
|
133
|
+
@a == rhs
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
# ######################################################################## #
|
138
|
+
# module
|
139
|
+
|
140
|
+
end # module Util
|
141
|
+
end # module CLASP
|
142
|
+
|
143
|
+
# ######################################################################## #
|
144
|
+
# extensions
|
145
|
+
|
146
|
+
#:nodoc:
|
147
|
+
class Array
|
148
|
+
|
149
|
+
# Monkey-patched Array#== in order to handle comparison with
|
150
|
+
# ImmutableArray
|
151
|
+
#
|
152
|
+
# NOTE: do not do so for +eql?+
|
153
|
+
|
154
|
+
#:nodoc:
|
155
|
+
alias_method :old_equal, :==
|
156
|
+
|
157
|
+
undef :==
|
158
|
+
|
159
|
+
#:nodoc:
|
160
|
+
def ==(rhs)
|
161
|
+
|
162
|
+
return rhs == self if rhs.is_a? CLASP::Arguments::ImmutableArray
|
163
|
+
|
164
|
+
old_equal rhs
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
# ############################## end of file ############################# #
|
169
|
+
|
data/lib/clasp/version.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# Purpose: Version for CLASP.Ruby library
|
6
6
|
#
|
7
7
|
# Created: 16th November 2014
|
8
|
-
# Updated:
|
8
|
+
# Updated: 16th July 2016
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
11
|
#
|
@@ -51,7 +51,7 @@
|
|
51
51
|
module CLASP
|
52
52
|
|
53
53
|
# Current version of the CLASP.Ruby library
|
54
|
-
VERSION = '0.
|
54
|
+
VERSION = '0.11.1'
|
55
55
|
|
56
56
|
private
|
57
57
|
VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
4
|
+
|
5
|
+
require 'clasp'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class Test_ImmutableArray < Test::Unit::TestCase
|
10
|
+
|
11
|
+
ImmutableArray = ::CLASP::Arguments::ImmutableArray
|
12
|
+
|
13
|
+
def test_empty
|
14
|
+
|
15
|
+
ia = ImmutableArray.new []
|
16
|
+
|
17
|
+
assert ia.empty?
|
18
|
+
assert_equal 0, ia.size
|
19
|
+
assert_equal 0, ia.length
|
20
|
+
assert_equal 0, ia.count
|
21
|
+
assert_equal 0, ia.count(:abc)
|
22
|
+
assert_equal 0, ia.count { |o| !o.nil? }
|
23
|
+
assert (ia.find { |o| !o.nil? }).nil?
|
24
|
+
assert_equal ImmutableArray.new([]), ia
|
25
|
+
assert_not_equal ImmutableArray.new([ :def ]), ia
|
26
|
+
assert_not_equal ImmutableArray.new([ :abc, :def ]), ia
|
27
|
+
assert ia[0].nil?
|
28
|
+
assert ia[1].nil?
|
29
|
+
assert_equal ImmutableArray.new([]), ia[0..1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_one_item
|
33
|
+
|
34
|
+
ia = ImmutableArray.new [ :def ]
|
35
|
+
|
36
|
+
assert !ia.empty?
|
37
|
+
assert_equal 1, ia.size
|
38
|
+
assert_equal 1, ia.length
|
39
|
+
assert_equal 1, ia.count
|
40
|
+
assert_equal 0, ia.count(:abc)
|
41
|
+
assert_equal 1, ia.count { |o| !o.nil? }
|
42
|
+
assert !(ia.find { |o| !o.nil? }).nil?
|
43
|
+
assert_not_equal ImmutableArray.new([]), ia
|
44
|
+
assert_equal ImmutableArray.new([ :def ]), ia
|
45
|
+
assert_not_equal ImmutableArray.new([ :abc, :def ]), ia
|
46
|
+
assert_equal :def, ia[0]
|
47
|
+
assert ia[1].nil?
|
48
|
+
assert_equal ImmutableArray.new([ :def ]), ia[0..1]
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_two_items
|
52
|
+
|
53
|
+
ia = ImmutableArray.new [ :abc, :def ]
|
54
|
+
|
55
|
+
assert !ia.empty?
|
56
|
+
assert_equal 2, ia.size
|
57
|
+
assert_equal 2, ia.length
|
58
|
+
assert_equal 2, ia.count
|
59
|
+
assert_equal 1, ia.count(:abc)
|
60
|
+
assert_equal 2, ia.count { |o| !o.nil? }
|
61
|
+
assert !(ia.find { |o| !o.nil? }).nil?
|
62
|
+
assert_not_equal ImmutableArray.new([]), ia
|
63
|
+
assert_not_equal ImmutableArray.new([ :def ]), ia
|
64
|
+
assert_equal ImmutableArray.new([ :abc, :def ]), ia
|
65
|
+
assert_equal :abc, ia[0]
|
66
|
+
assert_equal :def, ia[1]
|
67
|
+
assert_equal ImmutableArray.new([ :abc, :def ]), ia[0..1]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# ############################## end of file ############################# #
|
72
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
4
|
+
|
5
|
+
require 'clasp'
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class Test_Util_ImmutableArray < Test::Unit::TestCase
|
10
|
+
|
11
|
+
include ::CLASP::Util
|
12
|
+
|
13
|
+
def test_empty
|
14
|
+
|
15
|
+
ia = ImmutableArray.new []
|
16
|
+
|
17
|
+
assert ia.empty?
|
18
|
+
assert_equal 0, ia.size
|
19
|
+
assert_equal 0, ia.length
|
20
|
+
assert_equal 0, ia.count
|
21
|
+
assert_equal 0, ia.count(:abc)
|
22
|
+
assert_equal 0, ia.count { |o| !o.nil? }
|
23
|
+
assert (ia.find { |o| !o.nil? }).nil?
|
24
|
+
assert_equal ImmutableArray.new([]), ia
|
25
|
+
assert_not_equal ImmutableArray.new([ :def ]), ia
|
26
|
+
assert_not_equal ImmutableArray.new([ :abc, :def ]), ia
|
27
|
+
assert ia[0].nil?
|
28
|
+
assert ia[1].nil?
|
29
|
+
assert_equal ImmutableArray.new([]), ia[0..1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_one_item
|
33
|
+
|
34
|
+
ia = ImmutableArray.new [ :def ]
|
35
|
+
|
36
|
+
assert !ia.empty?
|
37
|
+
assert_equal 1, ia.size
|
38
|
+
assert_equal 1, ia.length
|
39
|
+
assert_equal 1, ia.count
|
40
|
+
assert_equal 0, ia.count(:abc)
|
41
|
+
assert_equal 1, ia.count { |o| !o.nil? }
|
42
|
+
assert !(ia.find { |o| !o.nil? }).nil?
|
43
|
+
assert_not_equal ImmutableArray.new([]), ia
|
44
|
+
assert_equal ImmutableArray.new([ :def ]), ia
|
45
|
+
assert_not_equal ImmutableArray.new([ :abc, :def ]), ia
|
46
|
+
assert_equal :def, ia[0]
|
47
|
+
assert ia[1].nil?
|
48
|
+
assert_equal ImmutableArray.new([ :def ]), ia[0..1]
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_two_items
|
52
|
+
|
53
|
+
ia = ImmutableArray.new [ :abc, :def ]
|
54
|
+
|
55
|
+
assert !ia.empty?
|
56
|
+
assert_equal 2, ia.size
|
57
|
+
assert_equal 2, ia.length
|
58
|
+
assert_equal 2, ia.count
|
59
|
+
assert_equal 1, ia.count(:abc)
|
60
|
+
assert_equal 2, ia.count { |o| !o.nil? }
|
61
|
+
assert !(ia.find { |o| !o.nil? }).nil?
|
62
|
+
assert_not_equal ImmutableArray.new([]), ia
|
63
|
+
assert_not_equal ImmutableArray.new([ :def ]), ia
|
64
|
+
assert_equal ImmutableArray.new([ :abc, :def ]), ia
|
65
|
+
assert_equal :abc, ia[0]
|
66
|
+
assert_equal :def, ia[1]
|
67
|
+
assert_equal ImmutableArray.new([ :abc, :def ]), ia[0..1]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# ############################## end of file ############################# #
|
72
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clasp-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.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-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
Command-Line Argument Sorting and Parsing library that provides a powerful
|
@@ -29,6 +29,7 @@ files:
|
|
29
29
|
- lib/clasp/cli.rb
|
30
30
|
- lib/clasp/doc_.rb
|
31
31
|
- lib/clasp/old_module.rb
|
32
|
+
- lib/clasp/util/immutable_array.rb
|
32
33
|
- lib/clasp/version.rb
|
33
34
|
- test/scratch/test_aliases.rb
|
34
35
|
- test/scratch/test_list_command_line.rb
|
@@ -41,7 +42,9 @@ files:
|
|
41
42
|
- test/unit/tc_arguments_3.rb
|
42
43
|
- test/unit/tc_defaults_1.rb
|
43
44
|
- test/unit/tc_examples_Arguments.rb
|
45
|
+
- test/unit/tc_immutable_array.rb
|
44
46
|
- test/unit/tc_usage.rb
|
47
|
+
- test/unit/tc_util_immutable_array.rb
|
45
48
|
- test/unit/ts_all.rb
|
46
49
|
homepage: http://github.com/synesissoftware/CLASP.Ruby
|
47
50
|
licenses:
|