finitio 0.4.1 → 0.5.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.
Files changed (270) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +66 -0
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +34 -30
  5. data/finitio.gemspec +1 -1
  6. data/lib/finitio.rb +7 -39
  7. data/lib/finitio/errors.rb +14 -0
  8. data/lib/finitio/support.rb +4 -1
  9. data/lib/finitio/support/attribute.rb +13 -7
  10. data/lib/finitio/support/compilation.rb +55 -0
  11. data/lib/finitio/support/constraint.rb +46 -0
  12. data/lib/finitio/support/contract.rb +33 -0
  13. data/lib/finitio/support/dress_helper.rb +3 -2
  14. data/lib/finitio/support/heading.rb +57 -17
  15. data/lib/finitio/support/metadata.rb +20 -0
  16. data/lib/finitio/support/type_factory.rb +154 -41
  17. data/lib/finitio/syntax.rb +16 -31
  18. data/lib/finitio/syntax/expr.rb +56 -0
  19. data/lib/finitio/syntax/expr/arith_op.rb +22 -0
  20. data/lib/finitio/syntax/expr/comparison.rb +22 -0
  21. data/lib/finitio/syntax/expr/fn_call.rb +24 -0
  22. data/lib/finitio/syntax/expr/identifier.rb +18 -0
  23. data/lib/finitio/syntax/expr/literal.rb +19 -0
  24. data/lib/finitio/syntax/expr/logic_dyadic.rb +22 -0
  25. data/lib/finitio/syntax/expr/logic_not.rb +21 -0
  26. data/lib/finitio/syntax/expr/oo_call.rb +24 -0
  27. data/lib/finitio/syntax/expr/parenthesized.rb +20 -0
  28. data/lib/finitio/syntax/expr/unary_minus_op.rb +21 -0
  29. data/lib/finitio/syntax/expressions.citrus +129 -0
  30. data/lib/finitio/syntax/finitio.citrus +10 -208
  31. data/lib/finitio/syntax/finitio.sexp +5 -1
  32. data/lib/finitio/syntax/lexer.citrus +91 -0
  33. data/lib/finitio/syntax/literal.rb +16 -0
  34. data/lib/finitio/syntax/literal/boolean.rb +22 -0
  35. data/lib/finitio/syntax/literal/integer.rb +14 -0
  36. data/lib/finitio/syntax/literal/real.rb +14 -0
  37. data/lib/finitio/syntax/literal/string.rb +14 -0
  38. data/lib/finitio/syntax/literals.citrus +44 -0
  39. data/lib/finitio/syntax/node.rb +53 -0
  40. data/lib/finitio/syntax/type.rb +28 -0
  41. data/lib/finitio/syntax/type/ad_type.rb +29 -0
  42. data/lib/finitio/syntax/{any_type.rb → type/any_type.rb} +1 -1
  43. data/lib/finitio/syntax/type/attribute.rb +33 -0
  44. data/lib/finitio/syntax/{builtin_type.rb → type/builtin_type.rb} +3 -1
  45. data/lib/finitio/syntax/{constraint_def.rb → type/constraint_def.rb} +4 -3
  46. data/lib/finitio/syntax/type/constraints.rb +17 -0
  47. data/lib/finitio/syntax/{contract.rb → type/contract.rb} +9 -3
  48. data/lib/finitio/syntax/{definitions.rb → type/definitions.rb} +1 -0
  49. data/lib/finitio/syntax/{expression.rb → type/expression.rb} +2 -1
  50. data/lib/finitio/syntax/{external_pair.rb → type/external_pair.rb} +3 -1
  51. data/lib/finitio/syntax/type/heading.rb +30 -0
  52. data/lib/finitio/syntax/{inline_pair.rb → type/inline_pair.rb} +3 -1
  53. data/lib/finitio/syntax/{lambda_expr.rb → type/lambda_expr.rb} +3 -0
  54. data/lib/finitio/syntax/type/main_type.rb +18 -0
  55. data/lib/finitio/syntax/type/metadata.rb +18 -0
  56. data/lib/finitio/syntax/type/metadata_attr.rb +15 -0
  57. data/lib/finitio/syntax/{named_constraint.rb → type/named_constraint.rb} +10 -3
  58. data/lib/finitio/syntax/type/relation_type.rb +24 -0
  59. data/lib/finitio/syntax/{seq_type.rb → type/seq_type.rb} +3 -0
  60. data/lib/finitio/syntax/{set_type.rb → type/set_type.rb} +3 -0
  61. data/lib/finitio/syntax/type/struct_type.rb +17 -0
  62. data/lib/finitio/syntax/{sub_type.rb → type/sub_type.rb} +3 -0
  63. data/lib/finitio/syntax/{system.rb → type/system.rb} +5 -4
  64. data/lib/finitio/syntax/type/tuple_type.rb +24 -0
  65. data/lib/finitio/syntax/{type_def.rb → type/type_def.rb} +8 -3
  66. data/lib/finitio/syntax/{type_ref.rb → type/type_ref.rb} +4 -1
  67. data/lib/finitio/syntax/{union_type.rb → type/union_type.rb} +1 -0
  68. data/lib/finitio/syntax/{unnamed_constraint.rb → type/unnamed_constraint.rb} +7 -1
  69. data/lib/finitio/syntax/types.citrus +196 -0
  70. data/lib/finitio/system.rb +15 -15
  71. data/lib/finitio/type.rb +38 -6
  72. data/lib/finitio/type/ad_type.rb +41 -18
  73. data/lib/finitio/type/alias_type.rb +37 -0
  74. data/lib/finitio/type/any_type.rb +7 -3
  75. data/lib/finitio/type/builtin_type.rb +5 -4
  76. data/lib/finitio/{support → type}/collection_type.rb +3 -4
  77. data/lib/finitio/type/hash_based_type.rb +91 -0
  78. data/lib/finitio/type/heading_based_type.rb +28 -0
  79. data/lib/finitio/type/multi_relation_type.rb +34 -0
  80. data/lib/finitio/type/multi_tuple_type.rb +29 -0
  81. data/lib/finitio/type/proxy_type.rb +40 -0
  82. data/lib/finitio/type/rel_based_type.rb +42 -0
  83. data/lib/finitio/type/relation_type.rb +6 -47
  84. data/lib/finitio/type/seq_type.rb +4 -0
  85. data/lib/finitio/type/set_type.rb +4 -0
  86. data/lib/finitio/type/struct_type.rb +84 -0
  87. data/lib/finitio/type/sub_type.rb +25 -22
  88. data/lib/finitio/type/tuple_type.rb +6 -57
  89. data/lib/finitio/type/union_type.rb +12 -5
  90. data/lib/finitio/version.rb +2 -2
  91. data/spec/{unit/attribute → attribute}/test_equality.rb +8 -5
  92. data/spec/{unit/attribute → attribute}/test_fetch_on.rb +5 -5
  93. data/spec/attribute/test_initialize.rb +26 -0
  94. data/spec/attribute/test_optional.rb +18 -0
  95. data/spec/attribute/test_required.rb +18 -0
  96. data/spec/attribute/test_to_name.rb +20 -0
  97. data/spec/constraint/test_anonymous.rb +20 -0
  98. data/spec/constraint/test_equality.rb +39 -0
  99. data/spec/constraint/test_name.rb +20 -0
  100. data/spec/constraint/test_named.rb +20 -0
  101. data/spec/constraint/test_triple_equal.rb +13 -0
  102. data/spec/{unit/qrb/system.q → finitio/system.fio} +0 -0
  103. data/spec/{unit/qrb → finitio}/test_ast.rb +0 -0
  104. data/spec/finitio/test_parse.rb +23 -0
  105. data/spec/{unit/qrb/test_parse.rb → finitio/test_system.rb} +6 -6
  106. data/spec/heading/test_allow_extra.rb +24 -0
  107. data/spec/{unit/heading → heading}/test_each.rb +2 -2
  108. data/spec/heading/test_equality.rb +38 -0
  109. data/spec/heading/test_hash.rb +38 -0
  110. data/spec/heading/test_hash_get.rb +17 -0
  111. data/spec/{unit/heading → heading}/test_initialize.rb +2 -2
  112. data/spec/heading/test_multi.rb +57 -0
  113. data/spec/{unit/heading → heading}/test_size.rb +0 -0
  114. data/spec/heading/test_to_name.rb +58 -0
  115. data/spec/spec_helper.rb +17 -1
  116. data/spec/syntax/expr/test_free_variables.rb +46 -0
  117. data/spec/syntax/expr/test_to_proc_source.rb +43 -0
  118. data/spec/{unit/syntax → syntax}/nodes/test_ad_type.rb +26 -26
  119. data/spec/{unit/syntax → syntax}/nodes/test_any_type.rb +2 -2
  120. data/spec/syntax/nodes/test_attribute.rb +65 -0
  121. data/spec/{unit/syntax → syntax}/nodes/test_builtin_type.rb +5 -5
  122. data/spec/{unit/syntax → syntax}/nodes/test_comment.rb +1 -1
  123. data/spec/{unit/syntax → syntax}/nodes/test_constraint_def.rb +3 -8
  124. data/spec/{unit/syntax → syntax}/nodes/test_constraints.rb +21 -16
  125. data/spec/{unit/syntax → syntax}/nodes/test_contract.rb +28 -35
  126. data/spec/{unit/syntax → syntax}/nodes/test_expression.rb +13 -5
  127. data/spec/{unit/syntax → syntax}/nodes/test_heading.rb +25 -7
  128. data/spec/syntax/nodes/test_metadata.rb +28 -0
  129. data/spec/{unit/syntax → syntax}/nodes/test_named_constraint.rb +8 -8
  130. data/spec/syntax/nodes/test_relation_type.rb +84 -0
  131. data/spec/{unit/syntax → syntax}/nodes/test_seq_type.rb +4 -4
  132. data/spec/{unit/syntax → syntax}/nodes/test_set_type.rb +4 -4
  133. data/spec/{unit/syntax → syntax}/nodes/test_spacing.rb +1 -1
  134. data/spec/syntax/nodes/test_struct_type.rb +38 -0
  135. data/spec/{unit/syntax → syntax}/nodes/test_sub_type.rb +14 -14
  136. data/spec/{unit/syntax → syntax}/nodes/test_system.rb +3 -3
  137. data/spec/syntax/nodes/test_tuple_type.rb +94 -0
  138. data/spec/syntax/nodes/test_type_def.rb +57 -0
  139. data/spec/{unit/syntax → syntax}/nodes/test_type_ref.rb +3 -3
  140. data/spec/{unit/syntax → syntax}/nodes/test_union_type.rb +3 -3
  141. data/spec/{unit/syntax → syntax}/nodes/test_unnamed_constraint.rb +7 -7
  142. data/spec/syntax/test_compile.rb +41 -0
  143. data/spec/{unit/syntax → syntax}/test_compile_type.rb +1 -1
  144. data/spec/{unit/system → system}/test_add_type.rb +6 -6
  145. data/spec/{unit/system → system}/test_dsl.rb +2 -2
  146. data/spec/{unit/system → system}/test_dup.rb +4 -4
  147. data/spec/{unit/system → system}/test_fetch.rb +4 -4
  148. data/spec/{unit/system → system}/test_get_type.rb +2 -2
  149. data/spec/{unit/system → system}/test_initialize.rb +0 -0
  150. data/spec/test_finitio.rb +8 -0
  151. data/spec/{unit/type → type}/ad_type/test_default_name.rb +1 -2
  152. data/spec/{unit/type → type}/ad_type/test_dress.rb +19 -9
  153. data/spec/{unit/type → type}/ad_type/test_include.rb +3 -3
  154. data/spec/{unit/type → type}/ad_type/test_initialize.rb +15 -8
  155. data/spec/{unit/type → type}/ad_type/test_name.rb +2 -2
  156. data/spec/type/alias_type/test_default_name.rb +10 -0
  157. data/spec/type/alias_type/test_delegation.rb +29 -0
  158. data/spec/type/alias_type/test_name.rb +10 -0
  159. data/spec/{unit/type → type}/any_type/test_default_name.rb +1 -1
  160. data/spec/{unit/type → type}/any_type/test_dress.rb +0 -0
  161. data/spec/{unit/type → type}/any_type/test_equality.rb +4 -4
  162. data/spec/{unit/type → type}/any_type/test_include.rb +2 -2
  163. data/spec/{unit/type → type}/any_type/test_initialize.rb +0 -0
  164. data/spec/{unit/type → type}/any_type/test_name.rb +2 -2
  165. data/spec/{unit/type → type}/builtin_type/test_default_name.rb +1 -1
  166. data/spec/{unit/type → type}/builtin_type/test_dress.rb +3 -3
  167. data/spec/{unit/type → type}/builtin_type/test_equality.rb +4 -4
  168. data/spec/{unit/type → type}/builtin_type/test_include.rb +2 -2
  169. data/spec/{unit/type → type}/builtin_type/test_initialize.rb +1 -1
  170. data/spec/{unit/type → type}/builtin_type/test_name.rb +2 -2
  171. data/spec/type/multi_relation_type/test_default_name.rb +19 -0
  172. data/spec/type/multi_relation_type/test_dress.rb +206 -0
  173. data/spec/type/multi_relation_type/test_equality.rb +36 -0
  174. data/spec/type/multi_relation_type/test_include.rb +89 -0
  175. data/spec/type/multi_relation_type/test_initialize.rb +29 -0
  176. data/spec/type/multi_relation_type/test_name.rb +27 -0
  177. data/spec/type/multi_tuple_type/test_default_name.rb +17 -0
  178. data/spec/type/multi_tuple_type/test_dress.rb +146 -0
  179. data/spec/type/multi_tuple_type/test_equality.rb +32 -0
  180. data/spec/type/multi_tuple_type/test_include.rb +73 -0
  181. data/spec/type/multi_tuple_type/test_initialize.rb +30 -0
  182. data/spec/type/multi_tuple_type/test_name.rb +24 -0
  183. data/spec/type/proxy_type/test_delegation.rb +37 -0
  184. data/spec/type/proxy_type/test_resolve.rb +29 -0
  185. data/spec/{unit/type → type}/relation_type/test_default_name.rb +0 -0
  186. data/spec/{unit/type → type}/relation_type/test_dress.rb +24 -24
  187. data/spec/{unit/type → type}/relation_type/test_equality.rb +6 -6
  188. data/spec/{unit/type → type}/relation_type/test_include.rb +4 -4
  189. data/spec/{unit/type → type}/relation_type/test_initialize.rb +2 -2
  190. data/spec/{unit/type → type}/relation_type/test_name.rb +0 -0
  191. data/spec/{unit/type → type}/seq_type/test_default_name.rb +0 -0
  192. data/spec/{unit/type → type}/seq_type/test_dress.rb +5 -5
  193. data/spec/{unit/type → type}/seq_type/test_equality.rb +4 -4
  194. data/spec/{unit/type → type}/seq_type/test_include.rb +4 -4
  195. data/spec/{unit/type → type}/seq_type/test_initialize.rb +3 -3
  196. data/spec/{unit/type → type}/seq_type/test_name.rb +0 -0
  197. data/spec/{unit/type → type}/set_type/test_default_name.rb +0 -0
  198. data/spec/{unit/type → type}/set_type/test_dress.rb +8 -8
  199. data/spec/{unit/type → type}/set_type/test_equality.rb +4 -4
  200. data/spec/{unit/type → type}/set_type/test_include.rb +4 -4
  201. data/spec/{unit/type → type}/set_type/test_initialize.rb +3 -3
  202. data/spec/{unit/type → type}/set_type/test_name.rb +0 -0
  203. data/spec/type/struct_type/test_default_name.rb +10 -0
  204. data/spec/type/struct_type/test_dress.rb +105 -0
  205. data/spec/type/struct_type/test_equality.rb +28 -0
  206. data/spec/type/struct_type/test_include.rb +40 -0
  207. data/spec/type/struct_type/test_initialize.rb +22 -0
  208. data/spec/type/struct_type/test_name.rb +20 -0
  209. data/spec/{unit/type → type}/sub_type/test_default_name.rb +2 -2
  210. data/spec/{unit/type → type}/sub_type/test_dress.rb +14 -14
  211. data/spec/type/sub_type/test_equality.rb +46 -0
  212. data/spec/{unit/type → type}/sub_type/test_include.rb +6 -6
  213. data/spec/type/sub_type/test_initialize.rb +13 -0
  214. data/spec/{unit/type → type}/sub_type/test_name.rb +4 -4
  215. data/spec/{unit/type → type}/tuple_type/test_default_name.rb +0 -0
  216. data/spec/{unit/type → type}/tuple_type/test_dress.rb +18 -18
  217. data/spec/{unit/type → type}/tuple_type/test_equality.rb +6 -6
  218. data/spec/{unit/type → type}/tuple_type/test_include.rb +4 -4
  219. data/spec/{unit/type → type}/tuple_type/test_initialize.rb +4 -4
  220. data/spec/{unit/type → type}/tuple_type/test_name.rb +0 -0
  221. data/spec/{unit/type → type}/union_type/test_default_name.rb +0 -0
  222. data/spec/{unit/type → type}/union_type/test_dress.rb +7 -6
  223. data/spec/{unit/type → type}/union_type/test_equality.rb +7 -7
  224. data/spec/{unit/type → type}/union_type/test_include.rb +3 -3
  225. data/spec/{unit/type → type}/union_type/test_initialize.rb +3 -3
  226. data/spec/{unit/type → type}/union_type/test_name.rb +0 -0
  227. data/spec/{unit/type_factory → type_factory}/dsl/test_adt.rb +4 -4
  228. data/spec/{unit/type_factory → type_factory}/dsl/test_any.rb +1 -1
  229. data/spec/{unit/type_factory → type_factory}/dsl/test_attribute.rb +16 -2
  230. data/spec/{unit/type_factory → type_factory}/dsl/test_attributes.rb +1 -1
  231. data/spec/{unit/type_factory → type_factory}/dsl/test_builtin.rb +3 -3
  232. data/spec/type_factory/dsl/test_multi_relation.rb +39 -0
  233. data/spec/type_factory/dsl/test_multi_tuple.rb +37 -0
  234. data/spec/{unit/type_factory → type_factory}/dsl/test_relation.rb +6 -6
  235. data/spec/{unit/type_factory → type_factory}/dsl/test_seq.rb +4 -4
  236. data/spec/{unit/type_factory → type_factory}/dsl/test_set.rb +4 -4
  237. data/spec/type_factory/dsl/test_struct.rb +45 -0
  238. data/spec/{unit/type_factory → type_factory}/dsl/test_subtype.rb +10 -8
  239. data/spec/{unit/type_factory → type_factory}/dsl/test_tuple.rb +5 -5
  240. data/spec/{unit/type_factory → type_factory}/dsl/test_union.rb +6 -6
  241. data/spec/{unit/type_factory → type_factory}/factory/test_builtin.rb +1 -1
  242. data/spec/{unit/type_factory → type_factory}/factory/test_seq_type.rb +2 -2
  243. data/spec/{unit/type_factory → type_factory}/factory/test_set_type.rb +2 -2
  244. data/spec/type_factory/factory/test_struct_type.rb +18 -0
  245. data/spec/{unit/type_factory → type_factory}/factory/test_sub_type.rb +7 -7
  246. data/spec/{unit/type_factory → type_factory}/factory/test_tuple_type.rb +4 -4
  247. metadata +398 -286
  248. data/lib/finitio/data_type.rb +0 -29
  249. data/lib/finitio/syntax/ad_type.rb +0 -32
  250. data/lib/finitio/syntax/attribute.rb +0 -15
  251. data/lib/finitio/syntax/constraints.rb +0 -22
  252. data/lib/finitio/syntax/heading.rb +0 -19
  253. data/lib/finitio/syntax/relation_type.rb +0 -15
  254. data/lib/finitio/syntax/support.rb +0 -13
  255. data/lib/finitio/syntax/tuple_type.rb +0 -15
  256. data/spec/acceptance/Finitio/test_default.rb +0 -96
  257. data/spec/acceptance/Finitio/test_parsing.rb +0 -15
  258. data/spec/acceptance/ad_type/test_in_finitio.rb +0 -82
  259. data/spec/acceptance/ad_type/test_in_ruby.rb +0 -60
  260. data/spec/unit/attribute/test_initialize.rb +0 -13
  261. data/spec/unit/attribute/test_to_name.rb +0 -10
  262. data/spec/unit/heading/test_equality.rb +0 -28
  263. data/spec/unit/heading/test_to_name.rb +0 -32
  264. data/spec/unit/syntax/nodes/test_attribute.rb +0 -38
  265. data/spec/unit/syntax/nodes/test_relation_type.rb +0 -59
  266. data/spec/unit/syntax/nodes/test_tuple_type.rb +0 -59
  267. data/spec/unit/syntax/nodes/test_type_def.rb +0 -33
  268. data/spec/unit/test_finitio.rb +0 -15
  269. data/spec/unit/type/sub_type/test_equality.rb +0 -34
  270. data/spec/unit/type/sub_type/test_initialize.rb +0 -16
