typ 0.1.0 → 0.1.1
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/lib/typ.rb +55 -18
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3292265f2d79043b1324f8221a43926863cb039233c48d5d989109fd712a9141
|
4
|
+
data.tar.gz: d81287849ec606b02f4710dcc9d86c822ad5f162fda839c23c5a84225fa91718
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f6fa03315316cf839a3560dfb10197879d673a88c42823ed55a8e4daecd3c66f09a3393fc33b9b240ef9fb9a142a617a46bf03d62ead3dc5b6de662d1b53495
|
7
|
+
data.tar.gz: eba82e7d4741e2f1b489f383b4ea0423b24348a218a1e858291e7855e472b3c07c9440bd84769bd63ff8e74f88a113ebbee19ce3ebee8eddbcbf65bddfede41f
|
data/lib/typ.rb
CHANGED
@@ -1,4 +1,35 @@
|
|
1
1
|
module Typ
|
2
|
+
module ArrayPredicate
|
3
|
+
refine Array do
|
4
|
+
def predicate?
|
5
|
+
(size == 2) &&
|
6
|
+
(self[0].is_a?(Symbol) || self[1].is_a?(Symbol))
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module ArrayToTest
|
12
|
+
refine Object do
|
13
|
+
def bad_assertion it, name
|
14
|
+
fail Typ::Error::BadAssertion.new(it, name)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
refine Array do
|
19
|
+
def to_test
|
20
|
+
type = self
|
21
|
+
|
22
|
+
if type[0].is_a? Symbol
|
23
|
+
method, argument = type
|
24
|
+
-> it { it.send method, argument or bad_assertion(it, type) }
|
25
|
+
else
|
26
|
+
receiver, method = type
|
27
|
+
-> it { receiver.send method, it or bad_assertion(it, type) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
2
33
|
module Gate
|
3
34
|
module DSLReaders
|
4
35
|
def dsl_method
|
@@ -8,6 +39,10 @@ module Typ
|
|
8
39
|
def dsl_literal
|
9
40
|
self.class.dsl_literal
|
10
41
|
end
|
42
|
+
|
43
|
+
def dsl_key
|
44
|
+
self.class.dsl_key
|
45
|
+
end
|
11
46
|
end
|
12
47
|
|
13
48
|
module New
|
@@ -21,7 +56,7 @@ module Typ
|
|
21
56
|
end
|
22
57
|
|
23
58
|
module Singleton
|
24
|
-
attr_accessor :dsl_method, :dsl_literal
|
59
|
+
attr_accessor :dsl_method, :dsl_literal, :dsl_key
|
25
60
|
end
|
26
61
|
|
27
62
|
extend New
|
@@ -47,6 +82,9 @@ module Typ
|
|
47
82
|
end
|
48
83
|
end
|
49
84
|
|
85
|
+
using ArrayPredicate
|
86
|
+
using ArrayToTest
|
87
|
+
|
50
88
|
def self.included mod
|
51
89
|
mod.extend DSL
|
52
90
|
mod.extend Singleton
|
@@ -82,18 +120,7 @@ module Typ
|
|
82
120
|
when Symbol
|
83
121
|
-> it { it.send type or bad_assertion(it, type) }
|
84
122
|
when Array
|
85
|
-
|
86
|
-
unless type[0].is_a?(Symbol) || type[1].is_a?(Symbol)
|
87
|
-
cannot_create_gate type
|
88
|
-
end
|
89
|
-
|
90
|
-
if type[0].is_a? Symbol
|
91
|
-
method, argument = type
|
92
|
-
-> it { it.send method, argument or bad_assertion(it, type) }
|
93
|
-
else
|
94
|
-
receiver, method = type
|
95
|
-
-> it { receiver.send method, it or bad_assertion(it, type) }
|
96
|
-
end
|
123
|
+
type.predicate? ? type.to_test : (cannot_create_gate type)
|
97
124
|
when Class
|
98
125
|
type if type.include? Typ
|
99
126
|
end
|
@@ -102,10 +129,6 @@ module Typ
|
|
102
129
|
def cannot_create_gate type
|
103
130
|
fail Typ::Error::CannotCreateGate.new(type)
|
104
131
|
end
|
105
|
-
|
106
|
-
def bad_assertion it, name
|
107
|
-
fail Typ::Error::BadAssertion.new(it, name)
|
108
|
-
end
|
109
132
|
end
|
110
133
|
|
111
134
|
def initialize method, literal, **kwargs
|
@@ -127,6 +150,7 @@ module Typ
|
|
127
150
|
augment_gate_with_check @test
|
128
151
|
gate.dsl_method = @method
|
129
152
|
gate.dsl_literal = @literal
|
153
|
+
gate.dsl_key = @kwargs[:name]
|
130
154
|
end
|
131
155
|
end
|
132
156
|
|
@@ -156,6 +180,19 @@ module Typ
|
|
156
180
|
@test = fetch_check >> type_check
|
157
181
|
enrich_gate
|
158
182
|
end
|
183
|
+
|
184
|
+
def test_for literal
|
185
|
+
case literal
|
186
|
+
when Symbol
|
187
|
+
literal.end_with?(??) ? super : (super [:eql?, literal])
|
188
|
+
when Array
|
189
|
+
literal.predicate? ? literal.to_test : (super [:eql?, literal])
|
190
|
+
when Class
|
191
|
+
literal.include?(Typ) ? super : (super [:eql?, literal])
|
192
|
+
else
|
193
|
+
super [:eql?, literal]
|
194
|
+
end
|
195
|
+
end
|
159
196
|
end
|
160
197
|
|
161
198
|
class Is < Gate
|
@@ -204,7 +241,7 @@ module Typ
|
|
204
241
|
|
205
242
|
class BadAssertion < self
|
206
243
|
def initialize it, method_name
|
207
|
-
message = "#{it} is #{method_name}"
|
244
|
+
message = "#{it.inspect} is #{method_name}"
|
208
245
|
super message
|
209
246
|
end
|
210
247
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typ
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anatoly Chernov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|