mug 0.12.0 → 0.13.0
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 +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
         
     |