@@ -9,7 +9,7 @@ module Finitio
9
9
  it{ should be_a(Array) }
10
10
 
11
11
  it 'should be the correct pair' do
12
- subject.should eq([ Attribute.new(:a, intType), Attribute.new(:b, floatType) ])
12
+ expect(subject).to eq([ Attribute.new(:a, intType), Attribute.new(:b, floatType) ])
13
13
  end
14
14
  end
15
15
 
@@ -9,7 +9,7 @@ module Finitio
9
9
  it{ should be_a(BuiltinType) }
10
10
 
11
11
  it 'should have the correct ruby type' do
12
- subject.ruby_type.should be(Integer)
12
+ expect(subject.ruby_type).to be(Integer)
13
13
  end
14
14
  end
15
15
 
@@ -25,7 +25,7 @@ module Finitio
25
25
  it_should_behave_like "The Integer builtin type"
26
26
 
27
27
  it 'should have the correct name' do
28
- subject.name.should eq("Integer")
28
+ expect(subject.name).to eq("Integer")
29
29
  end
30
30
  end
31
31
 
@@ -37,7 +37,7 @@ module Finitio
37
37
  it_should_behave_like "The Integer builtin type"
38
38
 
39
39
  it 'should have the correct name' do
40
- subject.name.should eq("Int")
40
+ expect(subject.name).to eq("Int")
41
41
  end
