veritas 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
data/.autotest ADDED
@@ -0,0 +1,42 @@
1
+ begin
2
+ require 'autotest/fsevent'
3
+ rescue LoadError
4
+ # do nothing
5
+ end
6
+
7
+ MATCH_ALL_SPECS = %r{\Aspec/.+_spec\.rb\z}.freeze
8
+
9
+ Autotest.add_hook :initialize do |at|
10
+ at.clear_mappings
11
+
12
+ # run the spec if it is modified
13
+ at.add_mapping(MATCH_ALL_SPECS) { |filename, _| filename }
14
+
15
+ # run specs if core_ext patches are modified
16
+ at.add_mapping(%r{\Alib/veritas/core_ext/(.+)\.rb\z}) do |_, match|
17
+ at.files_matching %r{\Aspec/unit/#{Regexp.quote(match[1])}/.*_spec\.rb\z}
18
+ end
19
+
20
+ # run specs if support libs are modified
21
+ at.add_mapping(%r{\Alib/veritas/support/(.+)\.rb\z}) do |_, match|
22
+ at.files_matching %r{\Aspec/unit/veritas/#{Regexp.quote(match[1])}/.*_spec\.rb\z}
23
+ end
24
+
25
+ # run specs if the main libs are modified
26
+ at.add_mapping(%r{\Alib/(.+)\.rb\z}) do |_, match|
27
+ at.files_matching %r{\Aspec/unit/#{Regexp.quote(match[1])}/.*_spec\.rb\z}
28
+ end
29
+
30
+ # run all specs if the spec_helper or spec support lib are modified
31
+ at.add_mapping(%r{\Aspec/(?:spec_helper\.rb|(?:support|shared)/.+)\z}) do
32
+ at.files_matching MATCH_ALL_SPECS
33
+ end
34
+
35
+ at.add_exception('.git')
36
+
37
+ File.foreach('.gitignore') do |line|
38
+ line.strip!
39
+ next if line.empty? || line[0, 1] == '#'
40
+ at.add_exception(File.expand_path(line))
41
+ end
42
+ end
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,34 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## Rubinius
17
+ *.rbc
18
+
19
+ ## PROJECT::GENERAL
20
+ *.gem
21
+ coverage
22
+ profiling
23
+ rdoc
24
+ pkg
25
+ tmp
26
+ doc
27
+ log
28
+ .yardoc
29
+ measurements
30
+
31
+ ## BUNDLER
32
+ .bundle
33
+
34
+ ## PROJECT::SPECIFIC
data/Gemfile ADDED
@@ -0,0 +1,25 @@
1
+ source :rubygems
2
+
3
+ gemspec
4
+
5
+ platforms :mri_18 do
6
+ group :quality do
7
+ gem 'activesupport', '~> 2.3.10'
8
+ gem 'flay', '~> 1.4.1'
9
+ gem 'flog', '~> 2.4.0', :git => 'git://github.com/dkubb/flog.git'
10
+ gem 'heckle', '~> 1.4.3'
11
+ gem 'json', '~> 1.4.6'
12
+ gem 'metric_fu', '~> 2.0.1'
13
+ gem 'mspec', '~> 1.5.17'
14
+ gem 'rcov', '~> 0.9.9'
15
+ gem 'reek', '~> 1.2.8'
16
+ gem 'roodi', '~> 2.1.0'
17
+ gem 'ruby2ruby', '= 1.2.2'
18
+ gem 'yard', '~> 0.6.1'
19
+ gem 'yardstick', '~> 0.2.0'
20
+ end
21
+ end
22
+
23
+ group :benchmarks do
24
+ gem 'rbench', '~> 0.2.3'
25
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,122 @@
1
+ GIT
2
+ remote: git://github.com/dkubb/flog.git
3
+ revision: 4522d547d0f2977dd581be24a8a9985d78699e4c
4
+ specs:
5
+ flog (2.4.0)
6
+ ruby_parser (~> 2.0)
7
+ sexp_processor (~> 3.0)
8
+
9
+ PATH
10
+ remote: .
11
+ specs:
12
+ veritas (0.0.1)
13
+
14
+ GEM
15
+ remote: http://rubygems.org/
16
+ specs:
17
+ ParseTree (3.0.6)
18
+ RubyInline (>= 3.7.0)
19
+ sexp_processor (>= 3.0.0)
20
+ RubyInline (3.8.6)
21
+ ZenTest (~> 4.3)
22
+ Saikuro (1.1.0)
23
+ ZenTest (4.4.0)
24
+ activesupport (2.3.10)
25
+ arrayfields (4.7.4)
26
+ backports (1.18.2)
27
+ chronic (0.2.3)
28
+ hoe (>= 1.2.1)
29
+ churn (0.0.12)
30
+ chronic (~> 0.2.3)
31
+ hirb
32
+ json_pure
33
+ main
34
+ ruby_parser (~> 2.0.4)
35
+ sexp_processor (~> 3.0.3)
36
+ colored (1.2)
37
+ fattr (2.2.0)
38
+ flay (1.4.1)
39
+ ruby_parser (~> 2.0)
40
+ sexp_processor (~> 3.0)
41
+ gemcutter (0.6.1)
42
+ git (1.2.5)
43
+ heckle (1.4.3)
44
+ ParseTree (>= 2.0.0)
45
+ ZenTest (>= 3.5.2)
46
+ ruby2ruby (>= 1.1.6)
47
+ hirb (0.3.5)
48
+ hoe (2.7.0)
49
+ rake (>= 0.8.7)
50
+ rubyforge (>= 2.0.4)
51
+ jeweler (1.4.0)
52
+ gemcutter (>= 0.1.0)
53
+ git (>= 1.2.5)
54
+ rubyforge (>= 2.0.0)
55
+ json (1.4.6)
56
+ json_pure (1.4.6)
57
+ main (4.3.0)
58
+ arrayfields (>= 4.7.4)
59
+ fattr (>= 2.1.0)
60
+ metric_fu (2.0.1)
61
+ Saikuro (>= 1.1.0)
62
+ activesupport (>= 2.0.0)
63
+ chronic (~> 0.2.3)
64
+ churn (>= 0.0.7)
65
+ flay (>= 1.2.1)
66
+ flog (>= 2.2.0)
67
+ rails_best_practices (>= 0.3.16)
68
+ rcov (>= 0.8.3.3)
69
+ reek (>= 1.2.6)
70
+ roodi (>= 2.1.0)
71
+ mspec (1.5.17)
72
+ progressbar (0.9.0)
73
+ rails_best_practices (0.5.0)
74
+ activesupport
75
+ colored (~> 1.2)
76
+ progressbar (~> 0.9.0)
77
+ ruby_parser (~> 2.0.4)
78
+ rake (0.8.7)
79
+ rbench (0.2.3)
80
+ rcov (0.9.9)
81
+ reek (1.2.8)
82
+ ruby2ruby (~> 1.2)
83
+ ruby_parser (~> 2.0)
84
+ sexp_processor (~> 3.0)
85
+ roodi (2.1.0)
86
+ ruby_parser
87
+ rspec (1.3.1)
88
+ ruby2ruby (1.2.2)
89
+ ParseTree (~> 3.0)
90
+ ruby_parser (2.0.5)
91
+ sexp_processor (~> 3.0)
92
+ rubyforge (2.0.4)
93
+ json_pure (>= 1.1.7)
94
+ sexp_processor (3.0.5)
95
+ yard (0.6.2)
96
+ yardstick (0.2.0)
97
+ yard (~> 0.6.1)
98
+
99
+ PLATFORMS
100
+ java
101
+ ruby
102
+
103
+ DEPENDENCIES
104
+ activesupport (~> 2.3.10)
105
+ backports (~> 1.18.2)
106
+ flay (~> 1.4.1)
107
+ flog (~> 2.4.0)!
108
+ heckle (~> 1.4.3)
109
+ jeweler (~> 1.4.0)
110
+ json (~> 1.4.6)
111
+ metric_fu (~> 2.0.1)
112
+ mspec (~> 1.5.17)
113
+ rake (~> 0.8.7)
114
+ rbench (~> 0.2.3)
115
+ rcov (~> 0.9.9)
116
+ reek (~> 1.2.8)
117
+ roodi (~> 2.1.0)
118
+ rspec (~> 1.3.1)
119
+ ruby2ruby (= 1.2.2)
120
+ veritas!
121
+ yard (~> 0.6.1)
122
+ yardstick (~> 0.2.0)
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Dan Kubb
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,143 @@
1
+ = Veritas
2
+
3
+ Simplifies querying of structured data using relational algebra
4
+
5
+ == Goals
6
+
7
+ The purpose of this project is to expand my knowledge of relational algebra by attempting to implement a simple query system using the primitive operations defined in relational algebra.
8
+
9
+ Most of the design is heavily inspired from koios[http://github.com/carllerche/koios] and arel[http://github.com/rails/arel]. The reason I decided to write my own and not just build on top of those systems was not so much because I don't like the code/API in those projects, it's more because I wanted to gain a depth of understanding that can only be earned by trying to solve the problem myself.
10
+
11
+ I should note though that I don't plan to just re-implement those systems with a different API, or different internals, I plan to make something that surpasses them in several areas. For example, I want to be able to join information from multiple datastores and represent it as a single relation. I want to be able to insert, update or delete from that relation and have those changes propagated back to the right datastore. This is not an easy feat, since it is basically the writable view problem that RDBMS' struggle with. While I do think there are some cases where relations will become read-only, I think it will be possible to propagate writes properly in this manner. I certainly think for the current use cases in DataMapper this should work quite well.
12
+
13
+ The ability to join data from multiple datastores and have it presented in a consistent manner will solve one of the longest standing problems in DataMapper, namely how do we do cross repository joins. It should be possible to construct one query for one datastore, and then another query for another datastore and then join them. Since they are using different engines veritas will know to perform each query *natively* and then join the results in-memory seamlessly. It should also be possible to reorganize the queries so that as much work as possible is done natively as opposed to in-memory, which is considered the last resort.
14
+
15
+ Not only does this work nicely with associations, but it will allow DataMapper to perform mapping in a more powerful way. You'll be able to construct a join from multiple datastores, and set that as the base for your model. Each DM Resource would work as normal, but again writes could be propagated back to the appropriate datastore. You'd be able to split your data up between different datastores, but assemble it into one coherent view.
16
+
17
+ === Phase 1: In-Memory Operations
18
+
19
+ The first phase of this project will be to implement all the operations listed below using in-memory data structures. I'm focusing on the API, and making sure the specs ensure the desired results are obtained from each operation.
20
+
21
+ This has been marked as 90% complete for some time. In actuality most of the features below are completed besides the first examples for #extend and #summarize. Those will require a system to define functions as objects that can be introspected and walked to "visit" and generate SQL or other query languages from them. The Proc based functions are opaque and will probably never be possible to generate native queries from them. For this reason they will only be recommended when they depends on functionality not available in the datastore.
22
+
23
+ === Phase 2: RDBMS Engines
24
+
25
+ The second phase of this project will be to add an RDBMS based engine, and move the in-memory matching to it's own engine. I'll also be working on a system where if the primary engine cannot carry out some operation, that it first look at alternate forms (eg. using a join instead of an intersection), and then fall-back to in-memory matching. I also want to look at re-arranging queries so that all the operations that can be performed natively are "pushed down" the hierarchy and then the in-memory matching is performed last.
26
+
27
+ === Phase 3: DataMapper Integration
28
+
29
+ The third phase of this project will be to add a few NoSQL engines (like MongoDB[http://www.mongodb.org/] and CouchDB[http://couchdb.org/]) and then look at writing a DataMapper adapter that translates Query objects into Veritas relations. I want to make sure all the DM specs pass with this adapter and each engine, and if everything goes well I will look at updating DM to work directly on top of Veritas.
30
+
31
+ == Usage
32
+
33
+ relation = Veritas::Relation.new([ [ :id, Integer ] ], [ [ 1 ] ])
34
+
35
+ # Relational Operators
36
+ # --------------------
37
+
38
+ # projection
39
+ new_relation = relation.project([ :a, :b, :c ])
40
+
41
+ # removal
42
+ new_relation = relation.remove([ :a, :b, :c ])
43
+
44
+ # rename
45
+ new_relation = relation.rename(:a => :b, :c => :d)
46
+
47
+ # natural join
48
+ new_relation = relation.join(other) # OR relation + other
49
+
50
+ # product
51
+ new_relation = relation.product(other) # OR relation * other
52
+
53
+ # intersection
54
+ new_relation = relation.intersect(other) # OR relation & other
55
+
56
+ # union
57
+ new_relation = relation.union(other) # OR relation | other
58
+
59
+ # difference
60
+ new_relation = relation.difference(other) # OR relation - other
61
+
62
+ # restriction
63
+ new_relation = relation.restrict(relation.name.eq('other'))
64
+ new_relation = relation.restrict { |r| r[:a].eq('other').and(r[:b].gte(42)) }
65
+
66
+ # theta-join
67
+ new_relation = relation.join(other, relation[:a].gte(other[:b]))
68
+ new_relation = relation.join(other) { |r| r[:a].gte(r[:b]) }
69
+
70
+ # NOTE: theta-join is effectively restricting a product of the relations
71
+
72
+ # extend
73
+ new_relation = relation.extend { |r| r.add(:total, r[:unit_price] * r[:quantity]) }
74
+ new_relation = relation.extend { |r| r.add(:total) { |t| t[:unit_price] * t[:quantity] } }
75
+
76
+ # summarize
77
+ new_relation = relation.summarize(relation.project([ :name ])) { |r| r.add(:count, r[:name].count)
78
+ new_relation = relation.summarize(relation.project([ :name ])) { |r| r.add(:count) { |acc, t| acc.to_i + 1 } }
79
+
80
+ # Non-Relational Operators
81
+ # ------------------------
82
+
83
+ # returns a set that represents the relation header
84
+ header = relation.header
85
+
86
+ # simplifies and normalizes the relation operations
87
+ optimized_relation = relation.optimize
88
+
89
+ # a relation is Enumerable
90
+ relation = relation.each { |tuple| ... }
91
+
92
+ # order by attribute and direction
93
+ new_relation = relation.order([ relation[:a].desc, relation[:b] ])
94
+ new_relation = relation.order { |r| [ r[:a].desc, r[:b] ] }
95
+
96
+ # limiting (only allowed if ordered)
97
+ new_relation = relation.take(10)
98
+
99
+ # offset (only allowed if ordered)
100
+ new_relation = relation.drop(5)
101
+
102
+ # get the first n tuples (only allowed if ordered)
103
+ new_relation = relation.first # default is 1
104
+ new_relation = relation.first(5)
105
+
106
+ # get the last n tuples (only allowed if ordered)
107
+ new_relation = relation.last # default is 1
108
+ new_relation = relation.last(5)
109
+
110
+ # reverse the relation (only allowed if ordered)
111
+ new_relation = relation.reverse
112
+
113
+ # CRUD Operators
114
+ # --------------
115
+
116
+ # can only modify relations that project all candidate keys for the base relations
117
+ new_relation = relation.create(:a => 'test', :b => 'other', :c => 'yet another')
118
+ new_relation = relation.update(:a => 'test', :b => 'other', :c => 'yet another')
119
+ new_relation = relation.delete
120
+
121
+ == Note on Patches/Pull Requests
122
+
123
+ * If you want your code merged into the mainline, please discuss
124
+ the proposed changes with me before doing any work on it. This
125
+ library is still in early development, and it may not always be
126
+ clear the direction it is going. Some features may not be appropriate
127
+ yet, may need to be deferred until later when the foundation for
128
+ them is laid, or may be more applicable in a plugin.
129
+ * Fork the project.
130
+ * Make your feature addition or bug fix.
131
+ * Follow this styleguide: http://github.com/dkubb/styleguide
132
+ * Add specs for it. This is important so I don't break it in a
133
+ future version unintentionally. Tests must cover all branches
134
+ within the code, and code must be fully covered.
135
+ * Commit, do not mess with Rakefile, version, or history.
136
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
137
+ * Run "rake ci". This must pass and not show any regressions in the
138
+ metrics for the code to be merged.
139
+ * Send me a pull request. Bonus points for topic branches.
140
+
141
+ == Copyright
142
+
143
+ Copyright (c) 2010 Dan Kubb. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+ require 'rake'
2
+
3
+ require File.expand_path('../lib/veritas/version', __FILE__)
4
+
5
+ begin
6
+ gem('jeweler', '~> 1.4.0') if respond_to?(:gem, true)
7
+ require 'jeweler'
8
+
9
+ Jeweler::Tasks.new do |gem|
10
+ gem.name = 'veritas'
11
+ gem.summary = 'Ruby Relational Algebra'
12
+ gem.description = 'Simplifies querying of structured data using relational algebra'
13
+ gem.email = 'dan.kubb@gmail.com'
14
+ gem.homepage = 'http://github.com/dkubb/veritas'
15
+ gem.authors = [ 'Dan Kubb' ]
16
+ gem.has_rdoc = 'yard'
17
+
18
+ gem.version = Veritas::VERSION
19
+
20
+ gem.add_development_dependency 'rake', '~> 0.8.7'
21
+ gem.add_development_dependency 'rspec', '~> 1.3.1'
22
+ gem.add_development_dependency 'jeweler', '~> 1.4.0'
23
+ gem.add_development_dependency 'backports', '~> 1.18.2'
24
+ end
25
+
26
+ Jeweler::GemcutterTasks.new
27
+
28
+ FileList['tasks/**/*.rake'].each { |task| import task }
29
+ rescue LoadError
30
+ puts 'Jeweler ~> 1.4.0 (or a dependency) not available. Install it with: gem install jeweler'
31
+ end
data/TODO ADDED
@@ -0,0 +1,126 @@
1
+ * Add Extension and Summarization Functions
2
+ * Overview: http://gist.github.com/584588
3
+
4
+ * Remove Order, Reverse, Limit and Offset from the Relation inheritance chain
5
+ * Instead make it so they are proxy classes that wrap Relations, but
6
+ proxy method calls to the Relation methods, and then wrap the return
7
+ value (assuming it's a Relation) in a copy of itself.
8
+ * Also this will allow knowledge of #directions to be removed from
9
+ all the Relation classes. Only the Ranking classes will need to know
10
+ about directions.
11
+ * We can also do things like optimize away an Order that is not
12
+ wrapped by a Limit/Offset if it is wrapped in Join or Set relation.
13
+ We can do this because joining sorted relations results in
14
+ an undefined sort order depending on the algorithm used to join
15
+ the tuples. The correct approach to get unambiguous results is to
16
+ wrap the Join in an Order.
17
+ * The Reverse class will probably not be needed either. All we need is
18
+ for the #reverse method to create a new Order with the directions
19
+ reversed.
20
+ * Remove the knowledge of directions from materialized relations
21
+ and instead wrap materialized relations in the Order object
22
+ if any.
23
+
24
+ * Add further optimizations:
25
+ * Operation Order:
26
+ * Projection should follow Rename
27
+ * When a Projection contains a Restriction, wrap the Projection
28
+ in the Restriction, projecting away any attributes not used in
29
+ the restriction. If there are any remaining attributes, then
30
+ wrap the operation in a Projection removing those attributes.
31
+ * If all attributes are being used in the Restriction do nothing
32
+ * When a Projection contains a Join, wrap the Join with a Projection
33
+ of all the headers, minus those used in the Join. If there were
34
+ any used, then wrap the whole operation in a Projection with
35
+ the remaining attributes.
36
+ * If all the attributes are used in the Join, do nothing
37
+ * Try to use the same approach for Product
38
+ * Test if it's possible to fully distribute projections over
39
+ joins rather than splitting it up like this.
40
+ * Restriction should follow Projection
41
+ * Restriction optimizations:
42
+ * "attr > ? OR attr > ?" -> "attr > ?", with the least restrictive value
43
+ * Do the same for >=, <, <=
44
+ * "attr > ? AND attr > ?" -> "attr > ?", with the most restrictive value
45
+ * Do the same for >=, <, <=
46
+ * "attr > 5 OR attr == 5" -> "attr >= 5"
47
+ * "attr < 5 OR attr == 5" -> "attr <= 5"
48
+ * "attr" = "string" AND "attr" =~ /string/ -> "attr" = "string"
49
+ * If the regexp matches the constant, then it should be
50
+ optimized down to a constant match. If it does not match
51
+ then it should be optimized to False.
52
+ * Constant folding, eg:
53
+ "attr1 > attr2 AND attr1 = 5" -> "5 > attr2 AND attr1 = 5"
54
+ * This will probably only work across Conjunctions.
55
+ * "attr > 5 AND attr = 6" -> "attr = 6", because attr must be
56
+ equal to 6. this will probably be related to constant folding;
57
+ the first expression will become 6 > 5, which evaluates to
58
+ True, then the expression is True AND attr = 6, which simplifies
59
+ down to attr = 6.
60
+ * "attr < 5 AND attr = 6" -> "False", because attr must be equal to
61
+ 6, and 6 < 5 evaluates to False. False AND attr = 6 simplifies
62
+ down to False.
63
+ * Figure out how to reorganize the Restriction predicates so that all
64
+ similar operations are closer together to allow more efficient
65
+ optimizations. This would allow optimizations of stuff like this:
66
+
67
+ "attr1 = ? OR attr2 = ? OR attr1 = ?"
68
+
69
+ Into:
70
+
71
+ "attr1 IN(..) OR attr2 = ?"
72
+ * Rename should distribute over Join, Product and Set operations
73
+ * The goal should be to push Rename as close to the base tables
74
+ as possible so that the names of attribute will be consistent
75
+ throughout the whole tree.
76
+ * A Union of relations with the same base, header, and restrictions should
77
+ try to combine into a single relation with the restrictions using OR.
78
+ * An Intersection of relations with the same base, header, and restrictions
79
+ should try to combine into a single relation with the restrictions using
80
+ AND.
81
+ * A Difference of relations with the same base and restrictions should
82
+ try to combine into a single relation with the restrictions using NOT.
83
+ * Join Optimizations
84
+ * When a Join contains a Join, and the size of the base relations is
85
+ known, join the smallest with the largest, and then join that result
86
+ with the remaining relation.
87
+ * Make sure the smallest relation (with a known size) is always the
88
+ right-most operation.
89
+
90
+ * Allow Inclusion match to accept a Relation
91
+ * Ensure that Inclusion can have the left/right be an Array of
92
+ Attributes.
93
+ * Consider transforming the value provided to an Inclusion into
94
+ a Relation.
95
+
96
+ * Update Attributes so that constraints are modelled using predicates,
97
+ so that when "join-ability" is tested, the predicates can just be
98
+ compared for equality.
99
+ * Create an object that can wrap a predicate, and if it fails it will
100
+ set the object's error state, and then propagate the status to the
101
+ caller. This will allow a "complex" predicate to set the errors
102
+ on tuples, while still allowing all the same objects to be used.
103
+
104
+ * Add Relation#antijoin
105
+
106
+ * Add Relation#nest and Relation#unnest
107
+
108
+ * Add aliases for some common operations in Method classes, eg:
109
+ * Predicates:
110
+ * Alias #== to #eq (may break alot)
111
+ * Alias #!= to #ne (in 1.9 only)
112
+ * Alias #>= to #gte
113
+ * Alias #> to #gt
114
+ * Alias #<= to #lte
115
+ * Alias #< to #lt
116
+ * Alias #=~ to #match
117
+ * Direction:
118
+ * Alias #@+ to #asc
119
+ * Alias #@- to #desc
120
+
121
+ * Update memoization to take into account the arguments passed into
122
+ the method. It should memoize differently for different
123
+ methods. Perhaps it could have a special case for methods
124
+ with a 0-arity vs n-arity methods, but it needs to handle cases
125
+ like with #hash that accept no args, and #optimize that accepts
126
+ 1 arg.