eqq 0.0.1 → 0.0.2
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/MIT-LICENSE.txt +1 -1
- data/README.md +2 -2
- data/lib/eqq.rb +23 -221
- data/lib/eqq/buildable.rb +172 -0
- data/lib/eqq/version.rb +1 -1
- data/sig/eqq.rbs +49 -0
- metadata +5 -217
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: fd093a7aa8c034327d463c56bfe120a8ecc48b52649ba7900491f05cc130cc38
         | 
| 4 | 
            +
              data.tar.gz: 13f7ca2f2f40d9be41abd4408f5486b892f345347eb07eeb3f4d936c47cc92ab
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2e510f5313e0f890bf3c8277a413f937b0a26e2ba58e501591288556783bc5fffc944c23a1216ddf95308a111b06c6ac82557526d9f7de49ef9dbe7806f93bb6
         | 
| 7 | 
            +
              data.tar.gz: 719905cbd2f71a388e13ca0427b7db49115513ce11395a436d8ef9fc43397c9c77cc408135862147bbfc3bac3fb36615332752f56ab28e4136bc74b8db3f97dd
         | 
    
        data/MIT-LICENSE.txt
    CHANGED
    
    | @@ -7,7 +7,7 @@ of this software and associated documentation files (the "Software"), to deal | |
| 7 7 | 
             
            in the Software without restriction, including without limitation the rights
         | 
| 8 8 | 
             
            to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         | 
| 9 9 | 
             
            copies of the Software, and to permit persons to whom the Software is
         | 
| 10 | 
            -
            furnished to do so, subject to the following  | 
| 10 | 
            +
            furnished to do so, subject to the following patterns:
         | 
| 11 11 |  | 
| 12 12 | 
             
            The above copyright notice and this permission notice shall be included in all
         | 
| 13 13 | 
             
            copies or substantial portions of the Software.
         | 
    
        data/README.md
    CHANGED
    
    
    
        data/lib/eqq.rb
    CHANGED
    
    | @@ -2,238 +2,40 @@ | |
| 2 2 | 
             
            # frozen_string_literal: true
         | 
| 3 3 |  | 
| 4 4 | 
             
            # Copyright (c) 2011 Kenichi Kamiya
         | 
| 5 | 
            -
            # Forked from https://github.com/kachick/ | 
| 5 | 
            +
            # Forked from https://github.com/kachick/validation at 2021
         | 
| 6 6 |  | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                case object
         | 
| 10 | 
            -
                when Proc, Method
         | 
| 11 | 
            -
                  object.arity == 1
         | 
| 12 | 
            -
                else
         | 
| 13 | 
            -
                  begin
         | 
| 14 | 
            -
                    object.respond_to?(:===)
         | 
| 15 | 
            -
                  rescue NoMethodError
         | 
| 16 | 
            -
                    false
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
              def self.define(&block)
         | 
| 22 | 
            -
                module_exec(&block)
         | 
| 23 | 
            -
              end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
              module_function
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              # A condition builder.
         | 
| 28 | 
            -
              # @param condition1 [Proc, Method, #===]
         | 
| 29 | 
            -
              # @param condition2 [Proc, Method, #===]
         | 
| 30 | 
            -
              # @param conditions [Array<Proc, Method, #===>]
         | 
| 31 | 
            -
              # @return [Proc]
         | 
| 32 | 
            -
              #   this lambda return true if match all conditions
         | 
| 33 | 
            -
              def AND(condition1, condition2, *conditions)
         | 
| 34 | 
            -
                ->v {
         | 
| 35 | 
            -
                  [condition1, condition2, *conditions].all? { |condition| condition === v }
         | 
| 36 | 
            -
                }
         | 
| 37 | 
            -
              end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
              # A condition builder.
         | 
| 40 | 
            -
              # @param condition1 [Proc, Method, #===]
         | 
| 41 | 
            -
              # @param condition2 [Proc, Method, #===]
         | 
| 42 | 
            -
              # @param conditions [Array<Proc, Method, #===>]
         | 
| 43 | 
            -
              # @return [Proc]
         | 
| 44 | 
            -
              def NAND(condition1, condition2, *conditions)
         | 
| 45 | 
            -
                NOT(AND(condition1, condition2, *conditions))
         | 
| 46 | 
            -
              end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
              # A condition builder.
         | 
| 49 | 
            -
              # @param condition1 [Proc, Method, #===]
         | 
| 50 | 
            -
              # @param condition2 [Proc, Method, #===]
         | 
| 51 | 
            -
              # @param conditions [Array<Proc, Method, #===>]
         | 
| 52 | 
            -
              # @return [Proc]
         | 
| 53 | 
            -
              #   this lambda return true if match a any condition
         | 
| 54 | 
            -
              def OR(condition1, condition2, *conditions)
         | 