42
42
  end
43
43
 
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ module Finitio
3
+ describe TypeFactory, "DSL#multi_relation" do
4
+
5
+ let(:factory){ TypeFactory.new }
6
+
7
+ let(:heading){
8
+ Heading.new([
9
+ Attribute.new(:a, intType, false)
10
+ ])
11
+ }
12
+
13
+ shared_examples_for "The Relation[a :? Int] type" do
14
+
15
+ it{ should be_a(MultiRelationType) }
16
+
17
+ it 'should have the correct heading' do
18
+ expect(subject.heading).to eq(heading)
19
+ end
20
+ end
21
+
22
+ before do
23
+ subject
24
+ end
25
+
26
+ context 'when used with the standard signature' do
27
+ subject{
28
+ factory.multi_relation(heading, "MyRelation")
29
+ }
30
+
31
+ it_should_behave_like "The Relation[a :? Int] type"
32
+
33
+ it 'should have the correct name' do
34
+ expect(subject.name).to eq("MyRelation")
35
+ end
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ module Finitio
3
+ describe TypeFactory, "DSL#multi_tuple" do
4
+
5
+ let(:factory){ TypeFactory.new }
6
+
7
+ let(:heading){
8
+ Heading.new([ Attribute.new(:a, intType, false) ])
9
+ }
10
+
11
+ shared_examples_for "The Tuple[a :? Int] type" do
12
+
13
+ it{ should be_a(MultiTupleType) }
14
+
15
+ it 'should have the correct heading' do
16
+ expect(subject.heading).to eq(heading)
17
+ end
18
+ end
19
+
20
+ before do
21
+ subject
22
+ end
23
+
24
+ context 'when used with the standard signature' do
25
+ subject{
26
+ factory.multi_tuple(heading, "MyTuple")
27
+ }
28
+
29
+ it_should_behave_like "The Tuple[a :? Int] type"
30
+
31
+ it 'should have the correct name' do
32
+ expect(subject.name).to eq("MyTuple")
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -13,7 +13,7 @@ module Finitio
13
13
  it{ should be_a(RelationType) }
