mug 0.12.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/mug.rb +2 -0
- data/lib/mug/affix.rb +88 -0
- data/lib/mug/array/extend.rb +2 -2
- data/lib/mug/hash/when.rb +1 -1
- data/lib/mug/iterator/for.rb +2 -2
- data/lib/mug/loop-with.rb +1 -1
- data/lib/mug/main.rb +38 -0
- data/lib/mug/self.rb +2 -2
- data/lib/mug/time.rb +1 -1
- data/lib/mug/top.rb +5 -5
- data/test/test-affix.rb +135 -0
- data/test/test-array-delete_all.rb +5 -5
- data/test/test-bool.rb +1 -1
- data/test/test-hashwhen.rb +1 -1
- data/test/test-negativity.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fa82b3dcf328caf01f65d84a51ac4bdfdc186c91648f5b7843aa34531c4877ad
|
4
|
+
data.tar.gz: a33c8edf6d0d3359c9b7ce9592bee55f2cef5b2955e74f2c71913048bbe6d61b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77ab2daffae07f208c90b692afafd8287850fc57ddeade9fb363d517ff7844a921695aee7af8522b3dc66edc09540b408e1f9c0a20d345563cf23981f6cf7806
|
7
|
+
data.tar.gz: 5463372e8cb36dd4b92780354a08131b9fda6d5d34857c04dfc5e029a26b66682064b888c4b4e0b4a21b1b4ea7f1e2b7823091e80f8ec0ecba99bf1c47b7669a
|
data/lib/mug.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
|
2
|
+
require_relative 'mug/affix'
|
2
3
|
require_relative 'mug/alias'
|
3
4
|
require_relative 'mug/and-or'
|
4
5
|
require_relative 'mug/any-and-all'
|
@@ -20,6 +21,7 @@ require_relative 'mug/hash/when'
|
|
20
21
|
require_relative 'mug/iterator/for'
|
21
22
|
require_relative 'mug/iterator/method'
|
22
23
|
require_relative 'mug/loop-with'
|
24
|
+
require_relative 'mug/main'
|
23
25
|
require_relative 'mug/matchdata/each'
|
24
26
|
require_relative 'mug/matchdata/hash'
|
25
27
|
require_relative 'mug/maybe'
|
data/lib/mug/affix.rb
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
class String
|
3
|
+
|
4
|
+
def affix prefix, suffix=nil
|
5
|
+
suffix = prefix if suffix.nil?
|
6
|
+
"#{prefix}#{self}#{suffix}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def prefix str
|
10
|
+
"#{str}#{self}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def suffix str
|
14
|
+
"#{self}#{str}"
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
def affix! prefix, suffix=nil
|
20
|
+
replace affix(prefix, suffix)
|
21
|
+
end
|
22
|
+
|
23
|
+
def prefix! str
|
24
|
+
replace prefix(str)
|
25
|
+
end
|
26
|
+
|
27
|
+
def suffix! str
|
28
|
+
replace suffix(str)
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
def affix? prefix, suffix=nil
|
34
|
+
suffix = prefix if suffix.nil?
|
35
|
+
if Regexp === prefix
|
36
|
+
md = match(/\A#{prefix}/)
|
37
|
+
if md
|
38
|
+
rest = md.post_match
|
39
|
+
else
|
40
|
+
return false
|
41
|
+
end
|
42
|
+
else
|
43
|
+
prefix = prefix.to_s
|
44
|
+
if start_with? prefix
|
45
|
+
i = prefix.length
|
46
|
+
rest = self[i..-1]
|
47
|
+
else
|
48
|
+
return false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
rest.suffix? suffix
|
52
|
+
end
|
53
|
+
|
54
|
+
def prefix? pattern
|
55
|
+
if Regexp === pattern
|
56
|
+
#match?(/\A#{pattern}/)
|
57
|
+
!!(self =~ /\A#{pattern}/)
|
58
|
+
else
|
59
|
+
start_with? pattern.to_s
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def suffix? pattern
|
64
|
+
if Regexp === pattern
|
65
|
+
#match?(/#{pattern}\z/)
|
66
|
+
!!(self =~ /#{pattern}\z/)
|
67
|
+
else
|
68
|
+
end_with? pattern.to_s
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
=begin
|
75
|
+
Copyright (c) 2017, Matthew Kerwin <matthew@kerwin.net.au>
|
76
|
+
|
77
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
78
|
+
purpose with or without fee is hereby granted, provided that the above
|
79
|
+
copyright notice and this permission notice appear in all copies.
|
80
|
+
|
81
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
82
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
83
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
84
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
85
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
86
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
87
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
88
|
+
=end
|
data/lib/mug/array/extend.rb
CHANGED
@@ -46,13 +46,13 @@ class Array
|
|
46
46
|
|
47
47
|
# @see #extend!
|
48
48
|
def extend *args, &block
|
49
|
-
dup.extend!(
|
49
|
+
dup.extend!(*args, &block)
|
50
50
|
end
|
51
51
|
|
52
52
|
end
|
53
53
|
|
54
54
|
=begin
|
55
|
-
Copyright (c) 2014, Matthew Kerwin <matthew@kerwin.net.au>
|
55
|
+
Copyright (c) 2014-17, Matthew Kerwin <matthew@kerwin.net.au>
|
56
56
|
|
57
57
|
Permission to use, copy, modify, and/or distribute this software for any
|
58
58
|
purpose with or without fee is hereby granted, provided that the above
|
data/lib/mug/hash/when.rb
CHANGED
data/lib/mug/iterator/for.rb
CHANGED
@@ -8,11 +8,11 @@ class Object
|
|
8
8
|
def iter_for meth, *args
|
9
9
|
Iterator.new self, meth, *args
|
10
10
|
end
|
11
|
-
alias
|
11
|
+
alias to_iter iter_for
|
12
12
|
end
|
13
13
|
|
14
14
|
=begin
|
15
|
-
Copyright (c) 2013, Matthew Kerwin <matthew@kerwin.net.au>
|
15
|
+
Copyright (c) 2013-2017, Matthew Kerwin <matthew@kerwin.net.au>
|
16
16
|
|
17
17
|
Permission to use, copy, modify, and/or distribute this software for any
|
18
18
|
purpose with or without fee is hereby granted, provided that the above
|
data/lib/mug/loop-with.rb
CHANGED
data/lib/mug/main.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
module Kernel
|
3
|
+
|
4
|
+
##
|
5
|
+
# Compares the calling source filename with `$PROGRAM_NAME` (`$0`).
|
6
|
+
#
|
7
|
+
# Returns a falsey value if the calling context is not in the 'main' file.
|
8
|
+
#
|
9
|
+
# If called without a block, and the calling context is in the 'main' file,
|
10
|
+
# returns +true+.
|
11
|
+
#
|
12
|
+
# If called with a block, and the calling context is in the 'main' file, the
|
13
|
+
# block is executed and the result is returned.
|
14
|
+
#
|
15
|
+
def __main__
|
16
|
+
cloc = caller_locations(1, 1)[0]
|
17
|
+
return if cloc.nil?
|
18
|
+
return unless File.absolute_path($0) == cloc.absolute_path
|
19
|
+
block_given? ? (yield) : true
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
=begin
|
25
|
+
Copyright (c) 2018, Matthew Kerwin <matthew@kerwin.net.au>
|
26
|
+
|
27
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
28
|
+
purpose with or without fee is hereby granted, provided that the above
|
29
|
+
copyright notice and this permission notice appear in all copies.
|
30
|
+
|
31
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
32
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
33
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
34
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
35
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
36
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
37
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
38
|
+
=end
|
data/lib/mug/self.rb
CHANGED
@@ -13,7 +13,7 @@ class Object
|
|
13
13
|
self
|
14
14
|
end
|
15
15
|
end
|
16
|
-
alias
|
16
|
+
alias itself self
|
17
17
|
|
18
18
|
# Deprecated alias for #self
|
19
19
|
def yield(&block) #:nodoc:
|
@@ -33,7 +33,7 @@ class Object
|
|
33
33
|
enum_for(:revapply, *args) { args.length + 1 }
|
34
34
|
end
|
35
35
|
end
|
36
|
-
alias
|
36
|
+
alias cede revapply
|
37
37
|
end
|
38
38
|
|
39
39
|
=begin
|
data/lib/mug/time.rb
CHANGED
data/lib/mug/top.rb
CHANGED
@@ -95,23 +95,23 @@ end
|
|
95
95
|
|
96
96
|
class Array
|
97
97
|
def top! n=1, &blk
|
98
|
-
replace(
|
98
|
+
replace top(n, &blk)
|
99
99
|
end
|
100
100
|
def top_by! n=1, &blk
|
101
101
|
return enum_for(:top_by!, n) unless block_given?
|
102
|
-
replace(
|
102
|
+
replace top_by(n, &blk)
|
103
103
|
end
|
104
104
|
def bottom! n=1, &blk
|
105
|
-
replace(
|
105
|
+
replace bottom(n, &blk)
|
106
106
|
end
|
107
107
|
def bottom_by! n=1, &blk
|
108
108
|
return enum_for(:bottom_by!, n) unless block_given?
|
109
|
-
replace(
|
109
|
+
replace bottom_by(n, &blk)
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
113
|
=begin
|
114
|
-
Copyright (c) 2014, Matthew Kerwin <matthew@kerwin.net.au>
|
114
|
+
Copyright (c) 2014-2017, Matthew Kerwin <matthew@kerwin.net.au>
|
115
115
|
|
116
116
|
Permission to use, copy, modify, and/or distribute this software for any
|
117
117
|
purpose with or without fee is hereby granted, provided that the above
|
data/test/test-affix.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
$VERBOSE = true
|
3
|
+
|
4
|
+
require_relative '../lib/mug/affix'
|
5
|
+
class Test_affix < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_affix
|
8
|
+
str = 'XXX'
|
9
|
+
pre = '+++'
|
10
|
+
suf = '---'
|
11
|
+
|
12
|
+
a = "#{pre}#{str}#{suf}"
|
13
|
+
b = "#{pre}#{str}"
|
14
|
+
c = "#{str}#{suf}"
|
15
|
+
d = "#{pre}#{str}#{pre}"
|
16
|
+
|
17
|
+
assert_equal( a, str.affix(pre, suf) )
|
18
|
+
assert_equal( b, str.prefix(pre) )
|
19
|
+
assert_equal( c, str.suffix(suf) )
|
20
|
+
assert_equal( d, str.affix(pre) )
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_affix_bang
|
24
|
+
str = ''
|
25
|
+
pre = '+'
|
26
|
+
suf = '-'
|
27
|
+
|
28
|
+
3.times do |i|
|
29
|
+
numpre = i * 2
|
30
|
+
numsuf = i * 2
|
31
|
+
|
32
|
+
str.affix! pre, suf
|
33
|
+
numpre += 1
|
34
|
+
numsuf += 1
|
35
|
+
assert_equal( "#{pre * numpre}#{suf * numsuf}", str )
|
36
|
+
|
37
|
+
str.prefix! pre
|
38
|
+
numpre += 1
|
39
|
+
assert_equal( "#{pre * numpre}#{suf * numsuf}", str )
|
40
|
+
|
41
|
+
str.suffix! suf
|
42
|
+
numsuf += 1
|
43
|
+
assert_equal( "#{pre * numpre}#{suf * numsuf}", str )
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_affix_bang2
|
48
|
+
str = ''
|
49
|
+
pre = '+'
|
50
|
+
|
51
|
+
3.times do |i|
|
52
|
+
n = i * 2
|
53
|
+
|
54
|
+
str.affix! pre
|
55
|
+
n += 2
|
56
|
+
assert_equal( "#{pre * n}", str )
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_affix?
|
61
|
+
str = "abc"
|
62
|
+
[
|
63
|
+
# obvious cases
|
64
|
+
[ 'a', 'c', true],
|
65
|
+
[ /a/, /c/, true],
|
66
|
+
[/^a/, /c$/, true],
|
67
|
+
# expected edges
|
68
|
+
['','', true],
|
69
|
+
['abc','', true],
|
70
|
+
['','abc', true],
|
71
|
+
# failures
|
72
|
+
['x','c', false],
|
73
|
+
['a','x', false],
|
74
|
+
['ab','bc', false],
|
75
|
+
[/../,/../, false],
|
76
|
+
].each do |p, s, x|
|
77
|
+
assert_equal( x, str.affix?(p, s) )
|
78
|
+
end
|
79
|
+
|
80
|
+
str = "xyx"
|
81
|
+
[
|
82
|
+
# obvious cases
|
83
|
+
[ 'x', true],
|
84
|
+
[ /x/, true],
|
85
|
+
# expected edges
|
86
|
+
['', true],
|
87
|
+
[/^x|x$/, true],
|
88
|
+
# failures
|
89
|
+
['a', false],
|
90
|
+
[/../, false],
|
91
|
+
].each do |p, x|
|
92
|
+
assert_equal( x, str.affix?(p) )
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_prefix?
|
97
|
+
str = "abc"
|
98
|
+
[
|
99
|
+
# obvious cases
|
100
|
+
[ 'a', true],
|
101
|
+
[ /a/, true],
|
102
|
+
[/^a/, true],
|
103
|
+
# expected edges
|
104
|
+
['', true],
|
105
|
+
['abc', true],
|
106
|
+
# failures
|
107
|
+
['x', false],
|
108
|
+
['abcd', false],
|
109
|
+
[/..../, false],
|
110
|
+
].each do |p, x|
|
111
|
+
assert_equal( x, str.prefix?(p) )
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_suffix?
|
116
|
+
str = "abc"
|
117
|
+
[
|
118
|
+
# obvious cases
|
119
|
+
['c', true],
|
120
|
+
[/c/, true],
|
121
|
+
[/c$/, true],
|
122
|
+
# expected edges
|
123
|
+
['', true],
|
124
|
+
['abc', true],
|
125
|
+
# failures
|
126
|
+
['x', false],
|
127
|
+
['zabc', false],
|
128
|
+
[/..../, false],
|
129
|
+
].each do |s, x|
|
130
|
+
assert_equal( x, str.suffix?(s) )
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
@@ -2,7 +2,7 @@ require 'test/unit'
|
|
2
2
|
$VERBOSE = true
|
3
3
|
|
4
4
|
ARRAY = proc { [1,2,3,4,5,6] }
|
5
|
-
EVEN = proc { |i| i
|
5
|
+
EVEN = proc { |i| i.even? }
|
6
6
|
E = [2,4,6]
|
7
7
|
O = [1,3,5]
|
8
8
|
|
@@ -10,7 +10,7 @@ require_relative '../lib/mug/array/delete_all'
|
|
10
10
|
class Test_array_delete_all < Test::Unit::TestCase
|
11
11
|
def test_delete_all__block
|
12
12
|
a = ARRAY.call
|
13
|
-
result = a.delete_all
|
13
|
+
result = a.delete_all(&EVEN)
|
14
14
|
assert_equal( result, E )
|
15
15
|
assert_equal( a, O )
|
16
16
|
end
|
@@ -19,19 +19,19 @@ class Test_array_delete_all < Test::Unit::TestCase
|
|
19
19
|
enum = a.delete_all
|
20
20
|
assert( enum.is_a? Enumerator )
|
21
21
|
|
22
|
-
result = enum.each
|
22
|
+
result = enum.each(&EVEN)
|
23
23
|
assert_equal( result, E )
|
24
24
|
assert_equal( a, O )
|
25
25
|
end
|
26
26
|
def test_delete_all__all
|
27
27
|
a = E.dup
|
28
|
-
result = a.delete_all
|
28
|
+
result = a.delete_all(&EVEN)
|
29
29
|
assert_equal( result, E )
|
30
30
|
assert( a.empty? )
|
31
31
|
end
|
32
32
|
def test_delete_all__none
|
33
33
|
a = O.dup
|
34
|
-
result = a.delete_all
|
34
|
+
result = a.delete_all(&EVEN)
|
35
35
|
assert( result.empty? )
|
36
36
|
assert_equal( a, O )
|
37
37
|
end
|
data/test/test-bool.rb
CHANGED
data/test/test-hashwhen.rb
CHANGED
data/test/test-negativity.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Kerwin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
== MUG: Matty's Ultimate Gem
|
@@ -23,6 +23,7 @@ extensions: []
|
|
23
23
|
extra_rdoc_files: []
|
24
24
|
files:
|
25
25
|
- lib/mug.rb
|
26
|
+
- lib/mug/affix.rb
|
26
27
|
- lib/mug/alias.rb
|
27
28
|
- lib/mug/and-or.rb
|
28
29
|
- lib/mug/any-and-all.rb
|
@@ -50,6 +51,7 @@ files:
|
|
50
51
|
- lib/mug/iterator/method.rb
|
51
52
|
- lib/mug/iterator_c.rb
|
52
53
|
- lib/mug/loop-with.rb
|
54
|
+
- lib/mug/main.rb
|
53
55
|
- lib/mug/matchdata.rb
|
54
56
|
- lib/mug/matchdata/each.rb
|
55
57
|
- lib/mug/matchdata/hash.rb
|
@@ -62,6 +64,7 @@ files:
|
|
62
64
|
- lib/mug/time.rb
|
63
65
|
- lib/mug/to_h.rb
|
64
66
|
- lib/mug/top.rb
|
67
|
+
- test/test-affix.rb
|
65
68
|
- test/test-alias.rb
|
66
69
|
- test/test-and-or.rb
|
67
70
|
- test/test-any-and-all.rb
|
@@ -113,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
116
|
version: '0'
|
114
117
|
requirements: []
|
115
118
|
rubyforge_project:
|
116
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.7.3
|
117
120
|
signing_key:
|
118
121
|
specification_version: 4
|
119
122
|
summary: 'MUG: Matty''s Ultimate Gem'
|
@@ -133,6 +136,7 @@ test_files:
|
|
133
136
|
- test/test-top.rb
|
134
137
|
- test/test-and-or.rb
|
135
138
|
- test/test-array-to_proc.rb
|
139
|
+
- test/test-affix.rb
|
136
140
|
- test/test-hashmerge.rb
|
137
141
|
- test/test-any-and-all.rb
|
138
142
|
- test/test-self.rb
|