| 55 | 
            -
                ->v {
         | 
| 56 | 
            -
                  [condition1, condition2, *conditions].any? { |condition| condition === v }
         | 
| 57 | 
            -
                }
         | 
| 58 | 
            -
              end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
              # A condition builder.
         | 
| 61 | 
            -
              # @param condition1 [Proc, Method, #===]
         | 
| 62 | 
            -
              # @param condition2 [Proc, Method, #===]
         | 
| 63 | 
            -
              # @param conditions [Array<Proc, Method, #===>]
         | 
| 64 | 
            -
              # @return [Proc]
         | 
| 65 | 
            -
              def NOR(condition1, condition2, *conditions)
         | 
| 66 | 
            -
                NOT(OR(condition1, condition2, *conditions))
         | 
| 67 | 
            -
              end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
              # A condition builder.
         | 
| 70 | 
            -
              # @param condition1 [Proc, Method, #===]
         | 
| 71 | 
            -
              # @param condition2 [Proc, Method, #===]
         | 
| 72 | 
            -
              # @param conditions [Array<Proc, Method, #===>]
         | 
| 73 | 
            -
              # @return [Proc]
         | 
| 74 | 
            -
              def XOR(condition1, condition2, *conditions)
         | 
| 75 | 
            -
                ->v {
         | 
| 76 | 
            -
                  [condition1, condition2, *conditions].one? { |condition| condition === v }
         | 
| 77 | 
            -
                }
         | 
| 78 | 
            -
              end
         | 
| 79 | 
            -
             | 
| 80 | 
            -
              # A condition builder.
         | 
| 81 | 
            -
              # @param condition1 [Proc, Method, #===]
         | 
| 82 | 
            -
              # @param condition2 [Proc, Method, #===]
         | 
| 83 | 
            -
              # @param conditions [Array<Proc, Method, #===>]
         | 
| 84 | 
            -
              # @return [Proc]
         | 
| 85 | 
            -
              def XNOR(condition1, condition2, *conditions)
         | 
| 86 | 
            -
                NOT(XOR(condition1, condition2, *conditions))
         | 
| 87 | 
            -
              end
         | 
| 88 | 
            -
             | 
| 89 | 
            -
              # A condition builder.
         | 
| 90 | 
            -
              # @param condition [Proc, Method, #===]
         | 
| 91 | 
            -
              # @return [Proc] A condition invert the original condition.
         | 
| 92 | 
            -
              def NOT(condition)
         | 
| 93 | 
            -
                unless Eqq.conditionable?(condition)
         | 
| 94 | 
            -
                  raise TypeError, 'wrong object for condition'
         | 
| 95 | 
            -
                end
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                ->v { !(condition === v) }
         | 
| 98 | 
            -
              end
         | 
| 99 | 
            -
             | 
| 100 | 
            -
              # A condition builder.
         | 
| 101 | 
            -
              # @param obj [#==]
         | 
| 102 | 
            -
              # @return [Proc]
         | 
| 103 | 
            -
              #   this lambda return true if a argument match under #== method
         | 
| 104 | 
            -
              def EQ(obj)
         | 
| 105 | 
            -
                ->v { obj == v }
         | 
| 106 | 
            -
              end
         | 
| 7 | 
            +
            require_relative 'eqq/buildable'
         | 
| 8 | 
            +
            require_relative 'eqq/version'
         | 
| 107 9 |  | 
| 108 | 
            -
             | 
| 109 | 
            -
               | 
| 110 | 
            -
              # @return [Proc]
         | 
| 111 | 
            -
              #   this lambda return true if a argument match under #equal? method
         | 
| 112 | 
            -
              def SAME(obj)
         | 
| 113 | 
            -
                ->v { obj.equal?(v) }
         | 
| 114 | 
            -
              end
         | 
| 10 | 
            +
            module Eqq
         | 
| 11 | 
            +
              extend Buildable
         | 
| 115 12 |  | 
| 116 | 
            -
               | 
| 117 | 
            -
               | 
| 118 | 
            -
              # @param messages [Array<Symbol, String>]
         | 
| 119 | 
            -
              # @return [Proc]
         | 
| 120 | 
            -
              #   this lambda return true if a argument respond to all messages
         | 
| 121 | 
            -
              def CAN(message1, *messages)
         | 
| 122 | 
            -
                messages = [message1, *messages].map(&:to_sym)
         | 
| 13 | 
            +
              class Error < StandardError; end
         | 
| 14 | 
            +
              class InvalidProductError < Error; end
         | 
| 123 15 |  | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
                }
         | 
| 16 | 
            +
              class DSLScope
         | 
| 17 | 
            +
                include Buildable
         | 
| 127 18 | 
             
              end
         | 