14
14
 
15
15
  it 'should have the correct heading' do
16
- subject.heading.should eq(heading)
16
+ expect(subject.heading).to eq(heading)
17
17
  end
18
18
  end
19
19
 
@@ -29,7 +29,7 @@ module Finitio
29
29
  it_should_behave_like "The Relation[a: Int] type"
30
30
 
31
31
  it 'should have the correct name' do
32
- subject.name.should eq("MyRelation")
32
+ expect(subject.name).to eq("MyRelation")
33
33
  end
34
34
  end
35
35
 
@@ -41,7 +41,7 @@ module Finitio
41
41
  it_should_behave_like "The Relation[a: Int] type"
42
42
 
43
43
  it 'should have the correct name' do
44
- subject.name.should eq("MyRelation")
44
+ expect(subject.name).to eq("MyRelation")
45
45
  end
46
46
  end
47
47
 
@@ -53,7 +53,7 @@ module Finitio
53
53
  it_should_behave_like "The Relation[a: Int] type"
54
54
 
55
55
  it 'should have the correct name' do
56
- subject.name.should eq("{{a: Integer}}")
56
+ expect(subject.name).to eq("{{a: Integer}}")
57
57
  end
58
58
  end
59
59
 
@@ -65,7 +65,7 @@ module Finitio
65
65
  it_should_behave_like "The Relation[a: Int] type"
