veritas 0.0.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.
Files changed (724) hide show
  1. data/.autotest +42 -0
  2. data/.document +5 -0
  3. data/.gitignore +34 -0
  4. data/Gemfile +25 -0
  5. data/Gemfile.lock +122 -0
  6. data/LICENSE +20 -0
  7. data/README.rdoc +143 -0
  8. data/Rakefile +31 -0
  9. data/TODO +126 -0
  10. data/benchmarks/memory.rb +175 -0
  11. data/benchmarks/speed.rb +101 -0
  12. data/config/flay.yml +3 -0
  13. data/config/flog.yml +2 -0
  14. data/config/roodi.yml +18 -0
  15. data/config/site.reek +96 -0
  16. data/config/yardstick.yml +2 -0
  17. data/lib/veritas/algebra/difference.rb +53 -0
  18. data/lib/veritas/algebra/extension.rb +121 -0
  19. data/lib/veritas/algebra/intersection.rb +53 -0
  20. data/lib/veritas/algebra/join.rb +198 -0
  21. data/lib/veritas/algebra/product.rb +90 -0
  22. data/lib/veritas/algebra/projection.rb +113 -0
  23. data/lib/veritas/algebra/rename/aliases.rb +199 -0
  24. data/lib/veritas/algebra/rename.rb +91 -0
  25. data/lib/veritas/algebra/restriction.rb +96 -0
  26. data/lib/veritas/algebra/summarization.rb +166 -0
  27. data/lib/veritas/algebra/union.rb +54 -0
  28. data/lib/veritas/algebra.rb +10 -0
  29. data/lib/veritas/attribute/boolean.rb +39 -0
  30. data/lib/veritas/attribute/class.rb +21 -0
  31. data/lib/veritas/attribute/comparable.rb +32 -0
  32. data/lib/veritas/attribute/date.rb +36 -0
  33. data/lib/veritas/attribute/date_time.rb +36 -0
  34. data/lib/veritas/attribute/decimal.rb +21 -0
  35. data/lib/veritas/attribute/float.rb +21 -0
  36. data/lib/veritas/attribute/integer.rb +21 -0
  37. data/lib/veritas/attribute/numeric.rb +86 -0
  38. data/lib/veritas/attribute/object.rb +25 -0
  39. data/lib/veritas/attribute/orderable.rb +33 -0
  40. data/lib/veritas/attribute/string.rb +88 -0
  41. data/lib/veritas/attribute/time.rb +36 -0
  42. data/lib/veritas/attribute.rb +256 -0
  43. data/lib/veritas/core_ext/date.rb +16 -0
  44. data/lib/veritas/core_ext/range.rb +35 -0
  45. data/lib/veritas/core_ext/time.rb +16 -0
  46. data/lib/veritas/logic/connective/binary.rb +54 -0
  47. data/lib/veritas/logic/connective/conjunction.rb +70 -0
  48. data/lib/veritas/logic/connective/disjunction.rb +70 -0
  49. data/lib/veritas/logic/connective/negation.rb +78 -0
  50. data/lib/veritas/logic/connective/unary.rb +52 -0
  51. data/lib/veritas/logic/connective.rb +31 -0
  52. data/lib/veritas/logic/expression.rb +99 -0
  53. data/lib/veritas/logic/predicate/comparable.rb +57 -0
  54. data/lib/veritas/logic/predicate/enumerable.rb +25 -0
  55. data/lib/veritas/logic/predicate/equality.rb +65 -0
  56. data/lib/veritas/logic/predicate/exclusion.rb +72 -0
  57. data/lib/veritas/logic/predicate/greater_than.rb +65 -0
  58. data/lib/veritas/logic/predicate/greater_than_or_equal_to.rb +65 -0
  59. data/lib/veritas/logic/predicate/inclusion.rb +72 -0
  60. data/lib/veritas/logic/predicate/inequality.rb +80 -0
  61. data/lib/veritas/logic/predicate/less_than.rb +65 -0
  62. data/lib/veritas/logic/predicate/less_than_or_equal_to.rb +65 -0
  63. data/lib/veritas/logic/predicate/match.rb +53 -0
  64. data/lib/veritas/logic/predicate/no_match.rb +68 -0
  65. data/lib/veritas/logic/predicate.rb +97 -0
  66. data/lib/veritas/logic/proposition/false.rb +63 -0
  67. data/lib/veritas/logic/proposition/true.rb +63 -0
  68. data/lib/veritas/logic/proposition.rb +110 -0
  69. data/lib/veritas/logic.rb +5 -0
  70. data/lib/veritas/optimizer/algebra/difference.rb +64 -0
  71. data/lib/veritas/optimizer/algebra/extension.rb +40 -0
  72. data/lib/veritas/optimizer/algebra/intersection.rb +64 -0
  73. data/lib/veritas/optimizer/algebra/join.rb +42 -0
  74. data/lib/veritas/optimizer/algebra/product.rb +68 -0
  75. data/lib/veritas/optimizer/algebra/projection.rb +172 -0
  76. data/lib/veritas/optimizer/algebra/rename.rb +370 -0
  77. data/lib/veritas/optimizer/algebra/restriction.rb +257 -0
  78. data/lib/veritas/optimizer/algebra/summarization.rb +40 -0
  79. data/lib/veritas/optimizer/algebra/union.rb +64 -0
  80. data/lib/veritas/optimizer/algebra.rb +10 -0
  81. data/lib/veritas/optimizer/logic/connective/binary.rb +252 -0
  82. data/lib/veritas/optimizer/logic/connective/conjunction.rb +120 -0
  83. data/lib/veritas/optimizer/logic/connective/disjunction.rb +120 -0
  84. data/lib/veritas/optimizer/logic/connective/negation.rb +69 -0
  85. data/lib/veritas/optimizer/logic/connective.rb +5 -0
  86. data/lib/veritas/optimizer/logic/predicate/comparable.rb +132 -0
  87. data/lib/veritas/optimizer/logic/predicate/enumerable.rb +139 -0
  88. data/lib/veritas/optimizer/logic/predicate/equality.rb +42 -0
  89. data/lib/veritas/optimizer/logic/predicate/exclusion.rb +51 -0
  90. data/lib/veritas/optimizer/logic/predicate/greater_than.rb +52 -0
  91. data/lib/veritas/optimizer/logic/predicate/greater_than_or_equal_to.rb +54 -0
  92. data/lib/veritas/optimizer/logic/predicate/inclusion.rb +51 -0
  93. data/lib/veritas/optimizer/logic/predicate/inequality.rb +42 -0
  94. data/lib/veritas/optimizer/logic/predicate/less_than.rb +52 -0
  95. data/lib/veritas/optimizer/logic/predicate/less_than_or_equal_to.rb +54 -0
  96. data/lib/veritas/optimizer/logic/predicate/match.rb +17 -0
  97. data/lib/veritas/optimizer/logic/predicate/no_match.rb +17 -0
  98. data/lib/veritas/optimizer/logic/predicate.rb +187 -0
  99. data/lib/veritas/optimizer/logic.rb +2 -0
  100. data/lib/veritas/optimizer/relation/materialized.rb +38 -0
  101. data/lib/veritas/optimizer/relation/operation/binary.rb +166 -0
  102. data/lib/veritas/optimizer/relation/operation/combine.rb +31 -0
  103. data/lib/veritas/optimizer/relation/operation/limit.rb +156 -0
  104. data/lib/veritas/optimizer/relation/operation/offset.rb +112 -0
  105. data/lib/veritas/optimizer/relation/operation/order.rb +94 -0
  106. data/lib/veritas/optimizer/relation/operation/reverse.rb +92 -0
  107. data/lib/veritas/optimizer/relation/operation/unary.rb +86 -0
  108. data/lib/veritas/optimizer/relation/operation.rb +8 -0
  109. data/lib/veritas/optimizer/relation.rb +2 -0
  110. data/lib/veritas/optimizer.rb +94 -0
  111. data/lib/veritas/relation/empty.rb +22 -0
  112. data/lib/veritas/relation/header.rb +267 -0
  113. data/lib/veritas/relation/materialized.rb +62 -0
  114. data/lib/veritas/relation/operation/binary.rb +77 -0
  115. data/lib/veritas/relation/operation/combine.rb +35 -0
  116. data/lib/veritas/relation/operation/limit.rb +190 -0
  117. data/lib/veritas/relation/operation/offset.rb +153 -0
  118. data/lib/veritas/relation/operation/order/direction.rb +209 -0
  119. data/lib/veritas/relation/operation/order/direction_set.rb +246 -0
  120. data/lib/veritas/relation/operation/order.rb +138 -0
  121. data/lib/veritas/relation/operation/reverse.rb +85 -0
  122. data/lib/veritas/relation/operation/set.rb +76 -0
  123. data/lib/veritas/relation/operation/unary.rb +25 -0
  124. data/lib/veritas/relation/operation.rb +10 -0
  125. data/lib/veritas/relation.rb +210 -0
  126. data/lib/veritas/support/abstract_class.rb +40 -0
  127. data/lib/veritas/support/aliasable.rb +29 -0
  128. data/lib/veritas/support/evaluator.rb +52 -0
  129. data/lib/veritas/support/immutable.rb +299 -0
  130. data/lib/veritas/support/operation/binary.rb +73 -0
  131. data/lib/veritas/support/operation/unary.rb +59 -0
  132. data/lib/veritas/support/optimizable.rb +51 -0
  133. data/lib/veritas/tuple.rb +181 -0
  134. data/lib/veritas/version.rb +3 -0
  135. data/lib/veritas.rb +54 -0
  136. data/spec/integration/veritas/algebra/difference/optimize_spec.rb +151 -0
  137. data/spec/integration/veritas/algebra/intersection/optimize_spec.rb +151 -0
  138. data/spec/integration/veritas/algebra/join/optimize_spec.rb +111 -0
  139. data/spec/integration/veritas/algebra/join_spec.rb +14 -0
  140. data/spec/integration/veritas/algebra/product/optimize_spec.rb +177 -0
  141. data/spec/integration/veritas/algebra/product_spec.rb +14 -0
  142. data/spec/integration/veritas/algebra/projection/optimize_spec.rb +238 -0
  143. data/spec/integration/veritas/algebra/projection_spec.rb +16 -0
  144. data/spec/integration/veritas/algebra/rename/optimize_spec.rb +441 -0
  145. data/spec/integration/veritas/algebra/restriction/optimize_spec.rb +301 -0
  146. data/spec/integration/veritas/algebra/union/optimize_spec.rb +193 -0
  147. data/spec/integration/veritas/logic/connective/conjunction/optimize_spec.rb +235 -0
  148. data/spec/integration/veritas/logic/connective/disjunction/optimize_spec.rb +236 -0
  149. data/spec/integration/veritas/logic/connective/negation/optimize_spec.rb +42 -0
  150. data/spec/integration/veritas/logic/expression/optimize_spec.rb +34 -0
  151. data/spec/integration/veritas/logic/predicate/equality/optimize_spec.rb +91 -0
  152. data/spec/integration/veritas/logic/predicate/exclusion/optimize_spec.rb +132 -0
  153. data/spec/integration/veritas/logic/predicate/greater_than/optimize_spec.rb +101 -0
  154. data/spec/integration/veritas/logic/predicate/greater_than_or_equal_to/optimize_spec.rb +101 -0
  155. data/spec/integration/veritas/logic/predicate/inclusion/optimize_spec.rb +132 -0
  156. data/spec/integration/veritas/logic/predicate/inequality/optimize_spec.rb +91 -0
  157. data/spec/integration/veritas/logic/predicate/less_than/optimize_spec.rb +101 -0
  158. data/spec/integration/veritas/logic/predicate/less_than_or_equal_to/optimize_spec.rb +101 -0
  159. data/spec/integration/veritas/relation/efficient_enumerable_spec.rb +56 -0
  160. data/spec/integration/veritas/relation/empty/optimize_spec.rb +12 -0
  161. data/spec/integration/veritas/relation/materialized/optimize_spec.rb +38 -0
  162. data/spec/integration/veritas/relation/operation/limit/optimize_spec.rb +141 -0
  163. data/spec/integration/veritas/relation/operation/offset/optimize_spec.rb +99 -0
  164. data/spec/integration/veritas/relation/operation/order/optimize_spec.rb +104 -0
  165. data/spec/integration/veritas/relation/operation/reverse/optimize_spec.rb +114 -0
  166. data/spec/integration/veritas/relation/optimize_spec.rb +30 -0
  167. data/spec/rcov.opts +6 -0
  168. data/spec/shared/idempotent_method_behavior.rb +5 -0
  169. data/spec/shared/logic_connective_binary_optimize_behavior.rb +100 -0
  170. data/spec/shared/optimize_method_behavior.rb +13 -0
  171. data/spec/spec.opts +3 -0
  172. data/spec/spec_helper.rb +14 -0
  173. data/spec/support/add_method_missing.rb +13 -0
  174. data/spec/unit/date/pred_spec.rb +15 -0
  175. data/spec/unit/range/overlaps_spec.rb +190 -0
  176. data/spec/unit/range/to_inclusive_spec.rb +29 -0
  177. data/spec/unit/time/pred_spec.rb +15 -0
  178. data/spec/unit/veritas/abstract_class/class_methods/new_spec.rb +18 -0
  179. data/spec/unit/veritas/abstract_class/fixtures/classes.rb +7 -0
  180. data/spec/unit/veritas/algebra/difference/each_spec.rb +30 -0
  181. data/spec/unit/veritas/algebra/difference/methods/difference_spec.rb +17 -0
  182. data/spec/unit/veritas/algebra/extension/class_methods/new_spec.rb +20 -0
  183. data/spec/unit/veritas/algebra/extension/each_spec.rb +17 -0
  184. data/spec/unit/veritas/algebra/extension/extensions_spec.rb +14 -0
  185. data/spec/unit/veritas/algebra/extension/header_spec.rb +16 -0
  186. data/spec/unit/veritas/algebra/extension/methods/extend_spec.rb +14 -0
  187. data/spec/unit/veritas/algebra/extension/operand_spec.rb +14 -0
  188. data/spec/unit/veritas/algebra/intersection/each_spec.rb +30 -0
  189. data/spec/unit/veritas/algebra/intersection/methods/intersect_spec.rb +17 -0
  190. data/spec/unit/veritas/algebra/join/class_methods/new_spec.rb +26 -0
  191. data/spec/unit/veritas/algebra/join/each_spec.rb +18 -0
  192. data/spec/unit/veritas/algebra/join/methods/join_spec.rb +46 -0
  193. data/spec/unit/veritas/algebra/product/class_methods/new_spec.rb +26 -0
  194. data/spec/unit/veritas/algebra/product/each_spec.rb +19 -0
  195. data/spec/unit/veritas/algebra/product/methods/product_spec.rb +12 -0
  196. data/spec/unit/veritas/algebra/projection/directions_spec.rb +29 -0
  197. data/spec/unit/veritas/algebra/projection/each_spec.rb +17 -0
  198. data/spec/unit/veritas/algebra/projection/header_spec.rb +15 -0
  199. data/spec/unit/veritas/algebra/projection/methods/project_spec.rb +13 -0
  200. data/spec/unit/veritas/algebra/projection/methods/remove_spec.rb +15 -0
  201. data/spec/unit/veritas/algebra/rename/aliases/class_methods/coerce_spec.rb +49 -0
  202. data/spec/unit/veritas/algebra/rename/aliases/each_spec.rb +17 -0
  203. data/spec/unit/veritas/algebra/rename/aliases/element_reference_spec.rb +22 -0
  204. data/spec/unit/veritas/algebra/rename/aliases/empty_spec.rb +21 -0
  205. data/spec/unit/veritas/algebra/rename/aliases/eql_spec.rb +50 -0
  206. data/spec/unit/veritas/algebra/rename/aliases/equal_value_spec.rb +50 -0
  207. data/spec/unit/veritas/algebra/rename/aliases/hash_spec.rb +16 -0
  208. data/spec/unit/veritas/algebra/rename/aliases/to_hash_spec.rb +27 -0
  209. data/spec/unit/veritas/algebra/rename/aliases/union_spec.rb +65 -0
  210. data/spec/unit/veritas/algebra/rename/aliases_spec.rb +12 -0
  211. data/spec/unit/veritas/algebra/rename/directions_spec.rb +29 -0
  212. data/spec/unit/veritas/algebra/rename/each_spec.rb +21 -0
  213. data/spec/unit/veritas/algebra/rename/eql_spec.rb +50 -0
  214. data/spec/unit/veritas/algebra/rename/header_spec.rb +15 -0
  215. data/spec/unit/veritas/algebra/rename/methods/rename_spec.rb +12 -0
  216. data/spec/unit/veritas/algebra/restriction/each_spec.rb +16 -0
  217. data/spec/unit/veritas/algebra/restriction/eql_spec.rb +49 -0
  218. data/spec/unit/veritas/algebra/restriction/methods/restrict_spec.rb +38 -0
  219. data/spec/unit/veritas/algebra/restriction/predicate_spec.rb +14 -0
  220. data/spec/unit/veritas/algebra/summarization/class_methods/summarize_spec.rb +26 -0
  221. data/spec/unit/veritas/algebra/summarization/each_spec.rb +17 -0
  222. data/spec/unit/veritas/algebra/summarization/header_spec.rb +16 -0
  223. data/spec/unit/veritas/algebra/summarization/methods/summarize_spec.rb +30 -0
  224. data/spec/unit/veritas/algebra/summarization/summarize_by_spec.rb +14 -0
  225. data/spec/unit/veritas/algebra/summarization/summarizers_spec.rb +14 -0
  226. data/spec/unit/veritas/algebra/union/each_spec.rb +30 -0
  227. data/spec/unit/veritas/algebra/union/methods/union_spec.rb +17 -0
  228. data/spec/unit/veritas/aliasable/fixtures/classes.rb +7 -0
  229. data/spec/unit/veritas/aliasable/inheritable_alias_spec.rb +48 -0
  230. data/spec/unit/veritas/attribute/boolean/class_methods/primitive_spec.rb +7 -0
  231. data/spec/unit/veritas/attribute/boolean/valid_value_spec.rb +25 -0
  232. data/spec/unit/veritas/attribute/call_spec.rb +11 -0
  233. data/spec/unit/veritas/attribute/class/class_methods/primitive_spec.rb +7 -0
  234. data/spec/unit/veritas/attribute/class_methods/coerce_spec.rb +29 -0
  235. data/spec/unit/veritas/attribute/class_methods/name_from_spec.rb +29 -0
  236. data/spec/unit/veritas/attribute/class_methods/new_spec.rb +33 -0
  237. data/spec/unit/veritas/attribute/comparable/comparable_spec.rb +49 -0
  238. data/spec/unit/veritas/attribute/comparable/fixtures/classes.rb +5 -0
  239. data/spec/unit/veritas/attribute/date/class_methods/primitive_spec.rb +7 -0
  240. data/spec/unit/veritas/attribute/date/range_spec.rb +9 -0
  241. data/spec/unit/veritas/attribute/date_time/class_methods/primitive_spec.rb +7 -0
  242. data/spec/unit/veritas/attribute/date_time/range_spec.rb +9 -0
  243. data/spec/unit/veritas/attribute/decimal/class_methods/primitive_spec.rb +7 -0
  244. data/spec/unit/veritas/attribute/eql_spec.rb +48 -0
  245. data/spec/unit/veritas/attribute/equal_value_spec.rb +48 -0
  246. data/spec/unit/veritas/attribute/float/class_methods/primitive_spec.rb +7 -0
  247. data/spec/unit/veritas/attribute/hash_spec.rb +15 -0
  248. data/spec/unit/veritas/attribute/inspect_spec.rb +11 -0
  249. data/spec/unit/veritas/attribute/integer/class_methods/primitive_spec.rb +7 -0
  250. data/spec/unit/veritas/attribute/joinable_spec.rb +47 -0
  251. data/spec/unit/veritas/attribute/name_spec.rb +10 -0
  252. data/spec/unit/veritas/attribute/numeric/class_methods/primitive_spec.rb +7 -0
  253. data/spec/unit/veritas/attribute/numeric/joinable_spec.rb +37 -0
  254. data/spec/unit/veritas/attribute/numeric/size_spec.rb +19 -0
  255. data/spec/unit/veritas/attribute/numeric/valid_value_spec.rb +33 -0
  256. data/spec/unit/veritas/attribute/object/class_methods/primitive_spec.rb +7 -0
  257. data/spec/unit/veritas/attribute/options_spec.rb +32 -0
  258. data/spec/unit/veritas/attribute/orderable/asc_spec.rb +10 -0
  259. data/spec/unit/veritas/attribute/orderable/desc_spec.rb +10 -0
  260. data/spec/unit/veritas/attribute/orderable/fixtures/classes.rb +5 -0
  261. data/spec/unit/veritas/attribute/rename_spec.rb +25 -0
  262. data/spec/unit/veritas/attribute/required_spec.rb +23 -0
  263. data/spec/unit/veritas/attribute/string/class_methods/primitive_spec.rb +7 -0
  264. data/spec/unit/veritas/attribute/string/joinable_spec.rb +37 -0
  265. data/spec/unit/veritas/attribute/string/length_spec.rb +19 -0
  266. data/spec/unit/veritas/attribute/string/valid_value_spec.rb +33 -0
  267. data/spec/unit/veritas/attribute/time/class_methods/primitive_spec.rb +7 -0
  268. data/spec/unit/veritas/attribute/time/range_spec.rb +9 -0
  269. data/spec/unit/veritas/attribute/valid_primitive_spec.rb +19 -0
  270. data/spec/unit/veritas/attribute/valid_value_spec.rb +35 -0
  271. data/spec/unit/veritas/evaluator/expression/add_spec.rb +22 -0
  272. data/spec/unit/veritas/evaluator/expression/expressions_spec.rb +14 -0
  273. data/spec/unit/veritas/immutable/class_methods/freeze_object_spec.rb +45 -0
  274. data/spec/unit/veritas/immutable/class_methods/new_spec.rb +12 -0
  275. data/spec/unit/veritas/immutable/dup_spec.rb +11 -0
  276. data/spec/unit/veritas/immutable/fixtures/classes.rb +26 -0
  277. data/spec/unit/veritas/immutable/memoize_methods/freeze_spec.rb +46 -0
  278. data/spec/unit/veritas/immutable/memoize_methods/memoize_spec.rb +20 -0
  279. data/spec/unit/veritas/immutable/memoize_methods/memoized_spec.rb +27 -0
  280. data/spec/unit/veritas/immutable/memoize_spec.rb +13 -0
  281. data/spec/unit/veritas/immutable/memory/element_reference_spec.rb +24 -0
  282. data/spec/unit/veritas/immutable/memory/element_set_spec.rb +17 -0
  283. data/spec/unit/veritas/immutable/module_methods/included_spec.rb +14 -0
  284. data/spec/unit/veritas/immutable/module_methods/memoize_spec.rb +78 -0
  285. data/spec/unit/veritas/logic/connective/binary/call_spec.rb +20 -0
  286. data/spec/unit/veritas/logic/connective/binary/fixtures/classes.rb +8 -0
  287. data/spec/unit/veritas/logic/connective/binary/rename_spec.rb +41 -0
  288. data/spec/unit/veritas/logic/connective/conjunction/class_methods/call_spec.rb +33 -0
  289. data/spec/unit/veritas/logic/connective/conjunction/inspect_spec.rb +12 -0
  290. data/spec/unit/veritas/logic/connective/conjunction/methods/and_spec.rb +16 -0
  291. data/spec/unit/veritas/logic/connective/conjunction/methods/fixtures/classes.rb +5 -0
  292. data/spec/unit/veritas/logic/connective/disjunction/class_methods/call_spec.rb +33 -0
  293. data/spec/unit/veritas/logic/connective/disjunction/inspect_spec.rb +12 -0
  294. data/spec/unit/veritas/logic/connective/disjunction/methods/fixtures/classes.rb +5 -0
  295. data/spec/unit/veritas/logic/connective/disjunction/methods/or_spec.rb +16 -0
  296. data/spec/unit/veritas/logic/connective/inspect_spec.rb +10 -0
  297. data/spec/unit/veritas/logic/connective/inverse_spec.rb +26 -0
  298. data/spec/unit/veritas/logic/connective/negation/class_methods/call_spec.rb +19 -0
  299. data/spec/unit/veritas/logic/connective/negation/inspect_spec.rb +12 -0
  300. data/spec/unit/veritas/logic/connective/negation/inverse_spec.rb +20 -0
  301. data/spec/unit/veritas/logic/connective/negation/methods/fixtures/classes.rb +6 -0
  302. data/spec/unit/veritas/logic/connective/negation/methods/not_spec.rb +23 -0
  303. data/spec/unit/veritas/logic/connective/unary/call_spec.rb +19 -0
  304. data/spec/unit/veritas/logic/connective/unary/fixtures/classes.rb +8 -0
  305. data/spec/unit/veritas/logic/connective/unary/rename_spec.rb +25 -0
  306. data/spec/unit/veritas/logic/expression/class_methods/call_spec.rb +15 -0
  307. data/spec/unit/veritas/logic/expression/eql_spec.rb +11 -0
  308. data/spec/unit/veritas/logic/expression/equal_value_spec.rb +65 -0
  309. data/spec/unit/veritas/logic/expression/fixtures/classes.rb +4 -0
  310. data/spec/unit/veritas/logic/expression/hash_spec.rb +10 -0
  311. data/spec/unit/veritas/logic/expression/inspect_spec.rb +10 -0
  312. data/spec/unit/veritas/logic/expression/inverse_spec.rb +15 -0
  313. data/spec/unit/veritas/logic/expression/rename_spec.rb +13 -0
  314. data/spec/unit/veritas/logic/predicate/call_spec.rb +16 -0
  315. data/spec/unit/veritas/logic/predicate/class_methods/call_spec.rb +7 -0
  316. data/spec/unit/veritas/logic/predicate/class_methods/extract_value_spec.rb +20 -0
  317. data/spec/unit/veritas/logic/predicate/comparable/class_methods/call_spec.rb +8 -0
  318. data/spec/unit/veritas/logic/predicate/comparable/fixtures/classes.rb +21 -0
  319. data/spec/unit/veritas/logic/predicate/comparable/inspect_spec.rb +11 -0
  320. data/spec/unit/veritas/logic/predicate/eql_spec.rb +50 -0
  321. data/spec/unit/veritas/logic/predicate/equality/class_methods/call_spec.rb +19 -0
  322. data/spec/unit/veritas/logic/predicate/equality/class_methods/inverse_spec.rb +7 -0
  323. data/spec/unit/veritas/logic/predicate/equality/class_methods/operation_spec.rb +7 -0
  324. data/spec/unit/veritas/logic/predicate/equality/class_methods/reverse_spec.rb +7 -0
  325. data/spec/unit/veritas/logic/predicate/equality/inspect_spec.rb +10 -0
  326. data/spec/unit/veritas/logic/predicate/equality/inverse_spec.rb +16 -0
  327. data/spec/unit/veritas/logic/predicate/equality/methods/eq_spec.rb +10 -0
  328. data/spec/unit/veritas/logic/predicate/equality/methods/fixtures/classes.rb +5 -0
  329. data/spec/unit/veritas/logic/predicate/exclusion/class_methods/call_spec.rb +19 -0
  330. data/spec/unit/veritas/logic/predicate/exclusion/class_methods/inverse_spec.rb +7 -0
  331. data/spec/unit/veritas/logic/predicate/exclusion/inspect_spec.rb +13 -0
  332. data/spec/unit/veritas/logic/predicate/exclusion/inverse_spec.rb +16 -0
  333. data/spec/unit/veritas/logic/predicate/exclusion/methods/exclude_spec.rb +11 -0
  334. data/spec/unit/veritas/logic/predicate/exclusion/methods/fixtures/classes.rb +5 -0
  335. data/spec/unit/veritas/logic/predicate/fixtures/classes.rb +12 -0
  336. data/spec/unit/veritas/logic/predicate/greater_than/class_methods/call_spec.rb +26 -0
  337. data/spec/unit/veritas/logic/predicate/greater_than/class_methods/inverse_spec.rb +7 -0
  338. data/spec/unit/veritas/logic/predicate/greater_than/class_methods/operation_spec.rb +7 -0
  339. data/spec/unit/veritas/logic/predicate/greater_than/class_methods/reverse_spec.rb +7 -0
  340. data/spec/unit/veritas/logic/predicate/greater_than/inspect_spec.rb +10 -0
  341. data/spec/unit/veritas/logic/predicate/greater_than/inverse_spec.rb +16 -0
  342. data/spec/unit/veritas/logic/predicate/greater_than/methods/fixtures/classes.rb +5 -0
  343. data/spec/unit/veritas/logic/predicate/greater_than/methods/gt_spec.rb +10 -0
  344. data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/class_methods/call_spec.rb +26 -0
  345. data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/class_methods/inverse_spec.rb +7 -0
  346. data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/class_methods/operation_spec.rb +7 -0
  347. data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/class_methods/reverse_spec.rb +7 -0
  348. data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/inspect_spec.rb +10 -0
  349. data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/inverse_spec.rb +16 -0
  350. data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/methods/fixtures/classes.rb +5 -0
  351. data/spec/unit/veritas/logic/predicate/greater_than_or_equal_to/methods/gte_spec.rb +10 -0
  352. data/spec/unit/veritas/logic/predicate/hash_spec.rb +15 -0
  353. data/spec/unit/veritas/logic/predicate/inclusion/class_methods/call_spec.rb +19 -0
  354. data/spec/unit/veritas/logic/predicate/inclusion/class_methods/inverse_spec.rb +7 -0
  355. data/spec/unit/veritas/logic/predicate/inclusion/inspect_spec.rb +13 -0
  356. data/spec/unit/veritas/logic/predicate/inclusion/inverse_spec.rb +16 -0
  357. data/spec/unit/veritas/logic/predicate/inclusion/methods/fixtures/classes.rb +5 -0
  358. data/spec/unit/veritas/logic/predicate/inclusion/methods/include_spec.rb +11 -0
  359. data/spec/unit/veritas/logic/predicate/inequality/class_methods/call_spec.rb +19 -0
  360. data/spec/unit/veritas/logic/predicate/inequality/class_methods/inverse_spec.rb +7 -0
  361. data/spec/unit/veritas/logic/predicate/inequality/class_methods/operation_spec.rb +7 -0
  362. data/spec/unit/veritas/logic/predicate/inequality/class_methods/reverse_spec.rb +7 -0
  363. data/spec/unit/veritas/logic/predicate/inequality/inspect_spec.rb +10 -0
  364. data/spec/unit/veritas/logic/predicate/inequality/inverse_spec.rb +16 -0
  365. data/spec/unit/veritas/logic/predicate/inequality/methods/fixtures/classes.rb +5 -0
  366. data/spec/unit/veritas/logic/predicate/inequality/methods/ne_spec.rb +10 -0
  367. data/spec/unit/veritas/logic/predicate/inspect_spec.rb +11 -0
  368. data/spec/unit/veritas/logic/predicate/inverse_spec.rb +31 -0
  369. data/spec/unit/veritas/logic/predicate/less_than/class_methods/call_spec.rb +26 -0
  370. data/spec/unit/veritas/logic/predicate/less_than/class_methods/inverse_spec.rb +7 -0
  371. data/spec/unit/veritas/logic/predicate/less_than/class_methods/operation_spec.rb +7 -0
  372. data/spec/unit/veritas/logic/predicate/less_than/class_methods/reverse_spec.rb +7 -0
  373. data/spec/unit/veritas/logic/predicate/less_than/inspect_spec.rb +10 -0
  374. data/spec/unit/veritas/logic/predicate/less_than/inverse_spec.rb +16 -0
  375. data/spec/unit/veritas/logic/predicate/less_than/methods/fixtures/classes.rb +5 -0
  376. data/spec/unit/veritas/logic/predicate/less_than/methods/lt_spec.rb +10 -0
  377. data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/class_methods/call_spec.rb +26 -0
  378. data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/class_methods/inverse_spec.rb +7 -0
  379. data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/class_methods/operation_spec.rb +7 -0
  380. data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/class_methods/reverse_spec.rb +7 -0
  381. data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/inspect_spec.rb +10 -0
  382. data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/inverse_spec.rb +16 -0
  383. data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/methods/fixtures/classes.rb +5 -0
  384. data/spec/unit/veritas/logic/predicate/less_than_or_equal_to/methods/lte_spec.rb +10 -0
  385. data/spec/unit/veritas/logic/predicate/match/class_methods/call_spec.rb +19 -0
  386. data/spec/unit/veritas/logic/predicate/match/class_methods/inverse_spec.rb +7 -0
  387. data/spec/unit/veritas/logic/predicate/match/class_methods/operation_spec.rb +7 -0
  388. data/spec/unit/veritas/logic/predicate/match/inspect_spec.rb +10 -0
  389. data/spec/unit/veritas/logic/predicate/match/inverse_spec.rb +16 -0
  390. data/spec/unit/veritas/logic/predicate/match/methods/fixtures/classes.rb +5 -0
  391. data/spec/unit/veritas/logic/predicate/match/methods/match_spec.rb +10 -0
  392. data/spec/unit/veritas/logic/predicate/no_match/class_methods/call_spec.rb +19 -0
  393. data/spec/unit/veritas/logic/predicate/no_match/class_methods/inverse_spec.rb +7 -0
  394. data/spec/unit/veritas/logic/predicate/no_match/class_methods/operation_spec.rb +7 -0
  395. data/spec/unit/veritas/logic/predicate/no_match/inspect_spec.rb +10 -0
  396. data/spec/unit/veritas/logic/predicate/no_match/inverse_spec.rb +16 -0
  397. data/spec/unit/veritas/logic/predicate/no_match/methods/fixtures/classes.rb +5 -0
  398. data/spec/unit/veritas/logic/predicate/no_match/methods/no_match_spec.rb +10 -0
  399. data/spec/unit/veritas/logic/predicate/rename_spec.rb +43 -0
  400. data/spec/unit/veritas/logic/proposition/call_spec.rb +14 -0
  401. data/spec/unit/veritas/logic/proposition/class_methods/call_spec.rb +7 -0
  402. data/spec/unit/veritas/logic/proposition/class_methods/new_spec.rb +23 -0
  403. data/spec/unit/veritas/logic/proposition/eql_spec.rb +28 -0
  404. data/spec/unit/veritas/logic/proposition/false/and_spec.rb +10 -0
  405. data/spec/unit/veritas/logic/proposition/false/class_methods/call_spec.rb +7 -0
  406. data/spec/unit/veritas/logic/proposition/false/class_methods/inverse_spec.rb +7 -0
  407. data/spec/unit/veritas/logic/proposition/false/inspect_spec.rb +9 -0
  408. data/spec/unit/veritas/logic/proposition/false/inverse_spec.rb +15 -0
  409. data/spec/unit/veritas/logic/proposition/false/or_spec.rb +10 -0
  410. data/spec/unit/veritas/logic/proposition/fixtures/classes.rb +8 -0
  411. data/spec/unit/veritas/logic/proposition/hash_spec.rb +19 -0
  412. data/spec/unit/veritas/logic/proposition/inspect_spec.rb +10 -0
  413. data/spec/unit/veritas/logic/proposition/inverse_spec.rb +27 -0
  414. data/spec/unit/veritas/logic/proposition/true/and_spec.rb +10 -0
  415. data/spec/unit/veritas/logic/proposition/true/class_methods/call_spec.rb +7 -0
  416. data/spec/unit/veritas/logic/proposition/true/class_methods/inverse_spec.rb +7 -0
  417. data/spec/unit/veritas/logic/proposition/true/inspect_spec.rb +9 -0
  418. data/spec/unit/veritas/logic/proposition/true/inverse_spec.rb +15 -0
  419. data/spec/unit/veritas/logic/proposition/true/or_spec.rb +10 -0
  420. data/spec/unit/veritas/operation/binary/eql_spec.rb +52 -0
  421. data/spec/unit/veritas/operation/binary/hash_spec.rb +16 -0
  422. data/spec/unit/veritas/operation/binary/left_spec.rb +12 -0
  423. data/spec/unit/veritas/operation/binary/right_spec.rb +12 -0
  424. data/spec/unit/veritas/operation/unary/eql_spec.rb +51 -0
  425. data/spec/unit/veritas/operation/unary/hash_spec.rb +15 -0
  426. data/spec/unit/veritas/operation/unary/operand_spec.rb +11 -0
  427. data/spec/unit/veritas/optimizable/class_methods/optimizer_spec.rb +34 -0
  428. data/spec/unit/veritas/optimizable/optimize_spec.rb +36 -0
  429. data/spec/unit/veritas/optimizer/algebra/difference/empty_left/optimize_spec.rb +18 -0
  430. data/spec/unit/veritas/optimizer/algebra/difference/empty_right/optimize_spec.rb +18 -0
  431. data/spec/unit/veritas/optimizer/algebra/difference/equal_operands/optimize_spec.rb +20 -0
  432. data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimizable_spec.rb +28 -0
  433. data/spec/unit/veritas/optimizer/algebra/extension/unoptimized_operand/optimize_spec.rb +24 -0
  434. data/spec/unit/veritas/optimizer/algebra/intersection/empty_left/optimize_spec.rb +18 -0
  435. data/spec/unit/veritas/optimizer/algebra/intersection/empty_right/optimize_spec.rb +18 -0
  436. data/spec/unit/veritas/optimizer/algebra/intersection/equal_operands/optimize_spec.rb +18 -0
  437. data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimizable_spec.rb +28 -0
  438. data/spec/unit/veritas/optimizer/algebra/join/equal_headers/optimize_spec.rb +22 -0
  439. data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimizable_spec.rb +26 -0
  440. data/spec/unit/veritas/optimizer/algebra/product/table_dee_left/optimize_spec.rb +17 -0
  441. data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimizable_spec.rb +26 -0
  442. data/spec/unit/veritas/optimizer/algebra/product/table_dee_right/optimize_spec.rb +17 -0
  443. data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimizable_spec.rb +26 -0
  444. data/spec/unit/veritas/optimizer/algebra/projection/empty_operand/optimize_spec.rb +17 -0
  445. data/spec/unit/veritas/optimizer/algebra/projection/header_spec.rb +17 -0
  446. data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimizable_spec.rb +27 -0
  447. data/spec/unit/veritas/optimizer/algebra/projection/projection_operand/optimize_spec.rb +17 -0
  448. data/spec/unit/veritas/optimizer/algebra/projection/set_operand/optimizable_spec.rb +28 -0
  449. data/spec/unit/veritas/optimizer/algebra/projection/set_operand/optimize_spec.rb +39 -0
  450. data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimizable_spec.rb +27 -0
  451. data/spec/unit/veritas/optimizer/algebra/projection/unchanged_header/optimize_spec.rb +17 -0
  452. data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimizable_spec.rb +27 -0
  453. data/spec/unit/veritas/optimizer/algebra/projection/unoptimized_operand/optimize_spec.rb +17 -0
  454. data/spec/unit/veritas/optimizer/algebra/rename/aliases_spec.rb +27 -0
  455. data/spec/unit/veritas/optimizer/algebra/rename/class_methods/union_aliases_spec.rb +25 -0
  456. data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimizable_spec.rb +26 -0
  457. data/spec/unit/veritas/optimizer/algebra/rename/empty_operand/optimize_spec.rb +19 -0
  458. data/spec/unit/veritas/optimizer/algebra/rename/header_spec.rb +18 -0
  459. data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimizable_spec.rb +27 -0
  460. data/spec/unit/veritas/optimizer/algebra/rename/limit_operand/optimize_spec.rb +18 -0
  461. data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimizable_spec.rb +27 -0
  462. data/spec/unit/veritas/optimizer/algebra/rename/offset_operand/optimize_spec.rb +18 -0
  463. data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimizable_spec.rb +27 -0
  464. data/spec/unit/veritas/optimizer/algebra/rename/order_operand/optimize_spec.rb +36 -0
  465. data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimizable_spec.rb +27 -0
  466. data/spec/unit/veritas/optimizer/algebra/rename/projection_operand/optimize_spec.rb +18 -0
  467. data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_any_aliases/optimizable_spec.rb +36 -0
  468. data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_any_aliases/optimize_spec.rb +18 -0
  469. data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimizable_spec.rb +36 -0
  470. data/spec/unit/veritas/optimizer/algebra/rename/rename_operand_and_empty_aliases/optimize_spec.rb +18 -0
  471. data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimizable_spec.rb +28 -0
  472. data/spec/unit/veritas/optimizer/algebra/rename/restriction_operand/optimize_spec.rb +19 -0
  473. data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimizable_spec.rb +26 -0
  474. data/spec/unit/veritas/optimizer/algebra/rename/reverse_operand/optimize_spec.rb +37 -0
  475. data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimizable_spec.rb +28 -0
  476. data/spec/unit/veritas/optimizer/algebra/rename/set_operand/optimize_spec.rb +23 -0
  477. data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimizable_spec.rb +43 -0
  478. data/spec/unit/veritas/optimizer/algebra/rename/unoptimized_operand/optimize_spec.rb +20 -0
  479. data/spec/unit/veritas/optimizer/algebra/restriction/class_methods/optimize_predicate_spec.rb +27 -0
  480. data/spec/unit/veritas/optimizer/algebra/restriction/false_predicate/optimizable_spec.rb +27 -0
  481. data/spec/unit/veritas/optimizer/algebra/restriction/false_predicate/optimize_spec.rb +20 -0
  482. data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimizable_spec.rb +27 -0
  483. data/spec/unit/veritas/optimizer/algebra/restriction/order_operand/optimize_spec.rb +31 -0
  484. data/spec/unit/veritas/optimizer/algebra/restriction/predicate_spec.rb +17 -0
  485. data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimizable_spec.rb +29 -0
  486. data/spec/unit/veritas/optimizer/algebra/restriction/restriction_operand/optimize_spec.rb +24 -0
  487. data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimizable_spec.rb +27 -0
  488. data/spec/unit/veritas/optimizer/algebra/restriction/reverse_operand/optimize_spec.rb +31 -0
  489. data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimizable_spec.rb +29 -0
  490. data/spec/unit/veritas/optimizer/algebra/restriction/set_operand/optimize_spec.rb +24 -0
  491. data/spec/unit/veritas/optimizer/algebra/restriction/true_predicate/optimizable_spec.rb +26 -0
  492. data/spec/unit/veritas/optimizer/algebra/restriction/true_predicate/optimize_spec.rb +18 -0
  493. data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimizable_spec.rb +43 -0
  494. data/spec/unit/veritas/optimizer/algebra/restriction/unoptimized_operand/optimize_spec.rb +21 -0
  495. data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimizable_spec.rb +28 -0
  496. data/spec/unit/veritas/optimizer/algebra/summarization/unoptimized_operand/optimize_spec.rb +24 -0
  497. data/spec/unit/veritas/optimizer/algebra/union/empty_left/optimize_spec.rb +18 -0
  498. data/spec/unit/veritas/optimizer/algebra/union/empty_right/optimize_spec.rb +18 -0
  499. data/spec/unit/veritas/optimizer/algebra/union/equal_operands/optimize_spec.rb +18 -0
  500. data/spec/unit/veritas/optimizer/class_methods/chain_spec.rb +55 -0
  501. data/spec/unit/veritas/optimizer/logic/connective/binary/equal_operands/optimizable_spec.rb +28 -0
  502. data/spec/unit/veritas/optimizer/logic/connective/binary/equal_operands/optimize_spec.rb +18 -0
  503. data/spec/unit/veritas/optimizer/logic/connective/binary/left_spec.rb +15 -0
  504. data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_left_operand/optimizable_spec.rb +27 -0
  505. data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_left_operand/optimize_spec.rb +18 -0
  506. data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_right_operand/optimizable_spec.rb +27 -0
  507. data/spec/unit/veritas/optimizer/logic/connective/binary/redundant_right_operand/optimize_spec.rb +18 -0
  508. data/spec/unit/veritas/optimizer/logic/connective/binary/right_spec.rb +15 -0
  509. data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimizable_spec.rb +35 -0
  510. data/spec/unit/veritas/optimizer/logic/connective/binary/unoptimized_operand/optimize_spec.rb +18 -0
  511. data/spec/unit/veritas/optimizer/logic/connective/conjunction/always_false/optimizable_spec.rb +42 -0
  512. data/spec/unit/veritas/optimizer/logic/connective/conjunction/always_false/optimize_spec.rb +18 -0
  513. data/spec/unit/veritas/optimizer/logic/connective/conjunction/optimizable_to_exclusion/optimizable_spec.rb +28 -0
  514. data/spec/unit/veritas/optimizer/logic/connective/conjunction/optimizable_to_exclusion/optimize_spec.rb +30 -0
  515. data/spec/unit/veritas/optimizer/logic/connective/conjunction/true_left_operand/optimizable_spec.rb +28 -0
  516. data/spec/unit/veritas/optimizer/logic/connective/conjunction/true_left_operand/optimize_spec.rb +18 -0
  517. data/spec/unit/veritas/optimizer/logic/connective/conjunction/true_right_operand/optimizable_spec.rb +28 -0
  518. data/spec/unit/veritas/optimizer/logic/connective/conjunction/true_right_operand/optimize_spec.rb +18 -0
  519. data/spec/unit/veritas/optimizer/logic/connective/disjunction/always_true/optimizable_spec.rb +42 -0
  520. data/spec/unit/veritas/optimizer/logic/connective/disjunction/always_true/optimize_spec.rb +18 -0
  521. data/spec/unit/veritas/optimizer/logic/connective/disjunction/false_left_operand/optimizable_spec.rb +28 -0
  522. data/spec/unit/veritas/optimizer/logic/connective/disjunction/false_left_operand/optimize_spec.rb +18 -0
  523. data/spec/unit/veritas/optimizer/logic/connective/disjunction/false_right_operand/optimizable_spec.rb +28 -0
  524. data/spec/unit/veritas/optimizer/logic/connective/disjunction/false_right_operand/optimize_spec.rb +18 -0
  525. data/spec/unit/veritas/optimizer/logic/connective/disjunction/optimizable_to_inclusion/optimizable_spec.rb +28 -0
  526. data/spec/unit/veritas/optimizer/logic/connective/disjunction/optimizable_to_inclusion/optimize_spec.rb +30 -0
  527. data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimizable_spec.rb +27 -0
  528. data/spec/unit/veritas/optimizer/logic/connective/negation/invertible_operand/optimize_spec.rb +17 -0
  529. data/spec/unit/veritas/optimizer/logic/connective/negation/operand_spec.rb +13 -0
  530. data/spec/unit/veritas/optimizer/logic/predicate/always_false/optimize_spec.rb +16 -0
  531. data/spec/unit/veritas/optimizer/logic/predicate/always_true/optimize_spec.rb +16 -0
  532. data/spec/unit/veritas/optimizer/logic/predicate/class_methods/optimize_operand_spec.rb +20 -0
  533. data/spec/unit/veritas/optimizer/logic/predicate/comparable/never_comparable/optimizable_spec.rb +58 -0
  534. data/spec/unit/veritas/optimizer/logic/predicate/comparable/never_equivalent/optimizable_spec.rb +58 -0
  535. data/spec/unit/veritas/optimizer/logic/predicate/comparable/normalizable_operands/optimizable_spec.rb +42 -0
  536. data/spec/unit/veritas/optimizer/logic/predicate/comparable/normalizable_operands/optimize_spec.rb +16 -0
  537. data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimizable_spec.rb +30 -0
  538. data/spec/unit/veritas/optimizer/logic/predicate/constant_operands/optimize_spec.rb +11 -0
  539. data/spec/unit/veritas/optimizer/logic/predicate/enumerable/empty_right_operand/optimizable_spec.rb +76 -0
  540. data/spec/unit/veritas/optimizer/logic/predicate/enumerable/one_right_operand/optimizable_spec.rb +76 -0
  541. data/spec/unit/veritas/optimizer/logic/predicate/enumerable/unoptimized_operand/optimizable_spec.rb +50 -0
  542. data/spec/unit/veritas/optimizer/logic/predicate/enumerable/unoptimized_operand/optimize_spec.rb +38 -0
  543. data/spec/unit/veritas/optimizer/logic/predicate/equality/always_true/optimizable_spec.rb +28 -0
  544. data/spec/unit/veritas/optimizer/logic/predicate/exclusion/empty_right_operand/optimize_spec.rb +44 -0
  545. data/spec/unit/veritas/optimizer/logic/predicate/exclusion/one_right_operand/optimize_spec.rb +44 -0
  546. data/spec/unit/veritas/optimizer/logic/predicate/greater_than/always_false/optimizable_spec.rb +42 -0
  547. data/spec/unit/veritas/optimizer/logic/predicate/greater_than/always_true/optimizable_spec.rb +27 -0
  548. data/spec/unit/veritas/optimizer/logic/predicate/greater_than_or_equal_to/always_false/optimizable_spec.rb +42 -0
  549. data/spec/unit/veritas/optimizer/logic/predicate/greater_than_or_equal_to/always_true/optimizable_spec.rb +42 -0
  550. data/spec/unit/veritas/optimizer/logic/predicate/inclusion/empty_right_operand/optimize_spec.rb +44 -0
  551. data/spec/unit/veritas/optimizer/logic/predicate/inclusion/one_right_operand/optimize_spec.rb +44 -0
  552. data/spec/unit/veritas/optimizer/logic/predicate/inequality/always_false/optimizable_spec.rb +28 -0
  553. data/spec/unit/veritas/optimizer/logic/predicate/left_spec.rb +13 -0
  554. data/spec/unit/veritas/optimizer/logic/predicate/less_than/always_false/optimizable_spec.rb +42 -0
  555. data/spec/unit/veritas/optimizer/logic/predicate/less_than/always_true/optimizable_spec.rb +27 -0
  556. data/spec/unit/veritas/optimizer/logic/predicate/less_than_or_equal_to/always_false/optimizable_spec.rb +42 -0
  557. data/spec/unit/veritas/optimizer/logic/predicate/less_than_or_equal_to/always_true/optimizable_spec.rb +42 -0
  558. data/spec/unit/veritas/optimizer/logic/predicate/right_spec.rb +13 -0
  559. data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/attribute_spec.rb +19 -0
  560. data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/constant_spec.rb +19 -0
  561. data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/max_spec.rb +19 -0
  562. data/spec/unit/veritas/optimizer/logic/predicate/util/class_methods/min_spec.rb +19 -0
  563. data/spec/unit/veritas/optimizer/operation_spec.rb +11 -0
  564. data/spec/unit/veritas/optimizer/optimizable_spec.rb +15 -0
  565. data/spec/unit/veritas/optimizer/optimize_spec.rb +15 -0
  566. data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimizable_spec.rb +21 -0
  567. data/spec/unit/veritas/optimizer/relation/materialized/empty_operand/optimize_spec.rb +14 -0
  568. data/spec/unit/veritas/optimizer/relation/operation/binary/empty_left/optimizable_spec.rb +30 -0
  569. data/spec/unit/veritas/optimizer/relation/operation/binary/empty_right/optimizable_spec.rb +30 -0
  570. data/spec/unit/veritas/optimizer/relation/operation/binary/equal_operands/optimizable_spec.rb +34 -0
  571. data/spec/unit/veritas/optimizer/relation/operation/binary/left_spec.rb +18 -0
  572. data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimizable_spec.rb +36 -0
  573. data/spec/unit/veritas/optimizer/relation/operation/binary/materialized_operand/optimize_spec.rb +17 -0
  574. data/spec/unit/veritas/optimizer/relation/operation/binary/right_spec.rb +18 -0
  575. data/spec/unit/veritas/optimizer/relation/operation/binary/unoptimized_operand/optimizable_spec.rb +39 -0
  576. data/spec/unit/veritas/optimizer/relation/operation/binary/unoptimized_operand/optimize_spec.rb +15 -0
  577. data/spec/unit/veritas/optimizer/relation/operation/combine/optimize_spec.rb +15 -0
  578. data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimizable_spec.rb +32 -0
  579. data/spec/unit/veritas/optimizer/relation/operation/limit/equal_limit_operand/optimize_spec.rb +18 -0
  580. data/spec/unit/veritas/optimizer/relation/operation/limit/inequal_limit_operand/optimizable_spec.rb +32 -0
  581. data/spec/unit/veritas/optimizer/relation/operation/limit/inequal_limit_operand/optimize_spec.rb +27 -0
  582. data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimizable_spec.rb +27 -0
  583. data/spec/unit/veritas/optimizer/relation/operation/limit/unoptimized_operand/optimize_spec.rb +19 -0
  584. data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimizable_spec.rb +26 -0
  585. data/spec/unit/veritas/optimizer/relation/operation/limit/zero_limit/optimize_spec.rb +19 -0
  586. data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimizable_spec.rb +26 -0
  587. data/spec/unit/veritas/optimizer/relation/operation/offset/offset_operand/optimize_spec.rb +18 -0
  588. data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimizable_spec.rb +27 -0
  589. data/spec/unit/veritas/optimizer/relation/operation/offset/unoptimized_operand/optimize_spec.rb +19 -0
  590. data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimizable_spec.rb +26 -0
  591. data/spec/unit/veritas/optimizer/relation/operation/offset/zero_offset/optimize_spec.rb +16 -0
  592. data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimizable_spec.rb +32 -0
  593. data/spec/unit/veritas/optimizer/relation/operation/order/one_limit_operand/optimize_spec.rb +18 -0
  594. data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimizable_spec.rb +26 -0
  595. data/spec/unit/veritas/optimizer/relation/operation/order/order_operand/optimize_spec.rb +19 -0
  596. data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimizable_spec.rb +27 -0
  597. data/spec/unit/veritas/optimizer/relation/operation/order/unoptimized_operand/optimize_spec.rb +20 -0
  598. data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimizable_spec.rb +26 -0
  599. data/spec/unit/veritas/optimizer/relation/operation/reverse/order_operand/optimize_spec.rb +17 -0
  600. data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimizable_spec.rb +26 -0
  601. data/spec/unit/veritas/optimizer/relation/operation/reverse/reverse_operand/optimize_spec.rb +17 -0
  602. data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimizable_spec.rb +26 -0
  603. data/spec/unit/veritas/optimizer/relation/operation/reverse/unoptimized_operand/optimize_spec.rb +20 -0
  604. data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimizable_spec.rb +21 -0
  605. data/spec/unit/veritas/optimizer/relation/operation/unary/empty_operand/optimize_spec.rb +16 -0
  606. data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimizable_spec.rb +21 -0
  607. data/spec/unit/veritas/optimizer/relation/operation/unary/materialized_operand/optimize_spec.rb +15 -0
  608. data/spec/unit/veritas/optimizer/relation/operation/unary/operand_spec.rb +13 -0
  609. data/spec/unit/veritas/relation/class_methods/new_spec.rb +36 -0
  610. data/spec/unit/veritas/relation/directions_spec.rb +13 -0
  611. data/spec/unit/veritas/relation/each_spec.rb +26 -0
  612. data/spec/unit/veritas/relation/element_reference_spec.rb +12 -0
  613. data/spec/unit/veritas/relation/empty/each_spec.rb +14 -0
  614. data/spec/unit/veritas/relation/empty/empty_spec.rb +9 -0
  615. data/spec/unit/veritas/relation/empty/header_spec.rb +11 -0
  616. data/spec/unit/veritas/relation/empty_spec.rb +20 -0
  617. data/spec/unit/veritas/relation/eql_spec.rb +49 -0
  618. data/spec/unit/veritas/relation/equal_value_spec.rb +96 -0
  619. data/spec/unit/veritas/relation/hash_spec.rb +13 -0
  620. data/spec/unit/veritas/relation/header/class_methods/coerce_spec.rb +23 -0
  621. data/spec/unit/veritas/relation/header/difference_spec.rb +16 -0
  622. data/spec/unit/veritas/relation/header/each_spec.rb +25 -0
  623. data/spec/unit/veritas/relation/header/element_reference_spec.rb +19 -0
  624. data/spec/unit/veritas/relation/header/empty_spec.rb +17 -0
  625. data/spec/unit/veritas/relation/header/eql_spec.rb +89 -0
  626. data/spec/unit/veritas/relation/header/equal_value_spec.rb +81 -0
  627. data/spec/unit/veritas/relation/header/hash_spec.rb +13 -0
  628. data/spec/unit/veritas/relation/header/index_spec.rb +20 -0
  629. data/spec/unit/veritas/relation/header/inspect_spec.rb +12 -0
  630. data/spec/unit/veritas/relation/header/intersect_spec.rb +14 -0
  631. data/spec/unit/veritas/relation/header/project_spec.rb +11 -0
  632. data/spec/unit/veritas/relation/header/rename_spec.rb +14 -0
  633. data/spec/unit/veritas/relation/header/to_ary_spec.rb +14 -0
  634. data/spec/unit/veritas/relation/header/union_spec.rb +16 -0
  635. data/spec/unit/veritas/relation/header_spec.rb +14 -0
  636. data/spec/unit/veritas/relation/materialize_spec.rb +18 -0
  637. data/spec/unit/veritas/relation/materialized/class_methods/new_spec.rb +34 -0
  638. data/spec/unit/veritas/relation/materialized/empty_spec.rb +30 -0
  639. data/spec/unit/veritas/relation/materialized/materialize_spec.rb +9 -0
  640. data/spec/unit/veritas/relation/materialized/size_spec.rb +11 -0
  641. data/spec/unit/veritas/relation/operation/binary/class_methods/new_spec.rb +37 -0
  642. data/spec/unit/veritas/relation/operation/binary/directions_spec.rb +16 -0
  643. data/spec/unit/veritas/relation/operation/binary/fixtures/classes.rb +12 -0
  644. data/spec/unit/veritas/relation/operation/binary/header_spec.rb +16 -0
  645. data/spec/unit/veritas/relation/operation/combine/class_methods/combine_tuples_spec.rb +17 -0
  646. data/spec/unit/veritas/relation/operation/combine/fixtures/classes.rb +12 -0
  647. data/spec/unit/veritas/relation/operation/combine/header_spec.rb +18 -0
  648. data/spec/unit/veritas/relation/operation/limit/class_methods/new_spec.rb +28 -0
  649. data/spec/unit/veritas/relation/operation/limit/each_spec.rb +17 -0
  650. data/spec/unit/veritas/relation/operation/limit/eql_spec.rb +50 -0
  651. data/spec/unit/veritas/relation/operation/limit/methods/first_spec.rb +36 -0
  652. data/spec/unit/veritas/relation/operation/limit/methods/last_spec.rb +36 -0
  653. data/spec/unit/veritas/relation/operation/limit/methods/take_spec.rb +14 -0
  654. data/spec/unit/veritas/relation/operation/limit/to_i_spec.rb +12 -0
  655. data/spec/unit/veritas/relation/operation/offset/class_methods/new_spec.rb +28 -0
  656. data/spec/unit/veritas/relation/operation/offset/each_spec.rb +17 -0
  657. data/spec/unit/veritas/relation/operation/offset/eql_spec.rb +51 -0
  658. data/spec/unit/veritas/relation/operation/offset/methods/drop_spec.rb +14 -0
  659. data/spec/unit/veritas/relation/operation/offset/to_i_spec.rb +12 -0
  660. data/spec/unit/veritas/relation/operation/order/ascending/class_methods/call_spec.rb +26 -0
  661. data/spec/unit/veritas/relation/operation/order/ascending/class_methods/reverse_spec.rb +7 -0
  662. data/spec/unit/veritas/relation/operation/order/ascending/reverse_spec.rb +12 -0
  663. data/spec/unit/veritas/relation/operation/order/class_methods/new_spec.rb +21 -0
  664. data/spec/unit/veritas/relation/operation/order/descending/class_methods/call_spec.rb +26 -0
  665. data/spec/unit/veritas/relation/operation/order/descending/class_methods/reverse_spec.rb +7 -0
  666. data/spec/unit/veritas/relation/operation/order/descending/reverse_spec.rb +12 -0
  667. data/spec/unit/veritas/relation/operation/order/direction/attribute_spec.rb +11 -0
  668. data/spec/unit/veritas/relation/operation/order/direction/call_spec.rb +22 -0
  669. data/spec/unit/veritas/relation/operation/order/direction/class_methods/coerce_spec.rb +20 -0
  670. data/spec/unit/veritas/relation/operation/order/direction/eql_spec.rb +52 -0
  671. data/spec/unit/veritas/relation/operation/order/direction/hash_spec.rb +15 -0
  672. data/spec/unit/veritas/relation/operation/order/direction/rename_spec.rb +28 -0
  673. data/spec/unit/veritas/relation/operation/order/direction/reverse_spec.rb +27 -0
  674. data/spec/unit/veritas/relation/operation/order/direction_set/attributes_spec.rb +12 -0
  675. data/spec/unit/veritas/relation/operation/order/direction_set/class_methods/coerce_spec.rb +26 -0
  676. data/spec/unit/veritas/relation/operation/order/direction_set/each_spec.rb +27 -0
  677. data/spec/unit/veritas/relation/operation/order/direction_set/empty_spec.rb +18 -0
  678. data/spec/unit/veritas/relation/operation/order/direction_set/eql_spec.rb +49 -0
  679. data/spec/unit/veritas/relation/operation/order/direction_set/equal_value_spec.rb +49 -0
  680. data/spec/unit/veritas/relation/operation/order/direction_set/hash_spec.rb +14 -0
  681. data/spec/unit/veritas/relation/operation/order/direction_set/project_spec.rb +14 -0
  682. data/spec/unit/veritas/relation/operation/order/direction_set/rename_spec.rb +16 -0
  683. data/spec/unit/veritas/relation/operation/order/direction_set/reverse_spec.rb +19 -0
  684. data/spec/unit/veritas/relation/operation/order/direction_set/sort_tuples_spec.rb +62 -0
  685. data/spec/unit/veritas/relation/operation/order/direction_set/to_ary_spec.rb +12 -0
  686. data/spec/unit/veritas/relation/operation/order/direction_set/union_spec.rb +16 -0
  687. data/spec/unit/veritas/relation/operation/order/directions_spec.rb +15 -0
  688. data/spec/unit/veritas/relation/operation/order/each_spec.rb +16 -0
  689. data/spec/unit/veritas/relation/operation/order/eql_spec.rb +50 -0
  690. data/spec/unit/veritas/relation/operation/order/header_spec.rb +15 -0
  691. data/spec/unit/veritas/relation/operation/order/methods/order_spec.rb +44 -0
  692. data/spec/unit/veritas/relation/operation/reverse/class_methods/new_spec.rb +23 -0
  693. data/spec/unit/veritas/relation/operation/reverse/each_spec.rb +17 -0
  694. data/spec/unit/veritas/relation/operation/reverse/methods/reverse_spec.rb +14 -0
  695. data/spec/unit/veritas/relation/operation/set/class_methods/new_spec.rb +27 -0
  696. data/spec/unit/veritas/relation/operation/set/fixtures/classes.rb +12 -0
  697. data/spec/unit/veritas/relation/operation/set/header_spec.rb +15 -0
  698. data/spec/unit/veritas/relation/operation/unary/directions_spec.rb +15 -0
  699. data/spec/unit/veritas/relation/operation/unary/fixtures/classes.rb +15 -0
  700. data/spec/unit/veritas/relation/operation/unary/header_spec.rb +15 -0
  701. data/spec/unit/veritas/tuple/class_methods/coerce_spec.rb +19 -0
  702. data/spec/unit/veritas/tuple/element_reference_spec.rb +20 -0
  703. data/spec/unit/veritas/tuple/eql_spec.rb +88 -0
  704. data/spec/unit/veritas/tuple/equal_value_spec.rb +81 -0
  705. data/spec/unit/veritas/tuple/extend_spec.rb +16 -0
  706. data/spec/unit/veritas/tuple/hash_spec.rb +14 -0
  707. data/spec/unit/veritas/tuple/header_spec.rb +12 -0
  708. data/spec/unit/veritas/tuple/inspect_spec.rb +12 -0
  709. data/spec/unit/veritas/tuple/join_spec.rb +16 -0
  710. data/spec/unit/veritas/tuple/project_spec.rb +15 -0
  711. data/spec/unit/veritas/tuple/to_ary_spec.rb +12 -0
  712. data/tasks/ci.rake +2 -0
  713. data/tasks/clean.rake +6 -0
  714. data/tasks/quality/flay.rake +41 -0
  715. data/tasks/quality/flog.rake +43 -0
  716. data/tasks/quality/heckle.rake +239 -0
  717. data/tasks/quality/metric_fu.rake +26 -0
  718. data/tasks/quality/reek.rake +9 -0
  719. data/tasks/quality/roodi.rake +15 -0
  720. data/tasks/quality/yardstick.rake +23 -0
  721. data/tasks/spec.rake +41 -0
  722. data/tasks/yard.rake +9 -0
  723. data/veritas.gemspec +1350 -0
  724. metadata +1420 -0
