mug 0.5.3 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mug/and-or.rb +26 -26
  3. data/lib/mug/any-and-all.rb +16 -16
  4. data/lib/mug/apply.rb +37 -37
  5. data/lib/mug/array/extend.rb +43 -43
  6. data/lib/mug/array/minus.rb +32 -32
  7. data/lib/mug/bool.rb +71 -71
  8. data/lib/mug/clamp.rb +35 -35
  9. data/lib/mug/counts.rb +27 -27
  10. data/lib/mug/fragile-method-chain.rb +42 -42
  11. data/lib/mug/hash/map.rb +75 -75
  12. data/lib/mug/hash/operations.rb +47 -47
  13. data/lib/mug/iterator/for.rb +7 -7
  14. data/lib/mug/iterator/method.rb +7 -7
  15. data/lib/mug/iterator_c.rb +14 -14
  16. data/lib/mug/loop-with.rb +30 -29
  17. data/lib/mug/matchdata/each.rb +40 -40
  18. data/lib/mug/matchdata/hash.rb +29 -29
  19. data/lib/mug/maybe.rb +33 -33
  20. data/lib/mug/negativity.rb +20 -20
  21. data/lib/mug/not.rb +6 -6
  22. data/lib/mug/rexproc.rb +6 -6
  23. data/lib/mug/self.rb +31 -31
  24. data/lib/mug/to_h.rb +2 -2
  25. data/lib/mug/top.rb +100 -100
  26. data/test/test-and-or.rb +32 -32
  27. data/test/test-any-and-all.rb +19 -19
  28. data/test/test-apply.rb +47 -47
  29. data/test/test-array-extend.rb +54 -54
  30. data/test/test-array-minus.rb +11 -11
  31. data/test/test-bool.rb +48 -48
  32. data/test/test-clamp.rb +42 -42
  33. data/test/test-counts.rb +21 -21
  34. data/test/test-fragile-method-chain.rb +56 -56
  35. data/test/test-hashmap.rb +14 -14
  36. data/test/test-hashop.rb +47 -47
  37. data/test/test-iterator-for.rb +12 -12
  38. data/test/test-loop-with.rb +117 -66
  39. data/test/test-matchdata_each.rb +50 -50
  40. data/test/test-matchdata_hash.rb +40 -40
  41. data/test/test-maybe.rb +76 -76
  42. data/test/test-negativity.rb +40 -40
  43. data/test/test-not.rb +53 -53
  44. data/test/test-rexproc.rb +6 -6
  45. data/test/test-self.rb +21 -21
  46. data/test/test-tau.rb +12 -12
  47. data/test/test-top.rb +100 -100
  48. metadata +4 -4
@@ -1,11 +1,11 @@
1
1
 
2
2
  class Regexp
3
- #
4
- # Matches the regexp against the parameter object.
5
- #
6
- def to_proc
7
- lambda {|s| self =~ s }
8
- end
3
+ #
4
+ # Matches the regexp against the parameter object.
5
+ #
6
+ def to_proc
7
+ lambda {|s| self =~ s }
8
+ end
9
9
  end
10
10
 
11
11
  =begin
@@ -1,38 +1,38 @@
1
1
 
2
2
  class Object
3
- #
4
- # Returns this object.
5
- #
6
- # If a block is given, this object is yielded to it, and the result
7
- # is returned.
8
- #
9
- def self(&block)
10
- if block_given?
11
- yield self
12
- else
13
- self
14
- end
15
- end
16
- alias :itself :self
3
+ #
4
+ # Returns this object.
5
+ #
6
+ # If a block is given, this object is yielded to it, and the result
7
+ # is returned.
8
+ #
9
+ def self(&block)
10
+ if block_given?
11
+ yield self
12
+ else
13
+ self
14
+ end
15
+ end
16
+ alias :itself :self
17
17
 
18
- # Deprecated alias for #self
19
- def yield(&block) #:nodoc:
20
- warn 'Object#yield is deprecated; use Object#self'
21
- self.self(&block)
22
- end
18
+ # Deprecated alias for #self
19
+ def yield(&block) #:nodoc:
20
+ warn 'Object#yield is deprecated; use Object#self'
21
+ self.self(&block)
22
+ end
23
23
 