66
66
 
67
67
  it 'should have the correct name' do
68
- subject.name.should eq("MyRelation")
68
+ expect(subject.name).to eq("MyRelation")
69
69
  end
70
70
  end
71
71
 
@@ -77,7 +77,7 @@ module Finitio
77
77
  it_should_behave_like "The Relation[a: Int] type"
78
78
 
79
79
  it 'should have the correct name' do
80
- subject.name.should eq("{{a: intType}}")
80
+ expect(subject.name).to eq("{{a: intType}}")
81
81
  end
82
82
  end
83
83
 
@@ -9,7 +9,7 @@ module Finitio
9
9
  it{ should be_a(SeqType) }
10
10
 
11
11
  it 'should have the correct element type' do
12
- subject.elm_type.should eq(intType)
12
+ expect(subject.elm_type).to eq(intType)
13
13
  end
14
14
  end
15
15
 
@@ -25,7 +25,7 @@ module Finitio
25
25
  it_should_behave_like "The Seq[Int] type"
26
26
 
27
27
  it 'should have the correct name' do
28
- subject.name.should eq("[Integer]")
28
+ expect(subject.name).to eq("[Integer]")
29
29
  end
30
30
  end
31
31
 
@@ -37,7 +37,7 @@ module Finitio
37
37
  it_should_behave_like "The Seq[Int] type"
