qrb 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +30 -1
- data/lib/qrb.rb +6 -0
- data/lib/qrb/data_type.rb +7 -1
- data/lib/qrb/support/dress_helper.rb +1 -1
- data/lib/qrb/support/type_factory.rb +6 -0
- data/lib/qrb/syntax.rb +7 -0
- data/lib/qrb/syntax/ad_type.rb +7 -0
- data/lib/qrb/syntax/any_type.rb +16 -0
- data/lib/qrb/syntax/attribute.rb +4 -0
- data/lib/qrb/syntax/builtin_type.rb +4 -0
- data/lib/qrb/syntax/constraint_def.rb +6 -0
- data/lib/qrb/syntax/constraints.rb +4 -0
- data/lib/qrb/syntax/contract.rb +21 -9
- data/lib/qrb/syntax/definitions.rb +4 -0
- data/lib/qrb/syntax/external_pair.rb +17 -0
- data/lib/qrb/syntax/heading.rb +4 -0
- data/lib/qrb/syntax/inline_pair.rb +16 -0
- data/lib/qrb/syntax/lambda_expr.rb +4 -0
- data/lib/qrb/syntax/named_constraint.rb +6 -0
- data/lib/qrb/syntax/q.citrus +29 -4
- data/lib/qrb/syntax/q.sexp +114 -0
- data/lib/qrb/syntax/relation_type.rb +4 -0
- data/lib/qrb/syntax/seq_type.rb +4 -0
- data/lib/qrb/syntax/set_type.rb +4 -0
- data/lib/qrb/syntax/sub_type.rb +4 -0
- data/lib/qrb/syntax/system.rb +6 -0
- data/lib/qrb/syntax/tuple_type.rb +4 -0
- data/lib/qrb/syntax/type_def.rb +4 -0
- data/lib/qrb/syntax/type_ref.rb +4 -0
- data/lib/qrb/syntax/union_type.rb +4 -0
- data/lib/qrb/syntax/unnamed_constraint.rb +6 -0
- data/lib/qrb/type.rb +1 -0
- data/lib/qrb/type/ad_type.rb +8 -7
- data/lib/qrb/type/any_type.rb +47 -0
- data/lib/qrb/version.rb +1 -1
- data/spec/spec_helper.rb +11 -0
- data/spec/unit/qrb/test_ast.rb +43 -0
- data/spec/unit/syntax/nodes/test_ad_type.rb +72 -0
- data/spec/unit/syntax/nodes/test_any_type.rb +30 -0
- data/spec/unit/syntax/nodes/test_attribute.rb +23 -10
- data/spec/unit/syntax/nodes/test_builtin_type.rb +25 -13
- data/spec/unit/syntax/nodes/test_constraint_def.rb +14 -0
- data/spec/unit/syntax/nodes/test_constraints.rb +35 -0
- data/spec/unit/syntax/nodes/test_contract.rb +76 -4
- data/spec/unit/syntax/nodes/test_heading.rb +37 -20
- data/spec/unit/syntax/nodes/test_named_constraint.rb +12 -0
- data/spec/unit/syntax/nodes/test_relation_type.rb +38 -20
- data/spec/unit/syntax/nodes/test_seq_type.rb +23 -9
- data/spec/unit/syntax/nodes/test_set_type.rb +23 -9
- data/spec/unit/syntax/nodes/test_sub_type.rb +29 -0
- data/spec/unit/syntax/nodes/test_system.rb +48 -0
- data/spec/unit/syntax/nodes/test_tuple_type.rb +38 -20
- data/spec/unit/syntax/nodes/test_type_def.rb +33 -0
- data/spec/unit/syntax/nodes/test_type_ref.rb +37 -0
- data/spec/unit/syntax/nodes/test_union_type.rb +23 -8
- data/spec/unit/syntax/nodes/test_unnamed_constraint.rb +12 -0
- data/spec/unit/type/ad_type/test_default_name.rb +2 -2
- data/spec/unit/type/ad_type/test_dress.rb +3 -3
- data/spec/unit/type/ad_type/test_initialize.rb +2 -2
- data/spec/unit/type/any_type/test_default_name.rb +12 -0
- data/spec/unit/type/any_type/test_dress.rb +22 -0
- data/spec/unit/type/any_type/test_equality.rb +26 -0
- data/spec/unit/type/any_type/test_include.rb +22 -0
- data/spec/unit/type/any_type/test_initialize.rb +10 -0
- data/spec/unit/type/any_type/test_name.rb +24 -0
- data/spec/unit/type_factory/dsl/test_adt.rb +2 -2
- data/spec/unit/type_factory/dsl/test_any.rb +28 -0
- metadata +33 -4
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Qrb
|
3
|
+
describe AnyType, "dress" do
|
4
|
+
|
5
|
+
let(:type){ AnyType.new }
|
6
|
+
|
7
|
+
subject{ type.dress(arg) }
|
8
|
+
|
9
|
+
context 'with nil' do
|
10
|
+
let(:arg){ nil }
|
11
|
+
|
12
|
+
it{ should be(arg) }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'with a Float' do
|
16
|
+
let(:arg){ 12.0 }
|
17
|
+
|
18
|
+
it{ should be(arg) }
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Qrb
|
3
|
+
describe AnyType, "equality" do
|
4
|
+
|
5
|
+
let(:anyType) { AnyType.new }
|
6
|
+
let(:anyType2){ AnyType.new("foo") }
|
7
|
+
let(:fltType) { BuiltinType.new(Float) }
|
8
|
+
|
9
|
+
it 'should apply structural equality' do
|
10
|
+
(anyType == anyType2).should be_true
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should apply distinguish different types' do
|
14
|
+
(anyType == fltType).should be_false
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should be a total function, with nil for non types' do
|
18
|
+
(anyType == 12).should be_false
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should implement hash accordingly' do
|
22
|
+
(anyType.hash == anyType2.hash).should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Qrb
|
3
|
+
describe AnyType, "include?" do
|
4
|
+
|
5
|
+
let(:type){ AnyType.new }
|
6
|
+
|
7
|
+
subject{ type.include?(arg) }
|
8
|
+
|
9
|
+
context 'with nil' do
|
10
|
+
let(:arg){ nil }
|
11
|
+
|
12
|
+
it{ should be_true }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when an Integer' do
|
16
|
+
let(:arg){ 12 }
|
17
|
+
|
18
|
+
it{ should be_true }
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Qrb
|
3
|
+
describe AnyType, "name" do
|
4
|
+
|
5
|
+
subject{ type.name }
|
6
|
+
|
7
|
+
context 'when not provided' do
|
8
|
+
let(:type){ AnyType.new }
|
9
|
+
|
10
|
+
it 'uses the default name' do
|
11
|
+
subject.should eq("Any")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when provided' do
|
16
|
+
let(:type){ AnyType.new("foo") }
|
17
|
+
|
18
|
+
it 'uses the specified name' do
|
19
|
+
subject.should eq("foo")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -5,8 +5,8 @@ module Qrb
|
|
5
5
|
let(:factory){ TypeFactory.new }
|
6
6
|
|
7
7
|
let(:contracts){
|
8
|
-
{ rgb: [intType, Color.method(:rgb) ],
|
9
|
-
hex: [floatType, Color.method(:hex) ]}
|
8
|
+
{ rgb: [intType, Color.method(:rgb), Qrb::IDENTITY ],
|
9
|
+
hex: [floatType, Color.method(:hex), Qrb::IDENTITY ]}
|
10
10
|
}
|
11
11
|
|
12
12
|
shared_examples_for "The <Color> type" do
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Qrb
|
3
|
+
describe TypeFactory, "DSL#any" do
|
4
|
+
|
5
|
+
let(:factory){ TypeFactory.new }
|
6
|
+
|
7
|
+
context 'without a name' do
|
8
|
+
subject do
|
9
|
+
factory.any
|
10
|
+
end
|
11
|
+
|
12
|
+
it{ should be_a(AnyType) }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'with a name' do
|
16
|
+
subject do
|
17
|
+
factory.any("foo")
|
18
|
+
end
|
19
|
+
|
20
|
+
it{ should be_a(AnyType) }
|
21
|
+
|
22
|
+
it 'should have the name' do
|
23
|
+
subject.name.should eq('foo')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-03-
|
12
|
+
date: 2014-03-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: citrus
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- lib/qrb/support/type_factory.rb
|
51
51
|
- lib/qrb/support.rb
|
52
52
|
- lib/qrb/syntax/ad_type.rb
|
53
|
+
- lib/qrb/syntax/any_type.rb
|
53
54
|
- lib/qrb/syntax/attribute.rb
|
54
55
|
- lib/qrb/syntax/builtin_type.rb
|
55
56
|
- lib/qrb/syntax/constraint_def.rb
|
@@ -57,10 +58,13 @@ files:
|
|
57
58
|
- lib/qrb/syntax/contract.rb
|
58
59
|
- lib/qrb/syntax/definitions.rb
|
59
60
|
- lib/qrb/syntax/expression.rb
|
61
|
+
- lib/qrb/syntax/external_pair.rb
|
60
62
|
- lib/qrb/syntax/heading.rb
|
63
|
+
- lib/qrb/syntax/inline_pair.rb
|
61
64
|
- lib/qrb/syntax/lambda_expr.rb
|
62
65
|
- lib/qrb/syntax/named_constraint.rb
|
63
66
|
- lib/qrb/syntax/q.citrus
|
67
|
+
- lib/qrb/syntax/q.sexp
|
64
68
|
- lib/qrb/syntax/relation_type.rb
|
65
69
|
- lib/qrb/syntax/seq_type.rb
|
66
70
|
- lib/qrb/syntax/set_type.rb
|
@@ -75,6 +79,7 @@ files:
|
|
75
79
|
- lib/qrb/syntax.rb
|
76
80
|
- lib/qrb/system.rb
|
77
81
|
- lib/qrb/type/ad_type.rb
|
82
|
+
- lib/qrb/type/any_type.rb
|
78
83
|
- lib/qrb/type/builtin_type.rb
|
79
84
|
- lib/qrb/type/relation_type.rb
|
80
85
|
- lib/qrb/type/seq_type.rb
|
@@ -104,8 +109,10 @@ files:
|
|
104
109
|
- spec/unit/heading/test_initialize.rb
|
105
110
|
- spec/unit/heading/test_size.rb
|
106
111
|
- spec/unit/heading/test_to_name.rb
|
112
|
+
- spec/unit/qrb/test_ast.rb
|
107
113
|
- spec/unit/qrb/test_parse.rb
|
108
114
|
- spec/unit/syntax/nodes/test_ad_type.rb
|
115
|
+
- spec/unit/syntax/nodes/test_any_type.rb
|
109
116
|
- spec/unit/syntax/nodes/test_attribute.rb
|
110
117
|
- spec/unit/syntax/nodes/test_builtin_type.rb
|
111
118
|
- spec/unit/syntax/nodes/test_comment.rb
|
@@ -120,7 +127,10 @@ files:
|
|
120
127
|
- spec/unit/syntax/nodes/test_set_type.rb
|
121
128
|
- spec/unit/syntax/nodes/test_spacing.rb
|
122
129
|
- spec/unit/syntax/nodes/test_sub_type.rb
|
130
|
+
- spec/unit/syntax/nodes/test_system.rb
|
123
131
|
- spec/unit/syntax/nodes/test_tuple_type.rb
|
132
|
+
- spec/unit/syntax/nodes/test_type_def.rb
|
133
|
+
- spec/unit/syntax/nodes/test_type_ref.rb
|
124
134
|
- spec/unit/syntax/nodes/test_union_type.rb
|
125
135
|
- spec/unit/syntax/nodes/test_unnamed_constraint.rb
|
126
136
|
- spec/unit/syntax/test_compile_type.rb
|
@@ -136,6 +146,12 @@ files:
|
|
136
146
|
- spec/unit/type/ad_type/test_include.rb
|
137
147
|
- spec/unit/type/ad_type/test_initialize.rb
|
138
148
|
- spec/unit/type/ad_type/test_name.rb
|
149
|
+
- spec/unit/type/any_type/test_default_name.rb
|
150
|
+
- spec/unit/type/any_type/test_dress.rb
|
151
|
+
- spec/unit/type/any_type/test_equality.rb
|
152
|
+
- spec/unit/type/any_type/test_include.rb
|
153
|
+
- spec/unit/type/any_type/test_initialize.rb
|
154
|
+
- spec/unit/type/any_type/test_name.rb
|
139
155
|
- spec/unit/type/builtin_type/test_default_name.rb
|
140
156
|
- spec/unit/type/builtin_type/test_dress.rb
|
141
157
|
- spec/unit/type/builtin_type/test_equality.rb
|
@@ -179,6 +195,7 @@ files:
|
|
179
195
|
- spec/unit/type/union_type/test_initialize.rb
|
180
196
|
- spec/unit/type/union_type/test_name.rb
|
181
197
|
- spec/unit/type_factory/dsl/test_adt.rb
|
198
|
+
- spec/unit/type_factory/dsl/test_any.rb
|
182
199
|
- spec/unit/type_factory/dsl/test_attribute.rb
|
183
200
|
- spec/unit/type_factory/dsl/test_attributes.rb
|
184
201
|
- spec/unit/type_factory/dsl/test_builtin.rb
|
@@ -209,7 +226,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
226
|
version: '0'
|
210
227
|
segments:
|
211
228
|
- 0
|
212
|
-
hash:
|
229
|
+
hash: -992957242747860523
|
213
230
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
214
231
|
none: false
|
215
232
|
requirements:
|
@@ -218,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
235
|
version: '0'
|
219
236
|
segments:
|
220
237
|
- 0
|
221
|
-
hash:
|
238
|
+
hash: -992957242747860523
|
222
239
|
requirements: []
|
223
240
|
rubyforge_project:
|
224
241
|
rubygems_version: 1.8.25
|
@@ -240,8 +257,10 @@ test_files:
|
|
240
257
|
- spec/unit/heading/test_initialize.rb
|
241
258
|
- spec/unit/heading/test_size.rb
|
242
259
|
- spec/unit/heading/test_to_name.rb
|
260
|
+
- spec/unit/qrb/test_ast.rb
|
243
261
|
- spec/unit/qrb/test_parse.rb
|
244
262
|
- spec/unit/syntax/nodes/test_ad_type.rb
|
263
|
+
- spec/unit/syntax/nodes/test_any_type.rb
|
245
264
|
- spec/unit/syntax/nodes/test_attribute.rb
|
246
265
|
- spec/unit/syntax/nodes/test_builtin_type.rb
|
247
266
|
- spec/unit/syntax/nodes/test_comment.rb
|
@@ -256,7 +275,10 @@ test_files:
|
|
256
275
|
- spec/unit/syntax/nodes/test_set_type.rb
|
257
276
|
- spec/unit/syntax/nodes/test_spacing.rb
|
258
277
|
- spec/unit/syntax/nodes/test_sub_type.rb
|
278
|
+
- spec/unit/syntax/nodes/test_system.rb
|
259
279
|
- spec/unit/syntax/nodes/test_tuple_type.rb
|
280
|
+
- spec/unit/syntax/nodes/test_type_def.rb
|
281
|
+
- spec/unit/syntax/nodes/test_type_ref.rb
|
260
282
|
- spec/unit/syntax/nodes/test_union_type.rb
|
261
283
|
- spec/unit/syntax/nodes/test_unnamed_constraint.rb
|
262
284
|
- spec/unit/syntax/test_compile_type.rb
|
@@ -272,6 +294,12 @@ test_files:
|
|
272
294
|
- spec/unit/type/ad_type/test_include.rb
|
273
295
|
- spec/unit/type/ad_type/test_initialize.rb
|
274
296
|
- spec/unit/type/ad_type/test_name.rb
|
297
|
+
- spec/unit/type/any_type/test_default_name.rb
|
298
|
+
- spec/unit/type/any_type/test_dress.rb
|
299
|
+
- spec/unit/type/any_type/test_equality.rb
|
300
|
+
- spec/unit/type/any_type/test_include.rb
|
301
|
+
- spec/unit/type/any_type/test_initialize.rb
|
302
|
+
- spec/unit/type/any_type/test_name.rb
|
275
303
|
- spec/unit/type/builtin_type/test_default_name.rb
|
276
304
|
- spec/unit/type/builtin_type/test_dress.rb
|
277
305
|
- spec/unit/type/builtin_type/test_equality.rb
|
@@ -315,6 +343,7 @@ test_files:
|
|
315
343
|
- spec/unit/type/union_type/test_initialize.rb
|
316
344
|
- spec/unit/type/union_type/test_name.rb
|
317
345
|
- spec/unit/type_factory/dsl/test_adt.rb
|
346
|
+
- spec/unit/type_factory/dsl/test_any.rb
|
318
347
|
- spec/unit/type_factory/dsl/test_attribute.rb
|
319
348
|
- spec/unit/type_factory/dsl/test_attributes.rb
|
320
349
|
- spec/unit/type_factory/dsl/test_builtin.rb
|