| 128 19 |  | 
| 129 | 
            -
               | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
              def QUIET(condition1, *conditions)
         | 
| 136 | 
            -
                conditions = [condition1, *conditions]
         | 
| 137 | 
            -
                unless conditions.all? { |c| Eqq.conditionable?(c) }
         | 
| 138 | 
            -
                  raise TypeError, 'wrong object for condition'
         | 
| 139 | 
            -
                end
         | 
| 140 | 
            -
             | 
| 141 | 
            -
                ->v {
         | 
| 142 | 
            -
                  conditions.all? { |condition|
         | 
| 20 | 
            +
              class << self
         | 
| 21 | 
            +
                def valid?(object)
         | 
| 22 | 
            +
                  case object
         | 
| 23 | 
            +
                  when Proc, Method
         | 
| 24 | 
            +
                    object.arity == 1
         | 
| 25 | 
            +
                  else
         | 
| 143 26 | 
             
                    begin
         | 
| 144 | 
            -
                       | 
| 145 | 
            -
                    rescue  | 
| 27 | 
            +
                      object.respond_to?(:===)
         | 
| 28 | 
            +
                    rescue NoMethodError
         | 
| 146 29 | 
             
                      false
         | 
| 147 | 
            -
                    else
         | 
| 148 | 
            -
                      true
         | 
| 149 30 | 
             
                    end
         | 
| 150 | 
            -
                  }
         | 
| 151 | 
            -
                }
         | 
| 152 | 
            -
              end
         | 
| 153 | 
            -
             | 
| 154 | 
            -
              # A condition builder.
         | 
| 155 | 
            -
              # @param exception [Exception]
         | 
| 156 | 
            -
              # @param exceptions [Array<Exception>]
         | 
| 157 | 
            -
              # @return [Proc]
         | 
| 158 | 
            -
              #   this lambda return true
         | 
| 159 | 
            -
              #   if catch any kindly exceptions when a argument checking in a block parameter
         | 
| 160 | 
            -
              def RESCUE(exception, *exceptions, &condition)
         | 
| 161 | 
            -
                exceptions = [exception, *exceptions]
         | 
| 162 | 
            -
                raise ArgumentError unless Eqq.conditionable?(condition)
         | 
| 163 | 
            -
                raise ArgumentError unless exceptions.all?(Exception)
         | 
| 164 | 
            -
             | 
| 165 | 
            -
                ->v {
         | 
| 166 | 
            -
                  begin
         | 
| 167 | 
            -
                    condition.call(v)
         | 
| 168 | 
            -
                    false
         | 
| 169 | 
            -
                  rescue *exceptions
         | 
| 170 | 
            -
                    true
         | 
| 171 | 
            -
                  rescue Exception
         | 
| 172 | 
            -
                    false
         | 
| 173 | 
            -
                  end
         | 
| 174 | 
            -
                }
         | 
| 175 | 
            -
              end
         | 
| 176 | 
            -
             | 
| 177 | 
            -
              # A condition builder.
         | 
| 178 | 
            -
              # @param exception [Exception]
         | 
| 179 | 
            -
              # @return [Proc]
         | 
| 180 | 
            -
              #   this lambda return true
         | 
| 181 | 
            -
              #   if catch a specific exception when a argument checking in a block parameter
         | 
| 182 | 
            -
              def CATCH(exception, &condition)
         | 
| 183 | 
            -
                raise ArgumentError unless Eqq.conditionable?(condition)
         | 
| 184 | 
            -
                raise ArgumentError unless exceptions.all?(Exception)
         | 
| 185 | 
            -
             | 