38
38
 
39
39
  it 'should have the correct name' do
40
- subject.name.should eq("[intType]")
40
+ expect(subject.name).to eq("[intType]")
41
41
  end
42
42
  end
43
43
 
@@ -49,7 +49,7 @@ module Finitio
49
49
  it_should_behave_like "The Seq[Int] type"
50
50
 
51
51
  it 'should have the correct name' do
52
- subject.name.should eq("MySeq")
52
+ expect(subject.name).to eq("MySeq")
53
53
  end
54
54
  end
55
55
 
@@ -9,7 +9,7 @@ module Finitio
9
9
  it{ should be_a(SetType) }
10
10
 
11
11
  it 'should have the correct element type' do
12
- subject.elm_type.should eq(intType)
12
+ expect(subject.elm_type).to eq(intType)
13
13
  end
14
14
  end
15
15
 
@@ -25,7 +25,7 @@ module Finitio
25
25
  it_should_behave_like "The Set[Int] type"
26
26
 
27
27
  it 'should have the correct name' do
28
- subject.name.should eq("{Integer}")
28
+ expect(subject.name).to eq("{Integer}")
29
29
  end
30
30
  end
31
31
 
@@ -37,7 +37,7 @@ module Finitio
37
37
  it_should_behave_like "The Set[Int] type"
