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
|
- - ">="
|