rdl 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +7 -6
- data/CHANGES.md +29 -0
- data/README.md +94 -26
- data/lib/rdl/boot.rb +82 -41
- data/lib/rdl/boot_rails.rb +5 -0
- data/lib/rdl/config.rb +9 -1
- data/lib/rdl/query.rb +2 -2
- data/lib/rdl/typecheck.rb +972 -225
- data/lib/rdl/types/annotated_arg.rb +8 -0
- data/lib/rdl/types/ast_node.rb +73 -0
- data/lib/rdl/types/bot.rb +8 -0
- data/lib/rdl/types/bound_arg.rb +63 -0
- data/lib/rdl/types/computed.rb +48 -0
- data/lib/rdl/types/dependent_arg.rb +9 -0
- data/lib/rdl/types/dynamic.rb +61 -0
- data/lib/rdl/types/finite_hash.rb +54 -9
- data/lib/rdl/types/generic.rb +33 -0
- data/lib/rdl/types/intersection.rb +8 -0
- data/lib/rdl/types/lexer.rex +6 -1
- data/lib/rdl/types/lexer.rex.rb +13 -1
- data/lib/rdl/types/method.rb +14 -0
- data/lib/rdl/types/nominal.rb +8 -0
- data/lib/rdl/types/non_null.rb +8 -0
- data/lib/rdl/types/optional.rb +8 -0
- data/lib/rdl/types/parser.racc +31 -5
- data/lib/rdl/types/parser.tab.rb +540 -302
- data/lib/rdl/types/rdl_types.rb +45 -0
- data/lib/rdl/types/singleton.rb +14 -1
- data/lib/rdl/types/string.rb +104 -0
- data/lib/rdl/types/structural.rb +8 -0
- data/lib/rdl/types/top.rb +8 -0
- data/lib/rdl/types/tuple.rb +32 -8
- data/lib/rdl/types/type.rb +54 -11
- data/lib/rdl/types/union.rb +41 -2
- data/lib/rdl/types/var.rb +10 -0
- data/lib/rdl/types/vararg.rb +8 -0
- data/lib/rdl/util.rb +13 -10
- data/lib/rdl/wrap.rb +271 -27
- data/lib/rdl_disable.rb +16 -2
- data/lib/types/active_record.rb +1 -0
- data/lib/types/core/array.rb +442 -23
- data/lib/types/core/basic_object.rb +3 -3
- data/lib/types/core/bigdecimal.rb +5 -0
- data/lib/types/core/class.rb +2 -0
- data/lib/types/core/dir.rb +3 -3
- data/lib/types/core/enumerable.rb +4 -4
- data/lib/types/core/enumerator.rb +1 -1
- data/lib/types/core/file.rb +4 -4
- data/lib/types/core/float.rb +203 -0
- data/lib/types/core/hash.rb +390 -15
- data/lib/types/core/integer.rb +223 -10
- data/lib/types/core/io.rb +2 -2
- data/lib/types/core/kernel.rb +8 -5
- data/lib/types/core/marshal.rb +3 -0
- data/lib/types/core/module.rb +3 -3
- data/lib/types/core/numeric.rb +0 -2
- data/lib/types/core/object.rb +5 -5
- data/lib/types/core/pathname.rb +2 -2
- data/lib/types/core/process.rb +1 -3
- data/lib/types/core/range.rb +1 -1
- data/lib/types/core/regexp.rb +2 -2
- data/lib/types/core/set.rb +1 -1
- data/lib/types/core/string.rb +408 -16
- data/lib/types/core/symbol.rb +3 -3
- data/lib/types/core/time.rb +1 -1
- data/lib/types/core/uri.rb +13 -13
- data/lib/types/rails/_helpers.rb +7 -1
- data/lib/types/rails/action_controller/mime_responds.rb +2 -0
- data/lib/types/rails/active_record/associations.rb +42 -30
- data/lib/types/rails/active_record/comp_types.rb +637 -0
- data/lib/types/rails/active_record/finder_methods.rb +1 -1
- data/lib/types/rails/active_record/model_schema.rb +28 -16
- data/lib/types/rails/active_record/relation.rb +5 -3
- data/lib/types/rails/active_record/sql-strings.rb +166 -0
- data/lib/types/rails/string.rb +1 -1
- data/lib/types/sequel.rb +1 -0
- data/lib/types/sequel/comp_types.rb +581 -0
- data/rdl.gemspec +5 -4
- data/test/test_alias.rb +4 -0
- data/test/test_array_types.rb +244 -0
- data/test/test_bound_types.rb +80 -0
- data/test/test_contract.rb +4 -0
- data/test/test_dsl.rb +5 -0
- data/test/test_dyn_comptype_checks.rb +206 -0
- data/test/test_generic.rb +21 -20
- data/test/test_hash_types.rb +322 -0
- data/test/test_intersection.rb +1 -0
- data/test/test_le.rb +29 -4
- data/test/test_member.rb +3 -1
- data/test/test_parser.rb +5 -0
- data/test/test_query.rb +1 -0
- data/test/test_rdl.rb +63 -28
- data/test/test_rdl_type.rb +4 -0
- data/test/test_string_types.rb +102 -0
- data/test/test_type_contract.rb +59 -37
- data/test/test_typecheck.rb +480 -75
- data/test/test_types.rb +17 -0
- data/test/test_wrap.rb +5 -0
- metadata +35 -5
- data/lib/types/rails/active_record/schema_types.rb +0 -51
data/test/test_types.rb
CHANGED
@@ -9,6 +9,10 @@ class TestTypes < Minitest::Test
|
|
9
9
|
class B; end
|
10
10
|
class C; end
|
11
11
|
|
12
|
+
def setup
|
13
|
+
RDL.reset
|
14
|
+
end
|
15
|
+
|
12
16
|
def test_nil_top
|
13
17
|
tnil = NominalType.new :NilClass
|
14
18
|
assert_equal RDL::Globals.types[:nil], tnil
|
@@ -20,6 +24,14 @@ class TestTypes < Minitest::Test
|
|
20
24
|
assert (RDL::Globals.types[:nil] != ttop)
|
21
25
|
end
|
22
26
|
|
27
|
+
def test_dyn
|
28
|
+
tdyn = DynamicType.new
|
29
|
+
tdyn2 = DynamicType.new
|
30
|
+
assert_equal tdyn, tdyn2
|
31
|
+
assert_equal RDL::Globals.types[:dyn], tdyn
|
32
|
+
assert (RDL::Globals.types[:nil] != tdyn)
|
33
|
+
end
|
34
|
+
|
23
35
|
def test_nominal
|
24
36
|
ta = NominalType.new :A
|
25
37
|
ta2 = NominalType.new :A
|
@@ -220,4 +232,9 @@ class TestTypes < Minitest::Test
|
|
220
232
|
assert_equal tmethbssfn, tmethbaabn.instantiate(inst)
|
221
233
|
assert_equal tstructinst, tstructorig.instantiate(inst)
|
222
234
|
end
|
235
|
+
|
236
|
+
def test_canonical
|
237
|
+
t = RDL::Globals.parser.scan_str '#T Array<Integer or Integer>'
|
238
|
+
assert_equal 'Array<Integer>', t.canonical.to_s
|
239
|
+
end
|
223
240
|
end
|
data/test/test_wrap.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeffrey S. Foster
|
@@ -9,10 +9,11 @@ authors:
|
|
9
9
|
- T. Stephen Strickland
|
10
10
|
- Alexander T. Yu
|
11
11
|
- Milod Kazerounian
|
12
|
+
- Sankha Narayan Guria
|
12
13
|
autorequire:
|
13
14
|
bindir: bin
|
14
15
|
cert_chain: []
|
15
|
-
date:
|
16
|
+
date: 2019-06-09 00:00:00.000000000 Z
|
16
17
|
dependencies:
|
17
18
|
- !ruby/object:Gem::Dependency
|
18
19
|
name: parser
|
@@ -34,6 +35,20 @@ dependencies:
|
|
34
35
|
- - ">="
|
35
36
|
- !ruby/object:Gem::Version
|
36
37
|
version: 2.3.1.4
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: sql-parser
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - "~>"
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 0.0.2
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - "~>"
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: 0.0.2
|
37
52
|
description: |
|
38
53
|
RDL is a gem that adds types and contracts to Ruby. RDL includes extensive
|
39
54
|
support for specifying method types, which can either be enforced as
|
@@ -68,9 +83,13 @@ files:
|
|
68
83
|
- lib/rdl/switch.rb
|
69
84
|
- lib/rdl/typecheck.rb
|
70
85
|
- lib/rdl/types/annotated_arg.rb
|
86
|
+
- lib/rdl/types/ast_node.rb
|
71
87
|
- lib/rdl/types/bot.rb
|
88
|
+
- lib/rdl/types/bound_arg.rb
|
89
|
+
- lib/rdl/types/computed.rb
|
72
90
|
- lib/rdl/types/dependent_arg.rb
|
73
91
|
- lib/rdl/types/dots_query.rb
|
92
|
+
- lib/rdl/types/dynamic.rb
|
74
93
|
- lib/rdl/types/finite_hash.rb
|
75
94
|
- lib/rdl/types/generic.rb
|
76
95
|
- lib/rdl/types/intersection.rb
|
@@ -82,7 +101,9 @@ files:
|
|
82
101
|
- lib/rdl/types/optional.rb
|
83
102
|
- lib/rdl/types/parser.racc
|
84
103
|
- lib/rdl/types/parser.tab.rb
|
104
|
+
- lib/rdl/types/rdl_types.rb
|
85
105
|
- lib/rdl/types/singleton.rb
|
106
|
+
- lib/rdl/types/string.rb
|
86
107
|
- lib/rdl/types/structural.rb
|
87
108
|
- lib/rdl/types/top.rb
|
88
109
|
- lib/rdl/types/tuple.rb
|
@@ -96,6 +117,7 @@ files:
|
|
96
117
|
- lib/rdl/util.rb
|
97
118
|
- lib/rdl/wrap.rb
|
98
119
|
- lib/rdl_disable.rb
|
120
|
+
- lib/types/active_record.rb
|
99
121
|
- lib/types/core.rb
|
100
122
|
- lib/types/core/_aliases.rb
|
101
123
|
- lib/types/core/abbrev.rb
|
@@ -168,11 +190,12 @@ files:
|
|
168
190
|
- lib/types/rails/active_model/validations.rb
|
169
191
|
- lib/types/rails/active_record/associations.rb
|
170
192
|
- lib/types/rails/active_record/base.rb
|
193
|
+
- lib/types/rails/active_record/comp_types.rb
|
171
194
|
- lib/types/rails/active_record/core.rb
|
172
195
|
- lib/types/rails/active_record/finder_methods.rb
|
173
196
|
- lib/types/rails/active_record/model_schema.rb
|
174
197
|
- lib/types/rails/active_record/relation.rb
|
175
|
-
- lib/types/rails/active_record/
|
198
|
+
- lib/types/rails/active_record/sql-strings.rb
|
176
199
|
- lib/types/rails/active_record/validations.rb
|
177
200
|
- lib/types/rails/active_support/base.rb
|
178
201
|
- lib/types/rails/active_support/logger.rb
|
@@ -184,13 +207,19 @@ files:
|
|
184
207
|
- lib/types/rails/rack/request.rb
|
185
208
|
- lib/types/rails/string.rb
|
186
209
|
- lib/types/rails/time.rb
|
210
|
+
- lib/types/sequel.rb
|
211
|
+
- lib/types/sequel/comp_types.rb
|
187
212
|
- rdl.gemspec
|
188
213
|
- test/disabled_test_coverage.rb
|
189
214
|
- test/disabled_test_rdoc.rb
|
190
215
|
- test/test_alias.rb
|
216
|
+
- test/test_array_types.rb
|
217
|
+
- test/test_bound_types.rb
|
191
218
|
- test/test_contract.rb
|
192
219
|
- test/test_dsl.rb
|
220
|
+
- test/test_dyn_comptype_checks.rb
|
193
221
|
- test/test_generic.rb
|
222
|
+
- test/test_hash_types.rb
|
194
223
|
- test/test_intersection.rb
|
195
224
|
- test/test_le.rb
|
196
225
|
- test/test_lib_types.rb
|
@@ -199,11 +228,12 @@ files:
|
|
199
228
|
- test/test_query.rb
|
200
229
|
- test/test_rdl.rb
|
201
230
|
- test/test_rdl_type.rb
|
231
|
+
- test/test_string_types.rb
|
202
232
|
- test/test_type_contract.rb
|
203
233
|
- test/test_typecheck.rb
|
204
234
|
- test/test_types.rb
|
205
235
|
- test/test_wrap.rb
|
206
|
-
homepage: https://github.com/
|
236
|
+
homepage: https://github.com/tupl-tufts/rdl
|
207
237
|
licenses:
|
208
238
|
- BSD-3-Clause
|
209
239
|
metadata: {}
|
@@ -223,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
253
|
version: '0'
|
224
254
|
requirements: []
|
225
255
|
rubyforge_project:
|
226
|
-
rubygems_version: 2.
|
256
|
+
rubygems_version: 2.7.8
|
227
257
|
signing_key:
|
228
258
|
specification_version: 4
|
229
259
|
summary: Ruby type and contract system
|
@@ -1,51 +0,0 @@
|
|
1
|
-
class ActiveRecord::Base
|
2
|
-
extend RDL::RDLAnnotate
|
3
|
-
|
4
|
-
def self.add_schema_types
|
5
|
-
end
|
6
|
-
|
7
|
-
rdl_post('self.add_schema_types') { |ret| # load_schema! doesn't return anything interesting
|
8
|
-
type 'self.where', "(*%any) -> ActiveRecord::Relation<#{self}>"
|
9
|
-
|
10
|
-
columns_hash.each { |name, col|
|
11
|
-
t = RDL::Rails.column_to_rdl(col.type)
|
12
|
-
if col.null
|
13
|
-
# may be null; show nullability in return type
|
14
|
-
rdl_type name, "() -> #{t} or nil" # getter
|
15
|
-
rdl_type "#{name}_id", "() -> #{t} or nil" # getter
|
16
|
-
rdl_type "#{name}=", "(#{t}) -> #{t} or nil" # setter
|
17
|
-
rdl_type "write_attribute", "(:#{name}, #{t}) -> %bool"
|
18
|
-
rdl_type "update_attribute", "(:#{name}, #{t}) -> %bool"
|
19
|
-
rdl_type "update_column", "(:#{name}, #{t}) -> %bool"
|
20
|
-
else
|
21
|
-
# not null; can't truly check in type system but hint via the name
|
22
|
-
rdl_type name, "() -> !#{t}" # getter
|
23
|
-
rdl_type "#{name}_id", "() -> !#{t}" # getter
|
24
|
-
rdl_type "#{name}=", "(!#{t}) -> !#{t}" # setter
|
25
|
-
rdl_type "write_attribute", "(:#{name}, !#{t}) -> %bool"
|
26
|
-
rdl_type "update_attribute", "(:#{name}, #{t}) -> %bool"
|
27
|
-
rdl_type "update_column", "(:#{name}, #{t}) -> %bool"
|
28
|
-
end
|
29
|
-
}
|
30
|
-
|
31
|
-
attribute_types = RDL::Rails.attribute_types(self)
|
32
|
-
|
33
|
-
rdl_type 'self.find', "(Fixnum) -> #{self}"
|
34
|
-
rdl_type 'self.find', "(String) -> #{self}"
|
35
|
-
rdl_type 'self.find', '({' + attribute_types + "}) -> #{self}"
|
36
|
-
|
37
|
-
=begin
|
38
|
-
type 'self.find_by', '(' + attribute_types + ") -> #{self} or nil"
|
39
|
-
type 'self.find_by!', '(' + attribute_types + ") -> #{self}"
|
40
|
-
type 'update', '(' + attribute_types + ') -> %bool'
|
41
|
-
type 'update_columns', '(' + attribute_types + ') -> %bool'
|
42
|
-
type 'attributes=', '(' + attribute_types + ') -> %bool'
|
43
|
-
|
44
|
-
# If called with String arguments, can't check types as precisely
|
45
|
-
type 'write_attribute', '(String, %any) -> %bool'
|
46
|
-
type 'update_attribute', '(String, %any) -> %bool'
|
47
|
-
type 'update_column', '(String, %any) -> %bool'
|
48
|
-
=end
|
49
|
-
true
|
50
|
-
}
|
51
|
-
end
|