24
- #
25
- # Yields this object (and any other arguments)
26
- # to a block. If no block is given, returns an
27
- # Enumerator.
28
- #
29
- def revapply(*args, &block)
30
- if block_given?
31
- yield self, *args
32
- else
33
- enum_for(:revapply, *args) { args.length + 1 }
34
- end
35
- end
24
+ #
25
+ # Yields this object (and any other arguments)
26
+ # to a block. If no block is given, returns an
27
+ # Enumerator.
28
+ #
29
+ def revapply(*args, &block)
30
+ if block_given?
31
+ yield self, *args
32
+ else
33
+ enum_for(:revapply, *args) { args.length + 1 }
34
+ end
35
+ end
36
36
  end
37
37
 
38
38
  =begin
@@ -1,8 +1,8 @@
1
1
 
2
2
  if {}.respond_to? :to_h
3
- warn %|Warning: "mug/to_h" has been removed as it conflicts with core to_h behaviour|
3
+ warn %|Warning: "mug/to_h" has been removed as it conflicts with core to_h behaviour|
4
4
  else
5
- warn %|Warning: "mug/to_h" has been removed; see the "to_h" gem (https://rubygems.org/gems/to_h)|
5
+ warn %|Warning: "mug/to_h" has been removed; see the "to_h" gem (https://rubygems.org/gems/to_h)|
6
6
  end
7
7
 
8
8
  =begin
@@ -1,113 +1,113 @@
1
1
 
2
2
  module Enumerable
3
3
 
4
- #
5
- # Get the top +n+ items, in order from top to bottom.
6
- #
7
- # Returns an +Array+ even when +n+ is 1.
8
- #
9
- # @see Enumerable#sort
10
- #
11
- def top n=1, &blk
12
- if block_given?
13
- sort{|x,y| yield y, x }[0...n]
14
- else
15
- #top_by(n) {|x| x }
16
- if n <= length
17
- sort[-n..-1].reverse
18
- else
19
- sort.reverse
20
- end
21
- end
22
- end
4
+ #
5
+ # Get the top +n+ items, in order from top to bottom.
6
+ #
7
+ # Returns an +Array+ even when +n+ is 1.
8
+ #
9
+ # @see Enumerable#sort
10
+ #
11
+ def top n=1, &blk
12
+ if block_given?
13
+ sort{|x,y| yield y, x }[0...n]
14
+ else
15
+ #top_by(n) {|x| x }
16
+ if n <= length
17
+ sort[-n..-1].reverse
18
+ else
19
+ sort.reverse
20
+ end
21
+ end
22
+ end
23
23
 
24
- #
25
- # Get the top +n+ items, in order from top to bottom, ordered
26
- # by mapping the values through the given block.
27
- #
28
- # Returns an +Array+ even when +n+ is 1. Values that are tied
29
- # after mapping are returned in the initial order.
30
- #
31
- # If no block is given, an enumerator is returned instead.
32
- #
33
- # @see Enumerable#sort_by
34
- #
35
- def top_by n=1, &blk
36
- return enum_for(:top_by, n) unless block_given?
37
- chain = {}
38
- each do |x|
39
- y = yield x
40
- chain[y] ||= []
41
- chain[y] << x
42
- end
43
- ary = []
44
- chain.keys.sort.reverse.each do |k|
45
- ary += chain[k]
46
- break if ary.length > n
47
- end
48
- ary[0...n]
49
- end
24
+ #
25
+ # Get the top +n+ items, in order from top to bottom, ordered
26
+ # by mapping the values through the given block.
27
+ #
28
+ # Returns an +Array+ even when +n+ is 1. Values that are tied
29
+ # after mapping are returned in the initial order.
30
+ #
31
+ # If no block is given, an enumerator is returned instead.
32
+ #
33
+ # @see Enumerable#sort_by
34
+ #
35
+ def top_by n=1, &blk
36
+ return enum_for(:top_by, n) unless block_given?
37
+ chain = {}
38
+ each do |x|
39
+ y = yield x
40
+ chain[y] ||= []
41
+ chain[y] << x
42
+ end
43
+ ary = []
44
+ chain.keys.sort.reverse.each do |k|
45
+ ary += chain[k]
46
+ break if ary.length > n
47
+ end
48
+ ary[0...n]
49
+ end
50
50
 
51
- #
52
- # Get the bottom +n+ items, ordered from bottom to top.
53
- #
54
- # Returns an +Array+ even when +n+ is 1.
55
- #
56
- # @see Enumerable#sort
57
- #
58
- def bottom n=1, &blk
59
- if block_given?
60
- sort(&blk)[0...n]
61
- else
62
- #bottom_by(n) {|x| x }
63
- sort[0...n]
64
- end
65
- end
51
+ #
52
+ # Get the bottom +n+ items, ordered from bottom to top.
53
+ #
54
+ # Returns an +Array+ even when +n+ is 1.
55
+ #
56
+ # @see Enumerable#sort
57
+ #
58
+ def bottom n=1, &blk
59
+ if block_given?
60
+ sort(&blk)[0...n]
61
+ else
62
+ #bottom_by(n) {|x| x }
63
+ sort[0...n]
64
+ end
65
+ end
66
66
 
67
- #
68
- # Get the bottom +n+ items, in order from bottom to top, ordered
69
- # by mapping the values through the given block.
70
- #
71
- # Returns an +Array+ even when +n+ is 1. Values that are tied
72
- # after mapping are returned in the initial order.
73
- #
74
- # If no block is given, an enumerator is returned instead.
75
- #
76
- # @see Enumerable#sort_by
77
- #
78
- def bottom_by n=1, &blk
79
- return enum_for(:bottom_by, n) unless block_given?
80
- chain = {}
81
- each do |x|
82
- y = yield x
83
- chain[y] ||= []
84
- chain[y] << x
85
- end
86
- ary = []
87
- chain.keys.sort.each do |k|
88
- ary += chain[k]
89
- break if ary.length > n
90
- end
91
- ary[0...n]
92
- end
67
+ #
68
+ # Get the bottom +n+ items, in order from bottom to top, ordered
69
+ # by mapping the values through the given block.
70
+ #
71
+ # Returns an +Array+ even when +n+ is 1. Values that are tied
72
+ # after mapping are returned in the initial order.
73
+ #
74
+ # If no block is given, an enumerator is returned instead.
75
+ #
76
+ # @see Enumerable#sort_by
77
+ #
78
+ def bottom_by n=1, &blk
79
+ return enum_for(:bottom_by, n) unless block_given?
80
+ chain = {}
81
+ each do |x|
82
+ y = yield x
83
+ chain[y] ||= []
84
+ chain[y] << x
85
+ end
86
+ ary = []
87
+ chain.keys.sort.each do |k|
88
+ ary += chain[k]
89
+ break if ary.length > n
90
+ end
91
+ ary[0...n]
92
+ end
93
93
 
94
94
  end
95
95
 
96
96
  class Array
97
- def top! n=1, &blk
98
- replace(top n, &blk)
99
- end
100
- def top_by! n=1, &blk
101
- return enum_for(:top_by!, n) unless block_given?
102
- replace(top_by n, &blk)
103
- end
104
- def bottom! n=1, &blk
105
- replace(bottom n, &blk)
106
- end
107
- def bottom_by! n=1, &blk
108
- return enum_for(:bottom_by!, n) unless block_given?
109
- replace(bottom_by n, &blk)
110
- end
97
+ def top! n=1, &blk
98
+ replace(top n, &blk)
99
+ end
100
+ def top_by! n=1, &blk
101
+ return enum_for(:top_by!, n) unless block_given?
102
+ replace(top_by n, &blk)
103
+ end
104
+ def bottom! n=1, &blk
105
+ replace(bottom n, &blk)
106
+ end
107
+ def bottom_by! n=1, &blk
108
+ return enum_for(:bottom_by!, n) unless block_given?
109
+ replace(bottom_by n, &blk)
110
+ end
111
111
  end
112
112
 
113
113
  =begin
@@ -4,38 +4,38 @@ $VERBOSE = true
4
4
  require_relative '../lib/mug/and-or'
5
5
  class Test_and_or < Test::Unit::TestCase
6
6
 
7
- def test_and
8
- assert_equal( 2, 1.and(2) )
9
- assert_equal( 2, 0.and(2) )
10
- assert_equal( 2, 'x'.and(2) )
11
- assert_equal( 2, true.and(2) )
12
- assert_equal( false, false.and(2) )
13
- assert_equal( nil, nil.and(2) )
14
- end
15
-
16
- def test_and_2
17
- assert_equal( [1], [1].and([2], &:empty?) )
18
- assert_equal( [2], [].and([2], &:empty?) )
19
- assert_equal( 'abc', 'abc'.and(''){|x|x =~ /\d/} )
20
- assert_equal( '', 'a1c'.and(''){|x|x =~ /\d/} )
21
- end
22
-
23
-
24
- def test_or
25
- assert_equal( 1, 1.or(2) )
26
- assert_equal( 0, 0.or(2) )
27
- assert_equal( 'x', 'x'.or(2) )
28
- assert_equal( true, true.or(2) )
29
- assert_equal( 2, false.or(2) )
30
- assert_equal( 2, nil.or(2) )
31
- end
32
-
33
- def test_or_2
34
- assert_equal( [2], [1].or([2], &:empty?) )
35
- assert_equal( [], [].or([2], &:empty?) )
36
- assert_equal( '', 'abc'.or(''){|x|x =~ /\d/} )
37
- assert_equal( 'a1c', 'a1c'.or(''){|x|x =~ /\d/} )
38
- end
7
+ def test_and
8
+ assert_equal( 2, 1.and(2) )
9
+ assert_equal( 2, 0.and(2) )
10
+ assert_equal( 2, 'x'.and(2) )
11
+ assert_equal( 2, true.and(2) )
12
+ assert_equal( false, false.and(2) )
13
+ assert_equal( nil, nil.and(2) )
14
+ end
15
+
16
+ def test_and_2
17
+ assert_equal( [1], [1].and([2], &:empty?) )
18
+ assert_equal( [2], [].and([2], &:empty?) )
19
+ assert_equal( 'abc', 'abc'.and(''){|x|x =~ /\d/} )
20
+ assert_equal( '', 'a1c'.and(''){|x|x =~ /\d/} )
21
+ end
22
+
23
+
24
+ def test_or
25
+ assert_equal( 1, 1.or(2) )
26
+ assert_equal( 0, 0.or(2) )
27
+ assert_equal( 'x', 'x'.or(2) )
28
+ assert_equal( true, true.or(2) )
29
+ assert_equal( 2, false.or(2) )
30
+ assert_equal( 2, nil.or(2) )
31
+ end
32
+
33
+ def test_or_2
34
+ assert_equal( [2], [1].or([2], &:empty?) )
35
+ assert_equal( [], [].or([2], &:empty?) )
36
+ assert_equal( '', 'abc'.or(''){|x|x =~ /\d/} )
37
+ assert_equal( 'a1c', 'a1c'.or(''){|x|x =~ /\d/} )
38
+ end
39
39
 
40
40
  end
41
41
 
@@ -3,23 +3,23 @@ $VERBOSE = true
3
3
 
4
4
  require_relative '../lib/mug/any-and-all'
5
5
  class Test_any_and_all < Test::Unit::TestCase
6
- def test_any_and_all__block
7
- b = proc {|o| o > 1 }
8
- [
9
- [ false, [] ],
10
- [ false, [3,0,9] ],
11
- [ true, [3,5,9] ],
12
- ].each do |x, a|
13
- assert_equal( x, a.any_and_all?(&b) )
14
- end
15
- end
16
- def test_any_and_all__noblock
17
- [
18
- [ false, [] ],
19
- [ false, [3,nil,9] ],
20
- [ true, [3,5,9] ],
21
- ].each do |x, a|
22
- assert_equal( x, a.any_and_all? )
23
- end
24
- end
6
+ def test_any_and_all__block
7
+ b = proc {|o| o > 1 }
8
+ [
9
+ [ false, [] ],
10
+ [ false, [3,0,9] ],
11
+ [ true, [3,5,9] ],
12
+ ].each do |x, a|
13
+ assert_equal( x, a.any_and_all?(&b) )
14
+ end
15
+ end
16
+ def test_any_and_all__noblock
17
+ [
18
+ [ false, [] ],
19
+ [ false, [3,nil,9] ],
20
+ [ true, [3,5,9] ],
21
+ ].each do |x, a|
22
+ assert_equal( x, a.any_and_all? )
23
+ end
24
+ end
25
25
  end
@@ -2,55 +2,55 @@ require 'test/unit'
2
2
  $VERBOSE = true
3
3
 
4
4
  class Foo
5
- def bar a, b
6
- (a||0) + (b||0)
7
- end
5
+ def bar a, b
6
+ (a||0) + (b||0)
7
+ end
8
8
  end
9
9
 
10
10
  require_relative '../lib/mug/apply'
11
11
  class Test_apply < Test::Unit::TestCase
12
- def test_apply_proc
13
- prc = proc{|a,b,*c| (a||0) + (b||0) + c.inject(0, &:+) }
14
- p1 = prc.apply(1)
15
- assert( p1.is_a? Proc )
16
- assert_equal( 3, p1.apply(2) )
17
- assert_equal( 3, prc.apply(1,2) )
18
- assert_equal( 15, prc.apply(1,2,3,4,5) )
19
- end
20
- def test_apply_lambda
21
- lmb = lambda{|a,b,c| (a||0) + (b||0) + (c||0) }
22
-
23
- l1 = lmb.apply(1)
24
- assert( l1.is_a? Proc )
25
-
26
- l2 = l1.apply(2)
27
- assert( l2.is_a? Proc )
28
-
29
- assert_equal( 6, l2.apply(3) )
30
- assert_equal( 6, l1.apply(2,3) )
31
-
32
- assert_raise( ArgumentError ){ l2.apply(3, 4) }
33
- assert_raise( ArgumentError ){ lmb.apply(1, 2, 3, 4) }
34
- end
35
- def test_apply_method
36
- m1 = 1.method :+
37
- assert_equal( 3, m1.apply(2) )
38
- assert_raise( ArgumentError ){ m1.apply(2,3) }
39
-
40
- m2 = Foo.new.method :bar
41
- l1 = m2.apply(1)
42
- assert( l1.is_a? Proc )
43
-
44
- assert_equal( 3, l1.apply(2) )
45
- assert_equal( 3, m2.apply(1,2) )
46
-
47
- assert_raise( ArgumentError ){ l1.apply(2, 3) }
48
- assert_raise( ArgumentError ){ m2.apply(1, 2, 3) }
49
- end
50
- def test_curry_method
51
- m1 = 1.method :+
52
- assert( m1.curry.is_a? Proc )
53
- assert( m1.curry(1).is_a? Proc )
54
- assert_raise( ArgumentError ){ m1.curry(2) }
55
- end
12
+ def test_apply_proc
13
+ prc = proc{|a,b,*c| (a||0) + (b||0) + c.inject(0, &:+) }
14
+ p1 = prc.apply(1)
15
+ assert( p1.is_a? Proc )
16
+ assert_equal( 3, p1.apply(2) )
17
+ assert_equal( 3, prc.apply(1,2) )
18
+ assert_equal( 15, prc.apply(1,2,3,4,5) )
19
+ end
20
+ def test_apply_lambda
21
+ lmb = lambda{|a,b,c| (a||0) + (b||0) + (c||0) }
22
+
23
+ l1 = lmb.apply(1)
24
+ assert( l1.is_a? Proc )
25
+
26
+ l2 = l1.apply(2)
27
+ assert( l2.is_a? Proc )
28
+
29
+ assert_equal( 6, l2.apply(3) )
30
+ assert_equal( 6, l1.apply(2,3) )
31
+
32
+ assert_raise( ArgumentError ){ l2.apply(3, 4) }
33
+ assert_raise( ArgumentError ){ lmb.apply(1, 2, 3, 4) }
34
+ end
35
+ def test_apply_method
36
+ m1 = 1.method :+
37
+ assert_equal( 3, m1.apply(2) )
38
+ assert_raise( ArgumentError ){ m1.apply(2,3) }
39
+
40
+ m2 = Foo.new.method :bar
41
+ l1 = m2.apply(1)
42
+ assert( l1.is_a? Proc )
43
+
44
+ assert_equal( 3, l1.apply(2) )
45
+ assert_equal( 3, m2.apply(1,2) )
46
+
47
+ assert_raise( ArgumentError ){ l1.apply(2, 3) }
48
+ assert_raise( ArgumentError ){ m2.apply(1, 2, 3) }
49
+ end
50
+ def test_curry_method
51
+ m1 = 1.method :+
52
+ assert( m1.curry.is_a? Proc )
53
+ assert( m1.curry(1).is_a? Proc )
54
+ assert_raise( ArgumentError ){ m1.curry(2) }
55
+ end
56
56
  end