38
38
 
39
39
  it 'should have the correct name' do
40
- subject.name.should eq("{intType}")
40
+ expect(subject.name).to eq("{intType}")
41
41
  end
42
42
  end
43
43
 
@@ -49,7 +49,7 @@ module Finitio
49
49
  it_should_behave_like "The Set[Int] type"
50
50
 
51
51
  it 'should have the correct name' do
52
- subject.name.should eq("MySet")
52
+ expect(subject.name).to eq("MySet")
53
53
  end
54
54
  end
55
55
 
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+ module Finitio
3
+ describe TypeFactory, "DSL#struct" do
4
+
5
+ let(:factory){ TypeFactory.new }
6
+
7
+ shared_examples_for "The <Int, Float> type" do
8
+
9
+ it{ should be_a(StructType) }
10
+
11
+ it 'should have the correct components' do
12
+ expect(subject.component_types).to eq([intType, floatType])
13
+ end
14
+ end
15
+
16
+ before do
17
+ subject
18
+ end
19
+
20
+ context 'when used with the standard signature' do
21
+ subject{
22
+ factory.struct([intType, floatType], "MyTuple")
23
+ }
24
+
25
+ it_should_behave_like "The <Int, Float> type"
26
+
27
+ it 'should have the correct name' do
28
+ expect(subject.name).to eq("MyTuple")
29
+ end
30
+ end
31
+
32
+ context 'when used with an array of ruby classes' do
33
+ subject{
34
+ factory.struct([Integer, Float])
35
+ }
36
+
37
+ it_should_behave_like "The <Int, Float> type"
38
+
39
+ it 'should have the correct name' do
40
+ expect(subject.name).to eq("<Integer, Float>")
41
+ end
42
+ end
43
+
44
+ end
45
+ end
@@ -13,14 +13,14 @@ module Finitio
13
13
  it{ should be_a(SubType) }
14
14
 
15
15
  it 'should have the BuiltinType(Integer) super type' do
16
- subject.super_type.should be_a(BuiltinType)
17
- subject.super_type.ruby_type.should be(Integer)
16
+ expect(subject.super_type).to be_a(BuiltinType)
17
+ expect(subject.super_type.ruby_type).to be(Integer)
18
18
  end
19
19
 
20
20
  it 'should have the correct constraint' do
21
- ->{
21
+ expect{
22
22
  subject.dress(-12)
23
- }.should raise_error(TypeError)
23
+ }.to raise_error(TypeError)
24
24
  end
25
25
  end
26
26
 
@@ -29,12 +29,14 @@ module Finitio
29
29
  it{ should be_a(SubType) }
30
30
 
31
31
  it 'should have the BuiltinType(Integer) super type' do
32
- subject.super_type.should be_a(BuiltinType)
33
- subject.super_type.ruby_type.should be(Integer)
32
+ expect(subject.super_type).to be_a(BuiltinType)
33
+ expect(subject.super_type.ruby_type).to be(Integer)
34
34
  end
35
35
 
36
36
  it 'should have the correct constraints' do
37
- subject.constraints.should eq(constraints)
37
+ subject.constraints.each do |c|
38
+ expect(c).to be_a(Constraint)
39
+ end
38
40
  end
39
41
  end
40
42
 
@@ -83,7 +85,7 @@ module Finitio
83
85
  it_should_behave_like "The SmallInt structural type"
84
86
 
85
87
  it 'should have the correct name' do
86
- subject.name.should eq("SmallInt")
88
+ expect(subject.name).to eq("SmallInt")
87
89
  end
