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
@@ -1,29 +0,0 @@
1
- module Finitio
2
- module DataType
3
-
4
- def dress(value, handler = DressHelper.new)
5
- ad_type.dress(value, handler)
6
- end
7
-
8
- def contract(name, infotype)
9
- dresser = method(name)
10
- undresser = instance_method(:"to_#{name}")
11
- ad_contracts[name] = [
12
- Finitio.type(infotype),
13
- dresser,
14
- ->(d){ undresser.bind(d).call }
15
- ]
16
- end
17
-
18
- private
19
-
20
- def ad_type
21
- @ad_type ||= Finitio.adt(self, ad_contracts)
22
- end
23
-
24
- def ad_contracts
25
- @ad_contracts ||= {}
26
- end
27
-
28
- end # module DataType
29
- end # module Finitio
@@ -1,32 +0,0 @@
1
- module Finitio
2
- module Syntax
3
- module AdType
4
- include Support
5
-
6
- def compile(factory)
7
- name = builtin_type_name
8
- clazz = name ? resolve_ruby_const(name.to_s) : nil
9
- factory.adt(clazz, compile_contracts(factory, clazz))
10
- end
11
-
12
- def compile_contracts(factory, clazz)
13
- contracts = {}
14
- captures[:contract].each do |node|
15
- contract = node.compile(factory, clazz)
16
- contracts.merge!(contract) do |k,_,_|
17
- raise Error, "Duplicate contract name `#{k}`"
18
- end
19
- end
20
- contracts
21
- end
22
-
23
- def to_ast
24
- [
25
- :ad_type,
26
- builtin_type_name ? builtin_type_name.to_s : nil
27
- ] + captures[:contract].map(&:to_ast)
28
- end
29
-
30
- end # module AdType
31
- end # module Syntax
32
- end # module Finitio
@@ -1,15 +0,0 @@
1
- module Finitio
2
- module Syntax
3
- module Attribute
4
-
5
- def compile(factory)
6
- factory.attribute(attribute_name.to_sym, type.compile(factory))
7
- end
8
-
9
- def to_ast
10
- [:attribute, attribute_name.to_s, type.to_ast]
11
- end
12
-
13
- end # module BuiltinType
14
- end # module Syntax
15
- end # module Finitio
@@ -1,22 +0,0 @@
1
- module Finitio
2
- module Syntax
3
- module Constraints
4
-
5
- def compile(var_name)
6
- constraints = {}
7
- captures[:named_constraint].each do |node|
8
- compiled = node.compile(var_name)
9
- constraints.merge!(compiled) do |k,_,_|
10
- raise Error, "Duplicate constraint name `#{k}`"
11
- end
12
- end
13
- constraints
14
- end
15
-
16
- def to_ast(var_name)
17
- captures[:named_constraint].map{|c| c.to_ast(var_name) }
18
- end
19
-
20
- end # module Constraints
21
- end # module Syntax
22
- end # module Finitio
@@ -1,19 +0,0 @@
1
- module Finitio
2
- module Syntax
3
- module Heading
4
-
5
- def attributes(factory)
6
- captures[:attribute].map{|x| x.compile(factory) }
7
- end
8
-
9
- def compile(factory)
10
- Finitio::Heading.new(attributes(factory))
11
- end
12
-
13
- def to_ast
14
- captures[:attribute].map(&:to_ast).unshift(:heading)
15
- end
16
-
17
- end # module Heading
18
- end # module Syntax
19
- end # module Finitio
@@ -1,15 +0,0 @@
1
- module Finitio
2
- module Syntax
3
- module RelationType
4
-
5
- def compile(factory)
6
- factory.relation(heading.compile(factory))
7
- end
8
-
9
- def to_ast
10
- [:relation_type, heading.to_ast]
11
- end
12
-
13
- end # module RelationType
14
- end # module Syntax
15
- end # module Finitio
@@ -1,13 +0,0 @@
1
- module Finitio
2
- module Syntax
3
- module Support
4
-
5
- def resolve_ruby_const(name)
6
- name.split('::').inject(::Kernel){|mod,const|
7
- mod.const_get(const)
8
- }
9
- end
10
-
11
- end # module Support
12
- end # module Syntax
13
- end # module Finitio
@@ -1,15 +0,0 @@
1
- module Finitio
2
- module Syntax
3
- module TupleType
4
-
5
- def compile(factory)
6
- factory.tuple(heading.compile(factory))
7
- end
8
-
9
- def to_ast
10
- [:tuple_type, heading.to_ast]
11
- end
12
-
13
- end # module TupleType
14
- end # module Syntax
15
- end # module Finitio
@@ -1,96 +0,0 @@
1
- require 'spec_helper'
2
- module Finitio
3
- describe "Finitio/default" do
4
-
5
- let(:system){ Finitio.system('Finitio/default') }
6
-
7
- describe 'Boolean' do
8
- let(:type){ system['Boolean'] }
9
-
10
- it 'recognizes true' do
11
- type.dress(true).should eq(true)
12
- end
13
-
14
- it 'recognizes false' do
15
- type.dress(false).should eq(false)
16
- end
17
-
18
- it 'raises on something else' do
19
- ->{ type.dress("foo") }.should raise_error(TypeError)
20
- end
21
- end
22
-
23
- describe 'Date' do
24
- let(:type){ system['Date'] }
25
-
26
- let(:expected){ Date.new(2014, 11, 9) }
27
-
28
- it 'recognizes dates' do
29
- type.dress(expected).should be(expected)
30
- end
31
-
32
- it 'recognizes iso8601 dates' do
33
- type.dress('2014-11-09').should eq(expected)
34
- end
35
-
36
- it 'recognizes the output of iso8601' do
37
- type.dress(expected.iso8601).should eq(expected)
38
- end
39
-
40
- it 'raises on something else' do
41
- ->{
42
- type.dress('foo')
43
- }.should raise_error("Invalid value `foo` for Date")
44
- end
45
- end
46
-
47
- describe 'Time' do
48
- let(:type){ system['Time'] }
49
-
50
- let(:expected){ Time.new(2014,3,1,12,9,31) }
51
-
52
- it 'recognizes times' do
53
- type.dress(expected).should be(expected)
54
- end
55
-
56
- it 'recognizes iso8601 times' do
57
- type.dress('2014-03-01T12:09:31').should eq(expected)
58
- end
59
-
60
- it 'recognizes the output of iso8601' do
61
- type.dress(expected.iso8601).should eq(expected)
62
- end
63
-
64
- it 'raises on something else' do
65
- ->{
66
- type.dress('foo')
67
- }.should raise_error("Invalid value `foo` for Time")
68
- end
69
- end
70
-
71
- describe 'DateTime' do
72
- let(:type){ system['DateTime'] }
73
-
74
- let(:expected){ DateTime.new(2014,3,1,12,9,31) }
75
-
76
- it 'recognizes times' do
77
- type.dress(expected).should be(expected)
78
- end
79
-
80
- it 'recognizes iso8601 times' do
81
- type.dress('2014-03-01T12:09:31').should eq(expected)
82
- end
83
-
84
- it 'recognizes the output of iso8601' do
85
- type.dress(expected.iso8601).should eq(expected)
86
- end
87
-
88
- it 'raises on something else' do
89
- ->{
90
- type.dress('foo')
91
- }.should raise_error("Invalid value `foo` for DateTime")
92
- end
93
- end
94
-
95
- end
96
- end
@@ -1,15 +0,0 @@
1
- require 'spec_helper'
2
- describe "Finitio definition files" do
3
-
4
- Finitio.definition_files('Finitio').each do |file|
5
- file = Path(file)
6
-
7
- describe "Finitio/#{file.basename.rm_ext}" do
8
-
9
- it 'should parse' do
10
- Finitio.parse(file.read).should be_a(Finitio::System)
11
- end
12
- end
13
- end
14
-
15
- end
@@ -1,82 +0,0 @@
1
- require 'spec_helper'
2
- module Finitio
3
- describe "Using Finitio's abstract data types in Ruby/Finitio" do
4
-
5
- class MyColorClass
6
- extend Finitio::DataType
7
-
8
- def initialize(r, g, b)
9
- @r, @g, @b = r, g, b
10
- end
11
- attr_reader :r, :g, :b
12
-
13
- def to_rgb
14
- { r: @r, g: @g, b: @b }
15
- end
16
-
17
- def self.rgb(tuple)
18
- new(tuple[:r], tuple[:g], tuple[:b])
19
- end
20
- end
21
-
22
- let(:system) do
23
- Finitio.parse <<-EOF
24
- Byte = .Fixnum( i | i>=0 and i<= 255 )
25
- Color = .Finitio::MyColorClass <rgb> {r: Byte, g: Byte, b: Byte}
26
- Gender = <mf> .String( s | s=='M' or s=='F' )
27
- EOF
28
- end
29
-
30
- let(:color){
31
- system["Color"]
32
- }
33
-
34
- describe 'the Color.dress method' do
35
- subject{ color.dress(arg) }
36
-
37
- context 'when valid' do
38
- let(:arg){ {"r" => 12, "g" => 17, "b" => 71} }
39
-
40
- it{ should be_a(MyColorClass) }
41
-
42
- it 'should be the expected one' do
43
- subject.r.should eq(12)
44
- subject.g.should eq(17)
45
- subject.b.should eq(71)
46
- end
47
- end
48
-
49
- context 'when invalid' do
50
- let(:arg){ {"r" => -12, "g" => 17, "b" => 71} }
51
-
52
- it 'should raise an error' do
53
- ->{
54
- subject
55
- }.should raise_error(TypeError)
56
- end
57
- end
58
-
59
- end
60
-
61
- describe 'the Gender.dress method' do
62
- subject{ system['Gender'].dress(arg) }
63
-
64
- context 'when valid' do
65
- let(:arg){ 'M' }
66
-
67
- it{ should eq('M') }
68
- end
69
-
70
- context 'when valid' do
71
- let(:arg){ 'Monsieur' }
72
-
73
- it 'should raise an error' do
74
- ->{
75
- subject
76
- }.should raise_error(TypeError, "Invalid value `Monsieur` for Gender")
77
- end
78
- end
79
- end
80
-
81
- end
82
- end
@@ -1,60 +0,0 @@
1
- require 'spec_helper'
2
- module Finitio
3
- describe "Using Finitio's abstract data types in Ruby" do
4
-
5
- let(:color) do
6
- Class.new{
7
- extend Finitio::DataType
8
-
9
- def initialize(r, g, b)
10
- @r, @g, @b = r, g, b
11
- end
12
- attr_reader :r, :g, :b
13
-
14
- def to_rgb
15
- { r: @r, g: @g, b: @b }
16
- end
17
-
18
- def self.rgb(tuple)
19
- new(tuple[:r], tuple[:g], tuple[:b])
20
- end
21
-
22
- contract :rgb, {r: 0..255, g: 0..255, b: 0..255}
23
- }
24
- end
25
-
26
- describe 'The factored class' do
27
- subject{ color }
28
-
29
- it{ should be_a(Class) }
30
- end
31
-
32
- describe 'the dress method, when valid' do
33
-
34
- subject{
35
- color.dress(r: 12, g: 13, b: 28)
36
- }
37
-
38
- it{ should be_a(color) }
39
-
40
- it 'should set the instance variables correctly' do
41
- subject.r.should eq(12)
42
- subject.g.should eq(13)
43
- subject.b.should eq(28)
44
- end
45
- end
46
-
47
- describe 'the up method, when already a color' do
48
- let(:value){
49
- color.new(12, 13, 28)
50
- }
51
-
52
- subject{
53
- color.dress(value)
54
- }
55
-
56
- it{ should be(value) }
57
- end
58
-
59
- end
60
- end
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
- module Finitio
3
- describe Attribute, "initialize" do
4
-
5
- subject{ Attribute.new(:red, intType) }
6
-
7
- it 'should correctly set the instance variables' do
8
- subject.name.should eq(:red)
9
- subject.type.should eq(intType)
10
- end
11
-
12
- end
13
- end
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
- module Finitio
3
- describe Attribute, "to_name" do
4
-
5
- subject{ Attribute.new(:red, intType).to_name }
6
-
7
- it{ should eq("red: intType") }
8
-
9
- end
10
- end