@@ -0,0 +1,96 @@
1
+ module Veritas
2
+ module Algebra
3
+
4
+ # Restrict the tuples to those that match a predicate
5
+ class Restriction < Relation
6
+ include Relation::Operation::Unary
7
+
8
+ # The predicate for the relation
9
+ #
10
+ # @return [Expression, #call]
11
+ #
12
+ # @api private
13
+ attr_reader :predicate
14
+
15
+ # Initialize a Restriction
16
+ #
17
+ # @param [Relation] operand
18
+ # the relation to restrict
19
+ # @param [Expression, #call] predicate
20
+ # the expression to restrict the tuples with
21
+ #
22
+ # @return [undefined]
23
+ #
24
+ # @api private
25
+ def initialize(operand, predicate)
26
+ super(operand)
27
+ @predicate = predicate
28
+ end
29
+
30
+ # Iterate over each tuple in the set
31
+ #
32
+ # @example
33
+ # restriction = Restriction.new(operand, predicate)
34
+ # restriction.each { |tuple| ... }
35
+ #
36
+ # @yield [tuple]
37
+ #
38
+ # @yieldparam [Tuple] tuple
39
+ # each tuple in the set
40
+ #
41
+ # @return [self]
42
+ #
43
+ # @api public
44
+ def each
45
+ operand.each { |tuple| yield(tuple) if predicate.call(tuple) }
46
+ self
47
+ end
48
+
49
+ # Compare the Restriction with other relation for equality
50
+ #
51
+ # @example
52
+ # restriction.eql?(other) # => true or false
53
+ #
54
+ # @param [Relation] other
55
+ # the other relation to compare with
56
+ #
57
+ # @return [Boolean]
58
+ #
59
+ # @api public
60
+ def eql?(other)
61
+ super && predicate.eql?(other.predicate)
62
+ end
63
+
64
+ module Methods
65
+
66
+ # Return a relation with restricted tuples
67
+ #
68
+ # @example restriction using a predicate
69
+ # restriction = relation.restrict(relation.name.eq('other'))
70
+ #
71
+ # @example restriction using a block
72
+ # restriction = relation.restrict { |r| r[:a].eq('other').and(r[:b].gte(42)) }
73
+ #
74
+ # @param [Expression, #call] predicate
75
+ # optional predicate to restrict the tuples with
76
+ #
77
+ # @yield [relation]
78
+ # optional block to restrict the tuples with
79
+ #
80
+ # @yieldparam [Relation] relation
81
+ # the context to evaluate the restriction with
82
+ #
83
+ # @return [Restriction]
84
+ #
85
+ # @api public
86
+ def restrict(predicate = yield(self))
87
+ Restriction.new(self, predicate)
88
+ end
89
+
90
+ end # module Methods
91
+
92
+ Relation.class_eval { include Methods }
93
+
94
+ end # class Restriction
95
+ end # module Algebra
96
+ end # module Veritas
@@ -0,0 +1,166 @@
1
+ module Veritas
2
+ module Algebra
3
+
4
+ # Summarize a relation by specific attributes
5
+ class Summarization < Relation
6
+ include Relation::Operation::Unary
7
+
8
+ # The relation to summarize by
9
+ #
10
+ # @return [Relation]
11
+ #
12
+ # @api private
13
+ attr_reader :summarize_by
14
+
15
+ # The summarizers for the relation
16
+ #
17
+ # @return [Hash]
18
+ #
19
+ # @api private
20
+ attr_reader :summarizers
21
+
22
+ # Initialize a Summarization
23
+ #
24
+ # @param [Relation] operand
25
+ # the relation to summarize
26
+ # @param [Relation] summarize_by
27
+ # the relation to summarize by
28
+ # @param [#to_hash] summarizers
29
+ # the summarizers to add
30
+ #
31
+ # @return [undefined]
32
+ #
33
+ # @api private
34
+ def initialize(operand, summarize_by, summarizers)
35
+ super(operand)
36
+ @summarize_by = summarize_by
37
+ @summarizers = summarizers.to_hash
38
+ @header = @summarize_by.header | @summarizers.keys
39
+ end
40
+
41
+ # Iterate over each tuple in the set
42
+ #
43
+ # @example
44
+ # summarization = Summarization.new(self, relation, evaluator.expressions)
45
+ # summarization.each { |tuple| ... }
46
+ #
47
+ # @yield [tuple]
48
+ #
49
+ # @yieldparam [Tuple] tuple
50
+ # each tuple in the set
51
+ #
52
+ # @return [self]
53
+ #
54
+ # @api public
55
+ def each
56
+ header = self.header
57
+ summaries = summarize_relation
58
+ summarizers = self.summarizers.values
59
+
60
+ summarize_by.each do |tuple|
61
+ yield tuple.join(header, summaries[tuple].values_at(*summarizers))
62
+ end
63
+
64
+ self
65
+ end
66
+
67
+ private
68
+
69
+ # Return the summaries for each tuple, grouped by the summarize_by header
70
+ #
71
+ # @return [Hash]
72
+ #
73
+ # @api private
74
+ def summarize_relation
75
+ header = summarize_by.header
76
+ summaries = {}
77
+
78
+ operand.each do |tuple|
79
+ summarize_tuple(tuple, summaries[tuple.project(header)] ||= {})
80
+ end
81
+
82
+ summaries
83
+ end
84
+
85
+ # Calculate the summary for each function and tuple
86
+ #
87
+ # @param [Tuple] tuple
88
+ # a tuple from the base relation
89
+ # @param [Hash] summary
90
+ # the summary for a group of matching tuples
91
+ #
92
+ # @return [undefined]
93
+ #
94
+ # @api private
95
+ def summarize_tuple(tuple, summary)
96
+ summarizers.each_value do |summarizer|
97
+ self.class.summarize(tuple, summary, summarizer)
98
+ end
99
+ end
100
+
101
+ # Calculate the summary for a function and tuple
102
+ #
103
+ # @param [Tuple] tuple
104
+ # a tuple from the base relation
105
+ # @param [Hash] summary
106
+ # the summary for a group of matching tuples
107
+ # @param [#call] summarizer
108
+ # the function to call with the summary and tuple
109
+ #
110
+ # @return [self]
111
+ #
112
+ # @api private
113
+ def self.summarize(tuple, summary, summarizer)
114
+ summary[summarizer] = summarizer.call(summary[summarizer], tuple)
115
+ self
116
+ end
117
+
118
+ module Methods
119
+
120
+ # Return a summarized relation
121
+ #
122
+ # @example
123
+ # summarization = relation.summarize(relation.project([ :name ])) do |expression|
124
+ # expression.add(:count, expression[:name].count)
125
+ # end
126
+ #
127
+ # @yield [expression]
128
+ # Evaluate an summarization expression
129
+ #
130
+ # @yieldparam [Evaluator::Expression] expression
131
+ # the context to evaluate the summarization with
132
+ #
133
+ # @return [Summarization]
134
+ #
135
+ # @api public
136
+ def summarize(summarize_by, &block)
137
+ relation = coerce_to_relation(summarize_by)
138
+ evaluator = Evaluator::Expression.new(&block)
139
+ Summarization.new(self, relation, evaluator.expressions)
140
+ end
141
+
142
+ private
143
+
144
+ # Coerce the argument into a Relation
145
+ #
146
+ # @param [Relation, Header, #to_ary] summarize_by
147
+ # the relation, header or attributes to summarize by
148
+ #
149
+ # @return [Relation]
150
+ #
151
+ # @api private
152
+ def coerce_to_relation(summarize_by)
153
+ if summarize_by.kind_of?(Relation)
154
+ summarize_by
155
+ else
156
+ project(Relation::Header.coerce(summarize_by))
157
+ end
158
+ end
159
+
160
+ end # module Methods
161
+
162
+ Relation.class_eval { include Methods }
163
+
164
+ end # class Summarization
165
+ end # module Algebra
166
+ end # module Veritas
@@ -0,0 +1,54 @@
1
+ module Veritas
2
+ module Algebra
3
+
4
+ # The union between relations
5
+ class Union < Relation
6
+ include Relation::Operation::Set
7
+
8
+ # Iterate over each tuple in the set
9
+ #
10
+ # @example
11
+ # union = Union.new(left, right)
12
+ # union.each { |tuple| ... }
13
+ #
14
+ # @yield [tuple]
15
+ #
16
+ # @yieldparam [Tuple] tuple
17
+ # each tuple in the set
18
+ #
19
+ # @return [self]
20
+ #
21
+ # @api public
22
+ def each
23
+ seen = {}
24
+ left.each { |tuple| yield(seen[tuple] = tuple) }
25
+ right.each { |tuple| yield(tuple) unless seen.key?(tuple) }
26
+ self
27
+ end
28
+
29
+ module Methods
30
+ extend Aliasable
31
+
32
+ inheritable_alias(:| => :union)
33
+
34
+ # Return the union between relations
35
+ #
36
+ # @example
37
+ # union = relation.union(other)
38
+ #
39
+ # @param [Relation] other
40
+ #
41
+ # @return [Union]
42
+ #
43
+ # @api public
44
+ def union(other)
45
+ Union.new(self, other)
46
+ end
47
+
48
+ end # module Methods
49
+
50
+ Relation.class_eval { include Methods }
51
+
52
+ end # class Union
53
+ end # module Algebra
54
+ end # module Veritas
@@ -0,0 +1,10 @@
1
+ require 'veritas/algebra/difference'
2
+ require 'veritas/algebra/extension'
3
+ require 'veritas/algebra/intersection'
4
+ require 'veritas/algebra/join'
5
+ require 'veritas/algebra/product'
6
+ require 'veritas/algebra/projection'
7
+ require 'veritas/algebra/rename'
8
+ require 'veritas/algebra/restriction'
9
+ require 'veritas/algebra/summarization'
10
+ require 'veritas/algebra/union'
@@ -0,0 +1,39 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents a Boolean value in a relation tuple
5
+ class Boolean < Object
6
+ include Logic::Connective::Conjunction::Methods,
7
+ Logic::Connective::Disjunction::Methods,
8
+ Logic::Connective::Negation::Methods
9
+
10
+ # The Boolean primitive
11
+ #
12
+ # @example
13
+ # Boolean.primitive # => TrueClass
14
+ #
15
+ # @return [Class<TrueClass>]
16
+ #
17
+ # @api public
18
+ def self.primitive
19
+ TrueClass
20
+ end
21
+
22
+ # Test if the value is a boolean
23
+ #
24
+ # @example
25
+ # boolean.valid_value?(value) # => true or false
26
+ #
27
+ # @param [Object] value
28
+ # the value to test
29
+ #
30
+ # @return [Boolean]
31
+ #
32
+ # @api public
33
+ def valid_value?(value)
34
+ valid_or_optional?(value) { super || value.kind_of?(FalseClass) }
35
+ end
36
+
37
+ end # class Boolean
38
+ end # class Attribute
39
+ end # module Veritas
@@ -0,0 +1,21 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents a Class value in a relation tuple
5
+ class Class < Object
6
+
7
+ # The Class primitive
8
+ #
9
+ # @example
10
+ # Class.primitive # => ::Class
11
+ #
12
+ # @return [Class<::Class>]
13
+ #
14
+ # @api public
15
+ def self.primitive
16
+ ::Class
17
+ end
18
+
19
+ end # class Class
20
+ end # class Attribute
21
+ end # module Veritas
@@ -0,0 +1,32 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # A mixin for attributes that have comparable values
5
+ module Comparable
6
+ include Orderable,
7
+ Logic::Predicate::GreaterThan::Methods,
8
+ Logic::Predicate::GreaterThanOrEqualTo::Methods,
9
+ Logic::Predicate::LessThan::Methods,
10
+ Logic::Predicate::LessThanOrEqualTo::Methods
11
+
12
+
13
+ # Compare the attribute with other attribute to see if they are of the same type
14
+ #
15
+ # @example
16
+ # attribute.comparable?(other) # => true or false
17
+ #
18
+ # @param [Attribute] other
19
+ # the other attribute to compare with
20
+ #
21
+ # @return [Boolean]
22
+ #
23
+ # @todo figure out how to dry this up with Attribute#joinable?
24
+ #
25
+ # @api public
26
+ def comparable?(other)
27
+ kind_of?(other.class) || other.kind_of?(self.class)
28
+ end
29
+
30
+ end # module Comparable
31
+ end # class Attribute
32
+ end # module Veritas
@@ -0,0 +1,36 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents a Date value in a relation tuple
5
+ class Date < Object
6
+ include Comparable
7
+
8
+ DEFAULT_RANGE = (::Date.new..::Date::Infinity.new).freeze
9
+
10
+ # The Date primitive
11
+ #
12
+ # @example
13
+ # Date.primitive # => ::Date
14
+ #
15
+ # @return [Class<::Date>]
16
+ #
17
+ # @api public
18
+ def self.primitive
19
+ ::Date
20
+ end
21
+
22
+ # The Date range for a valid value
23
+ #
24
+ # @example
25
+ # Date.range # => ::Date.new(*from)..::Date.new(*to)
26
+ #
27
+ # @return [Range<::Date>]
28
+ #
29
+ # @api public
30
+ def range
31
+ DEFAULT_RANGE
32
+ end
33
+
34
+ end # class Date
35
+ end # class Attribute
36
+ end # module Veritas
@@ -0,0 +1,36 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents a DateTime value in a relation tuple
5
+ class DateTime < Object
6
+ include Comparable
7
+
8
+ DEFAULT_RANGE = (::DateTime.new..::DateTime::Infinity.new).freeze
9
+
10
+ # The DateTime primitive
11
+ #
12
+ # @example
13
+ # DateTime.primitive # => ::DateTime
14
+ #
15
+ # @return [Class<::DateTime>]
16
+ #
17
+ # @api public
18
+ def self.primitive
19
+ ::DateTime
20
+ end
21
+
22
+ # The DateTime range for a valid value
23
+ #
24
+ # @example
25
+ # DateTime.range # => ::DateTime.new(*from)..::DateTime.new(*to)
26
+ #
27
+ # @return [Range<::DateTime>]
28
+ #
29
+ # @api public
30
+ def range
31
+ DEFAULT_RANGE
32
+ end
33
+
34
+ end # class DateTime
35
+ end # class Attribute
36
+ end # module Veritas
@@ -0,0 +1,21 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents a Decimal value in a relation tuple
5
+ class Decimal < Numeric
6
+
7
+ # The Decimal primitive
8
+ #
9
+ # @example
10
+ # Decimal.primitive # => BigDecimal
11
+ #
12
+ # @return [Class<BigDecimal>]
13
+ #
14
+ # @api public
15
+ def self.primitive
16
+ BigDecimal
17
+ end
18
+
19
+ end # class Decimal
20
+ end # class Attribute
21
+ end # module Veritas
@@ -0,0 +1,21 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents a Float value in a relation tuple
5
+ class Float < Numeric
6
+
7
+ # The Float primitive
8
+ #
9
+ # @example
10
+ # Float.primitive # => ::Float
11
+ #
12
+ # @return [Class<::Float>]
13
+ #
14
+ # @api public
15
+ def self.primitive
16
+ ::Float
17
+ end
18
+
19
+ end # class Float
20
+ end # class Attribute
21
+ end # module Veritas
@@ -0,0 +1,21 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents an Integer value in a relation tuple
5
+ class Integer < Numeric
6
+
7
+ # The Integer primitive
8
+ #
9
+ # @example
10
+ # Integer.primitive # => ::Integer
11
+ #
12
+ # @return [Class<::Integer>]
13
+ #
14
+ # @api public
15
+ def self.primitive
16
+ ::Integer
17
+ end
18
+
19
+ end # class Integer
20
+ end # class Attribute
21
+ end # module Veritas
@@ -0,0 +1,86 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents a Numeric value in a relation tuple
5
+ class Numeric < Object
6
+ extend Aliasable
7
+ include Comparable
8
+
9
+ DEFAULT_SIZE = (0..2**31-1).freeze
10
+
11
+ inheritable_alias(:range => :size)
12
+
13
+ # The Numeric range for a valid value
14
+ #
15
+ # @example
16
+ # numeric.size # => 0..10
17
+ #
18
+ # @return [Range<::Numeric>]
19
+ #
20
+ # @api public
21
+ attr_reader :size
22
+
23
+ # The Numeric primitive
24
+ #
25
+ # @example
26
+ # Numeric.primitive # => ::Numeric
27
+ #
28
+ # @return [Class<::Numeric>]
29
+ #
30
+ # @api public
31
+ def self.primitive
32
+ ::Numeric
33
+ end
34
+
35
+ # Initialize a Numeric Attribute
36
+ #
37
+ # @param [#to_sym] name
38
+ # the attribute name
39
+ # @param [#to_hash] options
40
+ # the options for the attribute
41
+ # @option options [Boolean] :required (true)
42
+ # if true, then the value cannot be nil
43
+ # @option options [Range<::Numeric>] :size (0..2**31-1)
44
+ # The numeric range for a valid value
45
+ #
46
+ # @return [undefined]
47
+ #
48
+ # @api private
49
+ def initialize(*)
50
+ super
51
+ @size = @options.fetch(:size, DEFAULT_SIZE).to_inclusive
52
+ end
53
+
54
+ # Test if the value matches the attribute constraints
55
+ #
56
+ # @example
57
+ # numeric.valid_value?(value) # => true or false
58
+ #
59
+ # @param [Object] value
60
+ # the value to test
61
+ #
62
+ # @return [Boolean]
63
+ #
64
+ # @api public
65
+ def valid_value?(value)
66
+ valid_or_optional?(value) { super && size.include?(value) }
67
+ end
68
+
69
+ # Test if the attribute can be joined with the other attribute
70
+ #
71
+ # @example
72
+ # numeric.joinable?(other) # => true or false
73
+ #
74
+ # @param [Attribute] other
75
+ # the other attribute to test
76
+ #
77
+ # @return [Boolean]
78
+ #
79
+ # @api public
80
+ def joinable?(other)
81
+ super && size.eql?(other.size)
82
+ end
83
+
84
+ end # class Numeric
85
+ end # class Attribute
86
+ end # module Veritas
@@ -0,0 +1,25 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # Represents an Object value in a relation tuple
5
+ class Object < Attribute
6
+ include Logic::Predicate::Equality::Methods,
7
+ Logic::Predicate::Exclusion::Methods,
8
+ Logic::Predicate::Inequality::Methods,
9
+ Logic::Predicate::Inclusion::Methods
10
+
11
+ # The Object primitive
12
+ #
13
+ # @example
14
+ # Object.primitive # => ::Object
15
+ #
16
+ # @return [Class<::Object>]
17
+ #
18
+ # @api public
19
+ def self.primitive
20
+ ::Object
21
+ end
22
+
23
+ end # class Object
24
+ end # class Attribute
25
+ end # module Veritas
@@ -0,0 +1,33 @@
1
+ module Veritas
2
+ class Attribute
3
+
4
+ # A mixin for attributes that have orderable values
5
+ module Orderable
6
+
7
+ # Sort the attribute in ascending order
8
+ #
9
+ # @example
10
+ # ascending = attribute.asc
11
+ #
12
+ # @return [Relation::Operation::Order::Ascending]
13
+ #
14
+ # @api public
15
+ def asc
16
+ Relation::Operation::Order::Ascending.new(self)
17
+ end
18
+
19
+ # Sort the attribute in descending order
20
+ #
21
+ # @example
22
+ # descending = attribute.desc
23
+ #
24
+ # @return [Relation::Operation::Order::Descending]
25
+ #
26
+ # @api public
27
+ def desc
28
+ Relation::Operation::Order::Descending.new(self)
29
+ end
30
+
31
+ end # module Orderable
32
+ end #class Attribute
33
+ end # module Veritas