88
90
  end
89
91
 
@@ -13,7 +13,7 @@ module Finitio
13
13
  it{ should be_a(TupleType) }
14
14
 
15
15
  it 'should have the correct heading' do
16
- subject.heading.should eq(heading)
16
+ expect(subject.heading).to eq(heading)
17
17
  end
18
18
  end
19
19
 
@@ -29,7 +29,7 @@ module Finitio
29
29
  it_should_behave_like "The Tuple[a: Int] type"
30
30
 
31
31
  it 'should have the correct name' do
32
- subject.name.should eq("MyTuple")
32
+ expect(subject.name).to eq("MyTuple")
33
33
  end
34
34
  end
35
35
 
@@ -41,7 +41,7 @@ module Finitio
41
41
  it_should_behave_like "The Tuple[a: Int] type"
42
42
 
43
43
  it 'should have the correct name' do
44
- subject.name.should eq("{a: Integer}")
44
+ expect(subject.name).to eq("{a: Integer}")
45
45
  end
46
46
  end
47
47
 
@@ -53,7 +53,7 @@ module Finitio
53
53
  it_should_behave_like "The Tuple[a: Int] type"
54
54
 
55
55
  it 'should have the correct name' do
56
- subject.name.should eq("MyTuple")
56
+ expect(subject.name).to eq("MyTuple")
57
57
  end
58
58
  end
59
59
 
@@ -65,7 +65,7 @@ module Finitio
65
65
  it_should_behave_like "The Tuple[a: Int] type"
66
66
 
67
67
  it 'should have the correct name' do
68
- subject.name.should eq("{a: intType}")
68
+ expect(subject.name).to eq("{a: intType}")
69
69
  end
70
70
  end
71
71
 
@@ -9,7 +9,7 @@ module Finitio
9
9
  it{ should be_a(UnionType) }
10
10
 
11
11
  it 'should have the correct candidates' do
12
- subject.candidates.should eq([intType, floatType])
12
+ expect(subject.candidates).to eq([intType, floatType])
13
13
  end
14
14
  end
15
15
 
@@ -25,7 +25,7 @@ module Finitio
25
25
  it_should_behave_like "The Int|Float union type"
26
26
 
27
27
  it 'should have the correct name' do
28
- subject.name.should eq("MyUnion")
28
+ expect(subject.name).to eq("MyUnion")
29
29
  end
30
30
  end
31
31
 
@@ -37,7 +37,7 @@ module Finitio
37
37
  it_should_behave_like "The Int|Float union type"
38
38
 
39
39
  it 'should have the correct name' do
40
- subject.name.should eq("Integer|Float")
40
+ expect(subject.name).to eq("Integer|Float")
41
41
  end
42
42
  end
43
43
 
@@ -49,7 +49,7 @@ module Finitio
49
49
  it_should_behave_like "The Int|Float union type"
50
50
 
51
51
  it 'should have the correct name' do
52
- subject.name.should eq("Integer|Float")
52
+ expect(subject.name).to eq("Integer|Float")
53
53
  end
54
54
  end
55
55
 
@@ -61,7 +61,7 @@ module Finitio
61
61
  it_should_behave_like "The Int|Float union type"
62
62
 
63
63
  it 'should have the correct name' do
64
- subject.name.should eq("intType|floatType")
64
+ expect(subject.name).to eq("intType|floatType")
65
65
  end
66
66
  end
67
67
 
@@ -73,7 +73,7 @@ module Finitio
73
73
  it_should_behave_like "The Int|Float union type"
74
74
 
75
75
  it 'should have the correct name' do
76
- subject.name.should eq("Integer|floatType")
76
+ expect(subject.name).to eq("Integer|floatType")
77
77
  end
78
78
  end
79
79
 
@@ -16,7 +16,7 @@ module Finitio
16
16
  it{ should eq(intType) }
17
17
 
18
18
  it 'should have the correct name' do
19
- subject.name.should eq("Int")
19
+ expect(subject.name).to eq("Int")
20
20
  end
21
21
  end
22
22
 
@@ -19,7 +19,7 @@ module Finitio
19
19
  it{ should eq(expected) }
20
20
 
21
21
  it 'should have the correct name' do
22
- subject.name.should eq("MySeq")
22
+ expect(subject.name).to eq("MySeq")
23
23
  end
24
24
  end
25
25
  end
@@ -36,7 +36,7 @@ module Finitio
36
36
  it{ should eq(expected) }
37
37
 
38
38
  it 'should have the correct name' do
39
- subject.name.should eq("MySeq")
39
+ expect(subject.name).to eq("MySeq")
40
40
  end
41
41
  end
42
42