| 186 | 
            -
                ->v {
         | 
| 187 | 
            -
                  begin
         | 
| 188 | 
            -
                    condition.call(v)
         | 
| 189 | 
            -
                  rescue Exception => err
         | 
| 190 | 
            -
                    err.instance_of?(exception)
         | 
| 191 | 
            -
                  else
         | 
| 192 | 
            -
                    false
         | 
| 193 31 | 
             
                  end
         | 
| 194 | 
            -
                 | 
| 195 | 
            -
              end
         | 
| 196 | 
            -
             | 
| 197 | 
            -
              # A condition builder.
         | 
| 198 | 
            -
              # @param condition1 [Proc, Method, #===]
         | 
| 199 | 
            -
              # @param condition2 [Proc, Method, #===]
         | 
| 200 | 
            -
              # @param conditions [Array<Proc, Method, #===>]
         | 
| 201 | 
            -
              # @return [Proc]
         | 
| 202 | 
            -
              #   this lambda return true
         | 
| 203 | 
            -
              #   if all included objects match all conditions
         | 
| 204 | 
            -
              def ALL(condition1, condition2, *conditions)
         | 
| 205 | 
            -
                condition = Eqq.AND(condition1, condition2, *conditions)
         | 
| 206 | 
            -
             | 
| 207 | 
            -
                ->list {
         | 
| 208 | 
            -
                  enum = (
         | 
| 209 | 
            -
                    case
         | 
| 210 | 
            -
                    when list.respond_to?(:each_value)
         | 
| 211 | 
            -
                      list.each_value
         | 
| 212 | 
            -
                    when list.respond_to?(:all?)
         | 
| 213 | 
            -
                      list
         | 
| 214 | 
            -
                    when list.respond_to?(:each)
         | 
| 215 | 
            -
                      list.each
         | 
| 216 | 
            -
                    else
         | 
| 217 | 
            -
                      return false
         | 
| 218 | 
            -
                    end
         | 
| 219 | 
            -
                  )
         | 
| 220 | 
            -
             | 
| 221 | 
            -
                  enum.all?(condition)
         | 
| 222 | 
            -
                }
         | 
| 223 | 
            -
              end
         | 
| 224 | 
            -
             | 
| 225 | 
            -
              def ANYTHING
         | 
| 226 | 
            -
                # BasicObject.=== always passing
         | 
| 227 | 
            -
                BasicObject
         | 
| 228 | 
            -
              end
         | 
| 32 | 
            +
                end
         | 
| 229 33 |  | 
| 230 | 
            -
             | 
| 34 | 
            +
                def define(&block)
         | 
| 35 | 
            +
                  pattern = DSLScope.new.instance_exec(&block)
         | 
| 36 | 
            +
                  raise InvalidProductError unless valid?(pattern)
         | 
| 231 37 |  | 
| 232 | 
            -
             | 
| 233 | 
            -
             | 
| 234 | 
            -
              def BOOLEAN
         | 
| 235 | 
            -
                BOOLEAN
         | 
| 38 | 
            +
                  pattern
         | 
| 39 | 
            +
                end
         | 
| 236 40 | 
             
              end
         | 
| 237 41 | 
             
            end
         | 
| 238 | 
            -
             | 
| 239 | 
            -
            require_relative 'eqq/version'
         | 
| @@ -0,0 +1,172 @@ | |
| 1 | 
            +
            # coding: us-ascii
         | 
| 2 | 
            +
            # frozen_string_literal: true
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Eqq
         | 
| 5 | 
            +
              module Buildable
         | 
| 6 | 
            +
                extend self
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                # @param pattern1 [Proc, Method, #===]
         | 
| 9 | 
            +
                # @param pattern2 [Proc, Method, #===]
         | 
| 10 | 
            +
                # @param patterns [Array<Proc, Method, #===>]
         | 
| 11 | 
            +
                # @return [Proc]
         | 
| 12 | 
            +
                #   this lambda return true if match all patterns
         | 
| 13 | 
            +
                def AND(pattern1, pattern2, *patterns)
         | 
| 14 | 
            +
                  ->v {
         | 
| 15 | 
            +
                    [pattern1, pattern2, *patterns].all? { |pattern| pattern === v }
         | 
| 16 | 
            +
                  }
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                # @param pattern1 [Proc, Method, #===]
         | 
| 20 | 
            +
                # @param pattern2 [Proc, Method, #===]
         | 
| 21 | 
            +
                # @param patterns [Array<Proc, Method, #===>]
         | 
| 22 | 
            +
                # @return [Proc]
         | 
| 23 | 
            +
                def NAND(pattern1, pattern2, *patterns)
         | 
| 24 | 
            +
                  NOT(AND(pattern1, pattern2, *patterns))
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                # @param pattern1 [Proc, Method, #===]
         | 
| 28 | 
            +
                # @param pattern2 [Proc, Method, #===]
         | 
| 29 | 
            +
                # @param patterns [Array<Proc, Method, #===>]
         | 
| 30 | 
            +
                # @return [Proc]
         | 
| 31 | 
            +
                #   this lambda return true if match a any pattern
         | 
| 32 | 
            +
                def OR(pattern1, pattern2, *patterns)
         | 
| 33 | 
            +
                  ->v {
         | 
| 34 | 
            +
                    [pattern1, pattern2, *patterns].any? { |pattern| pattern === v }
         | 
| 35 | 
            +
                  }
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                # @param pattern1 [Proc, Method, #===]
         | 
| 39 | 
            +
                # @param pattern2 [Proc, Method, #===]
         | 
| 40 | 
            +
                # @param patterns [Array<Proc, Method, #===>]
         | 
| 41 | 
            +
                # @return [Proc]
         | 
| 42 | 
            +
                def NOR(pattern1, pattern2, *patterns)
         | 
| 43 | 
            +
                  NOT(OR(pattern1, pattern2, *patterns))
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                # @param pattern1 [Proc, Method, #===]
         | 
| 47 | 
            +
                # @param pattern2 [Proc, Method, #===]
         | 
| 48 | 
            +
                # @param patterns [Array<Proc, Method, #===>]
         | 
| 49 | 
            +
                # @return [Proc]
         | 
| 50 | 
            +
                def XOR(pattern1, pattern2, *patterns)
         | 
| 51 | 
            +
                  ->v {
         | 
| 52 | 
            +
                    [pattern1, pattern2, *patterns].one? { |pattern| pattern === v }
         | 
| 53 | 
            +
                  }
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                # @param pattern1 [Proc, Method, #===]
         | 
| 57 | 
            +
                # @param pattern2 [Proc, Method, #===]
         | 
| 58 | 
            +
                # @param patterns [Array<Proc, Method, #===>]
         | 
| 59 | 
            +
                # @return [Proc]
         | 
| 60 | 
            +
                def XNOR(pattern1, pattern2, *patterns)
         | 
| 61 | 
            +
                  NOT(XOR(pattern1, pattern2, *patterns))
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                # @param pattern [Proc, Method, #===]
         | 
| 65 | 
            +
                # @return [Proc]
         | 
| 66 | 
            +
                def NOT(pattern)
         | 
| 67 | 
            +
                  raise ArgumentError, 'wrong object for pattern' unless Eqq.valid?(pattern)
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  ->v { !(pattern === v) }
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                # A pattern builder.
         | 
| 73 | 
            +
                # @param obj [#==]
         | 
| 74 | 
            +
                # @return [Proc]
         | 
| 75 | 
            +
                def EQ(obj)
         | 
| 76 | 
            +
                  ->v { obj == v }
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                # @param obj [#equal?]
         | 
| 80 | 
            +
                # @return [Proc]
         | 
| 81 | 
            +
                def SAME(obj)
         | 
| 82 | 
            +
                  ->v { obj.equal?(v) }
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                # @param message1 [Symbol, String]
         | 
| 86 | 
            +
                # @param messages [Array<Symbol, String>]
         | 
| 87 | 
            +
                # @return [Proc]
         | 
| 88 | 
            +
                def CAN(message1, *messages)
         | 
| 89 | 
            +
                  messages = begin
         | 
| 90 | 
            +
                    [message1, *messages].map(&:to_sym)
         | 
| 91 | 
            +
                  rescue NoMethodError
         | 
| 92 | 
            +
                    raise ArgumentError
         | 
| 93 | 
            +
                  end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                  ->v {
         | 
| 96 | 
            +
                    messages.all? { |message|
         | 
| 97 | 
            +
                      begin
         | 
| 98 | 
            +
                        v.respond_to?(message)
         | 
| 99 | 
            +
                      rescue NoMethodError
         | 
| 100 | 
            +
                        false
         | 
| 101 | 
            +
                      end
         | 
| 102 | 
            +
                    }
         | 
| 103 | 
            +
                  }
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                # @param pattern1 [Proc, Method, #===]
         | 
| 107 | 
            +
                # @param patterns [Array<Proc, Method, #===>]
         | 
| 108 | 
            +
                # @return [Proc]
         | 
| 109 | 
            +
                def QUIET(pattern1, *patterns)
         | 
| 110 | 
            +
                  patterns = [pattern1, *patterns]
         | 
| 111 | 
            +
                  unless patterns.all? { |pattern| Eqq.valid?(pattern) }
         | 
| 112 | 
            +
                    raise ArgumentError, 'wrong object for pattern'
         | 
| 113 | 
            +
                  end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                  ->v {
         | 
| 116 | 
            +
                    patterns.all? { |pattern|
         | 
| 117 | 
            +
                      begin
         | 
| 118 | 
            +
                        pattern === v
         | 
| 119 | 
            +
                      rescue Exception
         | 
| 120 | 
            +
                        false
         | 
| 121 | 
            +
                      else
         | 
| 122 | 
            +
                        true
         | 
| 123 | 
            +
                      end
         | 
| 124 | 
            +
                    }
         | 
| 125 | 
            +
                  }
         | 
| 126 | 
            +
                end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                # @param mod [Module]
         | 
| 129 | 
            +
                # @param pattern [Proc, Method, #===]
         | 
| 130 | 
            +
                # @return [Proc]
         | 
| 131 | 
            +
                def RESCUE(mod, pattern)
         | 
| 132 | 
            +
                  raise ArgumentError unless Eqq.valid?(pattern)
         | 
| 133 | 
            +
                  raise ArgumentError unless Module === mod
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                  ->v {
         | 
| 136 | 
            +
                    begin
         | 
| 137 | 
            +
                      pattern === v
         | 
| 138 | 
            +
                      false
         | 
| 139 | 
            +
                    rescue mod
         | 
| 140 | 
            +
                      true
         | 
| 141 | 
            +
                    rescue Exception
         | 
| 142 | 
            +
                      false
         | 
| 143 | 
            +
                    end
         | 
| 144 | 
            +
                  }
         | 
| 145 | 
            +
                end
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                # @param name [Symbol, #to_sym]
         | 
| 148 | 
            +
                # @param pattern [Proc, Method, #===]
         | 
| 149 | 
            +
                # @return [Proc]
         | 
| 150 | 
            +
                def SEND(name, pattern)
         | 
| 151 | 
            +
                  raise InvalidProductError unless Eqq.valid?(pattern)
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                  ->v {
         | 
| 154 | 
            +
                    v.__send__(name, pattern)
         | 
| 155 | 
            +
                  }
         | 
| 156 | 
            +
                end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                # @return [BasicObject]
         | 
| 159 | 
            +
                def ANYTHING
         | 
| 160 | 
            +
                  # BasicObject.=== always passing
         | 
| 161 | 
            +
                  BasicObject
         | 
| 162 | 
            +
                end
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                BOOLEAN = OR(SAME(true), SAME(false))
         | 
| 165 | 
            +
                private_constant :BOOLEAN
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                # @return [BOOLEAN]
         | 
| 168 | 
            +
                def BOOLEAN
         | 
| 169 | 
            +
                  BOOLEAN
         | 
| 170 | 
            +
                end
         | 
| 171 | 
            +
              end
         | 
| 172 | 
            +
            end
         | 
    
        data/lib/eqq/version.rb
    CHANGED
    
    
    
        data/sig/eqq.rbs
    ADDED
    
    | @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            module Eqq
         | 
| 2 | 
            +
              interface _Patternable
         | 
| 3 | 
            +
                def ===: (untyped object) -> bool
         | 
| 4 | 
            +
              end
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              interface _ToSym
         | 
| 7 | 
            +
                def to_sym: -> Symbol
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              module Buildable
         | 
| 11 | 
            +
                # A pribate constant. Should not be used in your code.
         | 
| 12 | 
            +
                BOOLEAN: ^(untyped object) -> bool
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                extend Buildable
         | 
| 15 | 
            +
                def OR: (_Patternable, _Patternable, *_Patternable) -> ^(untyped object) -> bool
         | 
| 16 | 
            +
                def AND: (_Patternable, _Patternable, *_Patternable) -> ^(untyped object) -> bool
         | 
| 17 | 
            +
                def NAND: (_Patternable, _Patternable, *_Patternable) -> ^(untyped object) -> bool
         | 
| 18 | 
            +
                def NOR: (_Patternable, _Patternable, *_Patternable) -> ^(untyped object) -> bool
         | 
| 19 | 
            +
                def XOR: (_Patternable, _Patternable, *_Patternable) -> ^(untyped object) -> bool
         | 
| 20 | 
            +
                def XNOR: (_Patternable, _Patternable, *_Patternable) -> ^(untyped object) -> bool
         | 
| 21 | 
            +
                def NOT: (_Patternable) -> ^(untyped object) -> bool
         | 
| 22 | 
            +
                def EQ: (untyped object) -> ^(untyped object) -> bool
         | 
| 23 | 
            +
                def SAME: (untyped object) -> ^(untyped object) -> bool
         | 
| 24 | 
            +
                def CAN: (_ToSym, *_ToSym) -> ^(untyped object) -> bool
         | 
| 25 | 
            +
                def RESCUE: (Module, _Patternable) -> ^(untyped object) -> bool
         | 
| 26 | 
            +
                def QUIET: (_Patternable, *_Patternable) -> ^(untyped object) -> bool
         | 
| 27 | 
            +
                def SEND: (Symbol | String name, _Patternable) -> ^(untyped object) -> bool
         | 
| 28 | 
            +
                def ANYTHING: () -> BasicObject
         | 
| 29 | 
            +
                def BOOLEAN: () -> ^(untyped object) -> bool
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              extend Buildable
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              class Error < StandardError
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              class InvalidProductError < Error
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              # A pribate API. Should not be used in your code.
         | 
| 41 | 
            +
              class DSLScope
         | 
| 42 | 
            +
                include Buildable
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              VERSION: String
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              def self.valid?: (untyped object) -> bool
         | 
| 48 | 
            +
              def self.define:  { () -> _Patternable } -> _Patternable
         | 
| 49 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: eqq
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Kenichi Kamiya
         | 
| @@ -9,221 +9,7 @@ autorequire: | |
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 11 | 
             
            date: 2021-06-01 00:00:00.000000000 Z
         | 
| 12 | 
            -
            dependencies:
         | 
| 13 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              name: test-unit
         | 
| 15 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            -
                requirements:
         | 
| 17 | 
            -
                - - ">="
         | 
| 18 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 3.4.1
         | 
| 20 | 
            -
                - - "<"
         | 
| 21 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            -
                    version: '4.0'
         | 
| 23 | 
            -
              type: :development
         | 
| 24 | 
            -
              prerelease: false
         | 
| 25 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 | 
            -
                requirements:
         | 
| 27 | 
            -
                - - ">="
         | 
| 28 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            -
                    version: 3.4.1
         | 
| 30 | 
            -
                - - "<"
         | 
| 31 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            -
                    version: '4.0'
         | 
| 33 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 34 | 
            -
              name: irb
         | 
| 35 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 36 | 
            -
                requirements:
         | 
| 37 | 
            -
                - - ">="
         | 
| 38 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 39 | 
            -
                    version: 1.3.5
         | 
| 40 | 
            -
                - - "<"
         | 
| 41 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 42 | 
            -
                    version: '2.0'
         | 
| 43 | 
            -
              type: :development
         | 
| 44 | 
            -
              prerelease: false
         | 
| 45 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 46 | 
            -
                requirements:
         | 
| 47 | 
            -
                - - ">="
         | 
| 48 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 49 | 
            -
                    version: 1.3.5
         | 
| 50 | 
            -
                - - "<"
         | 
| 51 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 52 | 
            -
                    version: '2.0'
         | 
| 53 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 54 | 
            -
              name: irb-power_assert
         | 
| 55 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 56 | 
            -
                requirements:
         | 
| 57 | 
            -
                - - '='
         | 
| 58 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 59 | 
            -
                    version: 0.0.2
         | 
| 60 | 
            -
              type: :development
         | 
| 61 | 
            -
              prerelease: false
         | 
| 62 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 63 | 
            -
                requirements:
         | 
| 64 | 
            -
                - - '='
         | 
| 65 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 66 | 
            -
                    version: 0.0.2
         | 
| 67 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 68 | 
            -
              name: warning
         | 
| 69 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 70 | 
            -
                requirements:
         | 
| 71 | 
            -
                - - ">="
         | 
| 72 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 73 | 
            -
                    version: 1.2.0
         | 
| 74 | 
            -
                - - "<"
         | 
| 75 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 76 | 
            -
                    version: '2.0'
         | 
| 77 | 
            -
              type: :development
         | 
| 78 | 
            -
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 80 | 
            -
                requirements:
         | 
| 81 | 
            -
                - - ">="
         | 
| 82 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 83 | 
            -
                    version: 1.2.0
         | 
| 84 | 
            -
                - - "<"
         | 
| 85 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 86 | 
            -
                    version: '2.0'
         | 
| 87 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 88 | 
            -
              name: rake
         | 
| 89 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 90 | 
            -
                requirements:
         | 
| 91 | 
            -
                - - ">="
         | 
| 92 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 93 | 
            -
                    version: 13.0.3
         | 
| 94 | 
            -
                - - "<"
         | 
| 95 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version: '20.0'
         | 
| 97 | 
            -
              type: :development
         | 
| 98 | 
            -
              prerelease: false
         | 
| 99 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 100 | 
            -
                requirements:
         | 
| 101 | 
            -
                - - ">="
         | 
| 102 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            -
                    version: 13.0.3
         | 
| 104 | 
            -
                - - "<"
         | 
| 105 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 106 | 
            -
                    version: '20.0'
         | 
| 107 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 108 | 
            -
              name: yard
         | 
| 109 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 110 | 
            -
                requirements:
         | 
| 111 | 
            -
                - - ">="
         | 
| 112 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 113 | 
            -
                    version: 0.9.26
         | 
| 114 | 
            -
                - - "<"
         | 
| 115 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 116 | 
            -
                    version: '2'
         | 
| 117 | 
            -
              type: :development
         | 
| 118 | 
            -
              prerelease: false
         | 
| 119 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 120 | 
            -
                requirements:
         | 
| 121 | 
            -
                - - ">="
         | 
| 122 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 123 | 
            -
                    version: 0.9.26
         | 
| 124 | 
            -
                - - "<"
         | 
| 125 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 126 | 
            -
                    version: '2'
         | 
| 127 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 128 | 
            -
              name: rubocop
         | 
| 129 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 130 | 
            -
                requirements:
         | 
| 131 | 
            -
                - - ">="
         | 
| 132 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 133 | 
            -
                    version: 1.15.0
         | 
| 134 | 
            -
                - - "<"
         | 
| 135 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 136 | 
            -
                    version: 1.16.0
         | 
| 137 | 
            -
              type: :development
         | 
| 138 | 
            -
              prerelease: false
         | 
| 139 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 140 | 
            -
                requirements:
         | 
| 141 | 
            -
                - - ">="
         | 
| 142 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 143 | 
            -
                    version: 1.15.0
         | 
| 144 | 
            -
                - - "<"
         | 
| 145 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 146 | 
            -
                    version: 1.16.0
         | 
| 147 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 148 | 
            -
              name: rubocop-rake
         | 
| 149 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 150 | 
            -
                requirements:
         | 
| 151 | 
            -
                - - ">="
         | 
| 152 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 153 | 
            -
                    version: 0.5.1
         | 
| 154 | 
            -
                - - "<"
         | 
| 155 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 156 | 
            -
                    version: 0.6.0
         | 
| 157 | 
            -
              type: :development
         | 
| 158 | 
            -
              prerelease: false
         | 
| 159 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 160 | 
            -
                requirements:
         | 
| 161 | 
            -
                - - ">="
         | 
| 162 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 163 | 
            -
                    version: 0.5.1
         | 
| 164 | 
            -
                - - "<"
         | 
| 165 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            -
                    version: 0.6.0
         | 
| 167 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 168 | 
            -
              name: rubocop-performance
         | 
| 169 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 170 | 
            -
                requirements:
         | 
| 171 | 
            -
                - - ">="
         | 
| 172 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 173 | 
            -
                    version: 1.11.3
         | 
| 174 | 
            -
                - - "<"
         | 
| 175 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 176 | 
            -
                    version: 1.12.0
         | 
| 177 | 
            -
              type: :development
         | 
| 178 | 
            -
              prerelease: false
         | 
| 179 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 180 | 
            -
                requirements:
         | 
| 181 | 
            -
                - - ">="
         | 
| 182 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 183 | 
            -
                    version: 1.11.3
         | 
| 184 | 
            -
                - - "<"
         | 
| 185 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 186 | 
            -
                    version: 1.12.0
         | 
| 187 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 188 | 
            -
              name: rubocop-rubycw
         | 
| 189 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 190 | 
            -
                requirements:
         | 
| 191 | 
            -
                - - ">="
         | 
| 192 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 193 | 
            -
                    version: 0.1.6
         | 
| 194 | 
            -
                - - "<"
         | 
| 195 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 196 | 
            -
                    version: 0.2.0
         | 
| 197 | 
            -
              type: :development
         | 
| 198 | 
            -
              prerelease: false
         | 
| 199 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 200 | 
            -
                requirements:
         | 
| 201 | 
            -
                - - ">="
         | 
| 202 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 203 | 
            -
                    version: 0.1.6
         | 
| 204 | 
            -
                - - "<"
         | 
| 205 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 206 | 
            -
                    version: 0.2.0
         | 
| 207 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 208 | 
            -
              name: rubocop-md
         | 
| 209 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 210 | 
            -
                requirements:
         | 
| 211 | 
            -
                - - ">="
         | 
| 212 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 213 | 
            -
                    version: 1.0.1
         | 
| 214 | 
            -
                - - "<"
         | 
| 215 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 216 | 
            -
                    version: 2.0.0
         | 
| 217 | 
            -
              type: :development
         | 
| 218 | 
            -
              prerelease: false
         | 
| 219 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 220 | 
            -
                requirements:
         | 
| 221 | 
            -
                - - ">="
         | 
| 222 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 223 | 
            -
                    version: 1.0.1
         | 
| 224 | 
            -
                - - "<"
         | 
| 225 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 226 | 
            -
                    version: 2.0.0
         | 
| 12 | 
            +
            dependencies: []
         | 
| 227 13 | 
             
            description: "    [4.2, 42, 42.0, 420].grep(Eqq.AND(Integer, 20..50)) #=> [42]\n"
         | 
| 228 14 | 
             
            email:
         | 
| 229 15 | 
             
            - kachick1+ruby@gmail.com
         | 
| @@ -234,7 +20,9 @@ files: | |
| 234 20 | 
             
            - MIT-LICENSE.txt
         | 
| 235 21 | 
             
            - README.md
         | 
| 236 22 | 
             
            - lib/eqq.rb
         | 
| 23 | 
            +
            - lib/eqq/buildable.rb
         | 
| 237 24 | 
             
            - lib/eqq/version.rb
         | 
| 25 | 
            +
            - sig/eqq.rbs
         | 
| 238 26 | 
             
            homepage: https://github.com/kachick/eqq
         | 
| 239 27 | 
             
            licenses:
         | 
| 240 28 | 
             
            - MIT
         | 
| @@ -251,7 +39,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 251 39 | 
             
              requirements:
         | 
| 252 40 | 
             
              - - ">="
         | 
| 253 41 | 
             
                - !ruby/object:Gem::Version
         | 
| 254 | 
            -
                  version: 2. | 
| 42 | 
            +
                  version: 2.6.0
         | 
| 255 43 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 256 44 | 
             
              requirements:
         | 
| 257 45 | 
             
              - - ">="
         |