rules_engine 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (461) hide show
  1. data/README.textile +178 -0
  2. data/VERSION +1 -1
  3. data/lib/rules_engine.rb +17 -1
  4. data/lib/rules_engine/discovery.rb +2 -3
  5. data/lib/rules_engine/job.rb +120 -0
  6. data/lib/rules_engine/rule.rb +49 -24
  7. data/lib/rules_engine/rule_outcome.rb +1 -2
  8. data/lib/rules_engine_view/alerts.rb +56 -0
  9. data/lib/rules_engine_view/boxes.rb +32 -0
  10. data/lib/rules_engine_view/buttons.rb +91 -0
  11. data/lib/rules_engine_view/defer.rb +27 -0
  12. data/lib/rules_engine_view/form_builder.rb +63 -0
  13. data/lib/rules_engine_view/form_fields.rb +41 -0
  14. data/lib/rules_engine_view/form_styles.rb +107 -0
  15. data/lib/rules_engine_view/model_loader.rb +71 -0
  16. data/lib/rules_engine_view/navigate.rb +44 -0
  17. data/rails_generators/manifests/rules_engine.rb +392 -0
  18. data/rails_generators/manifests/rules_engine.yml +98 -0
  19. data/rails_generators/manifests/rules_engine_complex.rb +30 -0
  20. data/rails_generators/manifests/rules_engine_complex.yml +25 -0
  21. data/rails_generators/manifests/rules_engine_simple.rb +26 -0
  22. data/rails_generators/manifests/rules_engine_simple.yml +22 -0
  23. data/rails_generators/rules_engine_generator.rb +49 -23
  24. data/rails_generators/templates/app/controllers/re_jobs_controller.rb +8 -6
  25. data/rails_generators/templates/app/controllers/re_pipeline_jobs_controller.rb +6 -7
  26. data/rails_generators/templates/app/controllers/re_pipelines_controller.rb +36 -16
  27. data/rails_generators/templates/app/controllers/re_rules_controller.rb +49 -51
  28. data/rails_generators/templates/app/helpers/re_pipeline_helper.rb +0 -15
  29. data/rails_generators/templates/app/models/re_job.rb +55 -62
  30. data/rails_generators/templates/app/models/re_job_audit.rb +3 -7
  31. data/rails_generators/templates/app/models/re_pipeline.rb +1 -23
  32. data/rails_generators/templates/app/models/re_pipeline_activated.rb +3 -0
  33. data/rails_generators/templates/app/models/re_pipeline_activated_observer.rb +4 -4
  34. data/rails_generators/templates/app/models/re_pipeline_base.rb +5 -5
  35. data/rails_generators/templates/app/models/re_rule.rb +71 -24
  36. data/rails_generators/templates/app/models/re_rule_expected_outcome.rb +30 -0
  37. data/rails_generators/templates/app/rules/complex_rule.rb +133 -0
  38. data/rails_generators/templates/app/rules/simple_rule.rb +77 -0
  39. data/rails_generators/templates/app/views/layouts/rules_engine.html.erb +40 -0
  40. data/rails_generators/templates/app/views/re_jobs/_empty.html.erb +7 -4
  41. data/rails_generators/templates/app/views/re_jobs/_index_large.html.erb +79 -0
  42. data/rails_generators/templates/app/views/re_jobs/_index_small.html.erb +42 -0
  43. data/rails_generators/templates/app/views/re_jobs/_show.html.erb +11 -16
  44. data/rails_generators/templates/app/views/re_jobs/index.html.erb +11 -19
  45. data/rails_generators/templates/app/views/re_jobs/index.js.erb +9 -6
  46. data/rails_generators/templates/app/views/re_jobs/show.html.erb +10 -8
  47. data/rails_generators/templates/app/views/re_jobs/show.js.erb +4 -1
  48. data/rails_generators/templates/app/views/re_pipeline_jobs/index.html.erb +10 -16
  49. data/rails_generators/templates/app/views/re_pipeline_jobs/index.js.erb +10 -8
  50. data/rails_generators/templates/app/views/re_pipelines/_change.html.erb +17 -15
  51. data/rails_generators/templates/app/views/re_pipelines/_change_actions.html.erb +12 -12
  52. data/rails_generators/templates/app/views/re_pipelines/_confirm.html.erb +14 -15
  53. data/rails_generators/templates/app/views/re_pipelines/_edit.html.erb +7 -8
  54. data/rails_generators/templates/app/views/re_pipelines/_empty.html.erb +4 -4
  55. data/rails_generators/templates/app/views/re_pipelines/_index.html.erb +25 -19
  56. data/rails_generators/templates/app/views/re_pipelines/_new.html.erb +6 -6
  57. data/rails_generators/templates/app/views/re_pipelines/_show.html.erb +22 -18
  58. data/rails_generators/templates/app/views/re_pipelines/change.html.erb +8 -8
  59. data/rails_generators/templates/app/views/re_pipelines/create.js.erb +6 -5
  60. data/rails_generators/templates/app/views/re_pipelines/edit.html.erb +5 -4
  61. data/rails_generators/templates/app/views/re_pipelines/edit.js.erb +6 -3
  62. data/rails_generators/templates/app/views/re_pipelines/index.html.erb +65 -9
  63. data/rails_generators/templates/app/views/re_pipelines/index.js.erb +18 -0
  64. data/rails_generators/templates/app/views/re_pipelines/new.html.erb +2 -2
  65. data/rails_generators/templates/app/views/re_pipelines/new.js.erb +3 -3
  66. data/rails_generators/templates/app/views/re_pipelines/show.html.erb +17 -19
  67. data/rails_generators/templates/app/views/re_pipelines/template.html.erb +198 -0
  68. data/rails_generators/templates/app/views/re_pipelines/update.js.erb +7 -6
  69. data/rails_generators/templates/app/views/re_rule_definitions/complex_rule/_edit.html.erb +7 -0
  70. data/rails_generators/templates/app/views/re_rule_definitions/complex_rule/_help.html.erb +1 -0
  71. data/rails_generators/templates/app/views/re_rule_definitions/complex_rule/_new.html.erb +7 -0
  72. data/rails_generators/templates/app/views/re_rule_definitions/complex_rule/_pipeline.html.erb +22 -0
  73. data/rails_generators/templates/app/views/re_rule_definitions/complex_rule/_script.html.erb +26 -0
  74. data/rails_generators/templates/app/views/re_rule_definitions/complex_rule/_title.html.erb +7 -0
  75. data/rails_generators/templates/app/views/re_rule_definitions/complex_rule/_word.html.erb +13 -0
  76. data/rails_generators/templates/app/views/re_rule_definitions/complex_rule/_words.html.erb +16 -0
  77. data/rails_generators/templates/app/views/re_rule_definitions/simple_rule/_edit.html.erb +1 -0
  78. data/rails_generators/templates/app/views/re_rule_definitions/simple_rule/_form.html.erb +16 -0
  79. data/rails_generators/templates/app/views/re_rule_definitions/simple_rule/_help.html.erb +1 -0
  80. data/rails_generators/templates/app/views/re_rule_definitions/simple_rule/_new.html.erb +1 -0
  81. data/rails_generators/templates/app/views/re_rules/_change.html.erb +25 -25
  82. data/rails_generators/templates/app/views/re_rules/_edit.html.erb +7 -16
  83. data/rails_generators/templates/app/views/re_rules/_empty.html.erb +4 -4
  84. data/rails_generators/templates/app/views/re_rules/_empty.js.erb +3 -3
  85. data/rails_generators/templates/app/views/re_rules/_error.html.erb +2 -0
  86. data/rails_generators/templates/app/views/re_rules/_help.html.erb +5 -5
  87. data/rails_generators/templates/app/views/re_rules/_index.html.erb +15 -15
  88. data/rails_generators/templates/app/views/re_rules/_menu.html.erb +32 -36
  89. data/rails_generators/templates/app/views/re_rules/_new.html.erb +9 -18
  90. data/rails_generators/templates/app/views/re_rules/_show.html.erb +17 -17
  91. data/rails_generators/templates/app/views/re_rules/destroy.js.erb +7 -6
  92. data/rails_generators/templates/app/views/re_rules/edit.html.erb +6 -5
  93. data/rails_generators/templates/app/views/re_rules/edit.js.erb +6 -3
  94. data/rails_generators/templates/app/views/re_rules/error.html.erb +6 -5
  95. data/rails_generators/templates/app/views/re_rules/error.js.erb +6 -2
  96. data/rails_generators/templates/app/views/re_rules/help.html.erb +6 -5
  97. data/rails_generators/templates/app/views/re_rules/help.js.erb +3 -1
  98. data/rails_generators/templates/app/views/re_rules/new.html.erb +14 -10
  99. data/rails_generators/templates/app/views/re_rules/new.js.erb +7 -3
  100. data/rails_generators/templates/app/views/re_rules/update.js.erb +11 -10
  101. data/rails_generators/templates/db/migrate/20100308225008_create_re_pipelines.rb +13 -10
  102. data/rails_generators/templates/doc/README.rules_engine +151 -0
  103. data/rails_generators/templates/doc/README.rules_engine_features +67 -0
  104. data/rails_generators/templates/doc/README.rules_engine_view +90 -0
  105. data/rails_generators/templates/features/re_pipeline/lookup.feature +16 -0
  106. data/rails_generators/templates/features/step_definitions/common/re_debug_steps.rb +14 -0
  107. data/rails_generators/templates/features/step_definitions/common/re_error_steps.rb +77 -0
  108. data/rails_generators/templates/features/step_definitions/common/re_form_steps.rb +59 -0
  109. data/rails_generators/templates/features/step_definitions/common/re_model_steps.rb +85 -0
  110. data/rails_generators/templates/features/step_definitions/common/re_user_steps.rb +52 -0
  111. data/rails_generators/templates/features/step_definitions/common/re_view_steps.rb +49 -0
  112. data/rails_generators/templates/features/support/blueprint_re_pipelines.rb +20 -0
  113. data/rails_generators/templates/features/support/rules_engine.rb +28 -0
  114. data/rails_generators/templates/lib/tasks/re_execute.rake +19 -0
  115. data/rails_generators/templates/public/javascripts/jquery-1.4.2.min.js +154 -0
  116. data/rails_generators/templates/public/javascripts/jquery.autocomplete.pack.js +13 -0
  117. data/rails_generators/templates/public/javascripts/jquery.blockUI.js +486 -0
  118. data/rails_generators/templates/public/javascripts/jquery.fancybox-1.3.1.js +1077 -0
  119. data/rails_generators/templates/public/javascripts/re_job_index.js +75 -0
  120. data/rails_generators/templates/public/javascripts/re_pipeline_change.js +85 -96
  121. data/rails_generators/templates/public/javascripts/re_pipeline_index.js +23 -7
  122. data/rails_generators/templates/public/javascripts/re_pipeline_index_jobs.js +10 -0
  123. data/rails_generators/templates/public/javascripts/re_pipeline_new.js +15 -19
  124. data/rails_generators/templates/public/javascripts/re_pipeline_show_jobs.js +11 -0
  125. data/rails_generators/templates/public/javascripts/re_view.js +132 -0
  126. data/rails_generators/templates/public/stylesheets/blueprint/ie.css +35 -0
  127. data/rails_generators/templates/public/stylesheets/blueprint/plugins/buttons/icons/cross.png +0 -0
  128. data/rails_generators/templates/public/stylesheets/blueprint/plugins/buttons/icons/key.png +0 -0
  129. data/rails_generators/templates/public/stylesheets/blueprint/plugins/buttons/icons/tick.png +0 -0
  130. data/rails_generators/templates/public/stylesheets/blueprint/plugins/buttons/readme.txt +32 -0
  131. data/rails_generators/templates/public/stylesheets/blueprint/plugins/buttons/screen.css +97 -0
  132. data/rails_generators/templates/public/stylesheets/blueprint/plugins/fancy-type/readme.txt +14 -0
  133. data/rails_generators/templates/public/stylesheets/blueprint/plugins/fancy-type/screen.css +71 -0
  134. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/icons/doc.png +0 -0
  135. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/icons/email.png +0 -0
  136. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/icons/external.png +0 -0
  137. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/icons/feed.png +0 -0
  138. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/icons/im.png +0 -0
  139. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  140. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/icons/visited.png +0 -0
  141. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/icons/xls.png +0 -0
  142. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/readme.txt +18 -0
  143. data/rails_generators/templates/public/stylesheets/blueprint/plugins/link-icons/screen.css +40 -0
  144. data/rails_generators/templates/public/stylesheets/blueprint/plugins/rtl/readme.txt +10 -0
  145. data/rails_generators/templates/public/stylesheets/blueprint/plugins/rtl/screen.css +110 -0
  146. data/rails_generators/templates/public/stylesheets/blueprint/print.css +29 -0
  147. data/rails_generators/templates/public/stylesheets/blueprint/screen.css +258 -0
  148. data/rails_generators/templates/public/stylesheets/blueprint/src/forms.css +65 -0
  149. data/rails_generators/templates/public/stylesheets/blueprint/src/grid.css +280 -0
  150. data/rails_generators/templates/public/stylesheets/blueprint/src/grid.png +0 -0
  151. data/rails_generators/templates/public/stylesheets/blueprint/src/ie.css +76 -0
  152. data/rails_generators/templates/public/stylesheets/blueprint/src/print.css +85 -0
  153. data/rails_generators/templates/public/stylesheets/blueprint/src/reset.css +45 -0
  154. data/rails_generators/templates/public/stylesheets/blueprint/src/typography.css +106 -0
  155. data/rails_generators/templates/public/stylesheets/fancybox/blank.gif +0 -0
  156. data/rails_generators/templates/public/stylesheets/fancybox/fancy_close.png +0 -0
  157. data/rails_generators/templates/public/stylesheets/fancybox/fancy_loading.png +0 -0
  158. data/rails_generators/templates/public/stylesheets/fancybox/fancy_nav_left.png +0 -0
  159. data/rails_generators/templates/public/stylesheets/fancybox/fancy_nav_right.png +0 -0
  160. data/rails_generators/templates/public/stylesheets/fancybox/fancy_shadow_e.png +0 -0
  161. data/rails_generators/templates/public/stylesheets/fancybox/fancy_shadow_n.png +0 -0
  162. data/rails_generators/templates/public/stylesheets/fancybox/fancy_shadow_ne.png +0 -0
  163. data/rails_generators/templates/public/stylesheets/fancybox/fancy_shadow_nw.png +0 -0
  164. data/rails_generators/templates/public/stylesheets/fancybox/fancy_shadow_s.png +0 -0
  165. data/rails_generators/templates/public/stylesheets/fancybox/fancy_shadow_se.png +0 -0
  166. data/rails_generators/templates/public/stylesheets/fancybox/fancy_shadow_sw.png +0 -0
  167. data/rails_generators/templates/public/stylesheets/fancybox/fancy_shadow_w.png +0 -0
  168. data/rails_generators/templates/public/stylesheets/fancybox/fancy_title_left.png +0 -0
  169. data/rails_generators/templates/public/stylesheets/fancybox/fancy_title_main.png +0 -0
  170. data/rails_generators/templates/public/stylesheets/fancybox/fancy_title_over.png +0 -0
  171. data/rails_generators/templates/public/stylesheets/fancybox/fancy_title_right.png +0 -0
  172. data/rails_generators/templates/public/stylesheets/fancybox/fancybox-x.png +0 -0
  173. data/rails_generators/templates/public/stylesheets/fancybox/fancybox-y.png +0 -0
  174. data/rails_generators/templates/public/stylesheets/fancybox/fancybox.png +0 -0
  175. data/rails_generators/templates/public/stylesheets/fancybox/jquery.fancybox-1.3.1.css +363 -0
  176. data/rails_generators/templates/public/stylesheets/jquery.autocomplete.css +53 -0
  177. data/rails_generators/templates/public/stylesheets/re_view.css +131 -0
  178. data/rails_generators/templates/public/stylesheets/re_view_box.css +119 -0
  179. data/rails_generators/templates/public/stylesheets/{re_pipeline → re_view_box}/accept.png +0 -0
  180. data/rails_generators/templates/public/stylesheets/{re_pipeline → re_view_box}/exclamation.png +0 -0
  181. data/rails_generators/templates/public/stylesheets/re_view_box/shadowbox.jpg +0 -0
  182. data/rails_generators/templates/public/stylesheets/re_view_box/shadowbox.png +0 -0
  183. data/rails_generators/templates/public/stylesheets/re_view_box/whitebox.jpg +0 -0
  184. data/rails_generators/templates/public/stylesheets/re_view_button.css +118 -0
  185. data/rails_generators/templates/public/stylesheets/re_view_button/checked-off.gif +0 -0
  186. data/rails_generators/templates/public/stylesheets/re_view_button/checked-on.gif +0 -0
  187. data/rails_generators/templates/public/{images/re_rule_class/add-18.png → stylesheets/re_view_button/icon-add.png} +0 -0
  188. data/rails_generators/templates/public/{images/re_pipeline/destroy-18.png → stylesheets/re_view_button/icon-delete.png} +0 -0
  189. data/rails_generators/templates/public/stylesheets/re_view_button/oval-blue-left.gif +0 -0
  190. data/rails_generators/templates/public/stylesheets/re_view_button/oval-blue-right.gif +0 -0
  191. data/rails_generators/templates/public/stylesheets/re_view_button/oval-gray-left.gif +0 -0
  192. data/rails_generators/templates/public/stylesheets/re_view_button/oval-gray-right.gif +0 -0
  193. data/rails_generators/templates/public/stylesheets/re_view_button/oval-green-left.gif +0 -0
  194. data/rails_generators/templates/public/stylesheets/re_view_button/oval-green-right.gif +0 -0
  195. data/rails_generators/templates/public/stylesheets/re_view_button/oval-orange-left.gif +0 -0
  196. data/rails_generators/templates/public/stylesheets/re_view_button/oval-orange-right.gif +0 -0
  197. data/rails_generators/templates/public/stylesheets/re_view_button/oval-red-left.gif +0 -0
  198. data/rails_generators/templates/public/stylesheets/re_view_button/oval-red-right.gif +0 -0
  199. data/rails_generators/templates/public/stylesheets/re_view_error.css +60 -0
  200. data/rails_generators/templates/public/{images/re_job/error-18.png → stylesheets/re_view_error/re-alert-close.png} +0 -0
  201. data/rails_generators/templates/public/stylesheets/re_view_form.css +120 -0
  202. data/rails_generators/templates/public/stylesheets/re_view_navigate.css +46 -0
  203. data/rails_generators/templates/public/stylesheets/re_view_navigate/breadcrumb.png +0 -0
  204. data/rails_generators/templates/public/stylesheets/re_view_table.css +137 -0
  205. data/rails_generators/templates/public/stylesheets/rules_engine.css +520 -0
  206. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/error-14.png +0 -0
  207. data/rails_generators/templates/public/{images/re_pipeline/__destroy-18.png → stylesheets/rules_engine/re_job/error-18.png} +0 -0
  208. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/error-25.png +0 -0
  209. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/error-48.png +0 -0
  210. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/info-14.png +0 -0
  211. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/info-18.png +0 -0
  212. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/info-25.png +0 -0
  213. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/info-48.png +0 -0
  214. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/list-14.png +0 -0
  215. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/list-18.png +0 -0
  216. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/list-25.png +0 -0
  217. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/list-48.png +0 -0
  218. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/loadingAnimation.gif +0 -0
  219. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/next-disabled-14.png +0 -0
  220. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/next-disabled-18.png +0 -0
  221. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/next-disabled-25.png +0 -0
  222. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/next-disabled-48.png +0 -0
  223. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/next-enabled-14.png +0 -0
  224. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/next-enabled-18.png +0 -0
  225. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/next-enabled-25.png +0 -0
  226. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/next-enabled-48.png +0 -0
  227. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/prev-disabled-14.png +0 -0
  228. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/prev-disabled-18.png +0 -0
  229. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/prev-disabled-25.png +0 -0
  230. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/prev-disabled-48.png +0 -0
  231. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/prev-enabled-14.png +0 -0
  232. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/prev-enabled-18.png +0 -0
  233. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/prev-enabled-25.png +0 -0
  234. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/prev-enabled-48.png +0 -0
  235. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/success-14.png +0 -0
  236. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/success-18.png +0 -0
  237. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/success-25.png +0 -0
  238. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_job/success-48.png +0 -0
  239. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/activate-14.png +0 -0
  240. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/activate-18.png +0 -0
  241. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/activate-25.png +0 -0
  242. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/activate-48.png +0 -0
  243. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/alert-14.png +0 -0
  244. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/alert-18.png +0 -0
  245. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/alert-25.png +0 -0
  246. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/alert-48.png +0 -0
  247. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/change-14.png +0 -0
  248. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/change-18.png +0 -0
  249. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/change-25.png +0 -0
  250. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/change-48.png +0 -0
  251. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/changed-14.png +0 -0
  252. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/changed-18.png +0 -0
  253. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/changed-25.png +0 -0
  254. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/changed-48.png +0 -0
  255. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/current-14.png +0 -0
  256. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/current-18.png +0 -0
  257. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/current-25.png +0 -0
  258. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/current-48.png +0 -0
  259. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/deactivate-14.png +0 -0
  260. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/deactivate-18.png +0 -0
  261. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/deactivate-25.png +0 -0
  262. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/deactivate-48.png +0 -0
  263. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/destroy-14.png +0 -0
  264. data/rails_generators/templates/public/{images/re_rule → stylesheets/rules_engine/re_pipeline}/destroy-18.png +0 -0
  265. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/destroy-25.png +0 -0
  266. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/destroy-48.png +0 -0
  267. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/draft-14.png +0 -0
  268. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/draft-18.png +0 -0
  269. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/draft-25.png +0 -0
  270. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/draft-48.png +0 -0
  271. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/edit-14.png +0 -0
  272. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/edit-18.png +0 -0
  273. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/edit-25.png +0 -0
  274. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/edit-48.png +0 -0
  275. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/list-14.png +0 -0
  276. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/list-18.png +0 -0
  277. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/list-25.png +0 -0
  278. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/list-48.png +0 -0
  279. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/list-down.png +0 -0
  280. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/list-right.png +0 -0
  281. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/new-14.png +0 -0
  282. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/new-18.png +0 -0
  283. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/new-25.png +0 -0
  284. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/new-48.png +0 -0
  285. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/revert-14.png +0 -0
  286. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/revert-18.png +0 -0
  287. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/revert-25.png +0 -0
  288. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/revert-48.png +0 -0
  289. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/show-14.png +0 -0
  290. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/show-18.png +0 -0
  291. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/show-25.png +0 -0
  292. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/show-48.png +0 -0
  293. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/verify-14.png +0 -0
  294. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/verify-18.png +0 -0
  295. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/verify-25.png +0 -0
  296. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_pipeline/verify-48.png +0 -0
  297. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/destroy-14.png +0 -0
  298. data/rails_generators/templates/public/stylesheets/rules_engine/re_rule/destroy-18.png +0 -0
  299. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/destroy-25.png +0 -0
  300. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/destroy-48.png +0 -0
  301. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/edit-14.png +0 -0
  302. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/edit-18.png +0 -0
  303. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/edit-25.png +0 -0
  304. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/edit-48.png +0 -0
  305. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-down-14.png +0 -0
  306. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-down-18.png +0 -0
  307. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-down-25.png +0 -0
  308. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-down-48.png +0 -0
  309. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-down-off-14.png +0 -0
  310. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-down-off-18.png +0 -0
  311. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-down-off-25.png +0 -0
  312. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-down-off-48.png +0 -0
  313. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-up-14.png +0 -0
  314. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-up-18.png +0 -0
  315. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-up-25.png +0 -0
  316. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-up-48.png +0 -0
  317. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-up-off-14.png +0 -0
  318. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-up-off-18.png +0 -0
  319. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-up-off-25.png +0 -0
  320. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/move-up-off-48.png +0 -0
  321. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/next-change-14.png +0 -0
  322. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/next-change-18.png +0 -0
  323. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/next-change-25.png +0 -0
  324. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/next-change-48.png +0 -0
  325. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/next-show-14.png +0 -0
  326. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/next-show-18.png +0 -0
  327. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/next-show-25.png +0 -0
  328. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/next-show-48.png +0 -0
  329. data/rails_generators/templates/public/{images/re_rule/goto-pipeline-14.png → stylesheets/rules_engine/re_rule/start-pipeline-14.png} +0 -0
  330. data/rails_generators/templates/public/{images/re_rule/goto-pipeline-18.png → stylesheets/rules_engine/re_rule/start-pipeline-18.png} +0 -0
  331. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/stop-failure-14.png +0 -0
  332. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/stop-failure-18.png +0 -0
  333. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/stop-failure-25.png +0 -0
  334. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/stop-failure-48.png +0 -0
  335. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/stop-success-14.png +0 -0
  336. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/stop-success-18.png +0 -0
  337. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/stop-success-25.png +0 -0
  338. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/stop-success-48.png +0 -0
  339. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/valid-14.png +0 -0
  340. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/valid-18.png +0 -0
  341. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/valid-25.png +0 -0
  342. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/valid-48.png +0 -0
  343. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/verify-14.png +0 -0
  344. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/verify-18.png +0 -0
  345. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/verify-25.png +0 -0
  346. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule/verify-48.png +0 -0
  347. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/add-14.png +0 -0
  348. data/rails_generators/templates/public/stylesheets/rules_engine/re_rule_class/add-18.png +0 -0
  349. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/add-25.png +0 -0
  350. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/add-48.png +0 -0
  351. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/help-14.png +0 -0
  352. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/help-18.png +0 -0
  353. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/help-25.png +0 -0
  354. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/help-48.png +0 -0
  355. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/list-down.png +0 -0
  356. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/list-right.png +0 -0
  357. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/new-14.png +0 -0
  358. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/new-18.png +0 -0
  359. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/new-25.png +0 -0
  360. data/rails_generators/templates/public/{images → stylesheets/rules_engine}/re_rule_class/new-48.png +0 -0
  361. data/rails_generators/templates/spec/controllers/re_jobs_controller_spec.rb +50 -0
  362. data/rails_generators/templates/spec/controllers/re_pipeline_jobs_controller_spec.rb +37 -0
  363. data/rails_generators/templates/spec/controllers/re_pipelines_controller_spec.rb +423 -83
  364. data/rails_generators/templates/spec/controllers/re_rules_controller_spec.rb +390 -0
  365. data/rails_generators/templates/spec/helpers/re_pipeline_helper_spec.rb +29 -0
  366. data/rails_generators/templates/spec/lib/rules/complex_rule_spec.rb +336 -0
  367. data/rails_generators/templates/spec/lib/rules/simple_rule_spec.rb +168 -0
  368. data/rails_generators/templates/spec/models/re_job_audit_spec.rb +1 -2
  369. data/rails_generators/templates/spec/models/re_job_spec.rb +157 -1
  370. data/rails_generators/templates/spec/models/re_pipeline_activated_observer_spec.rb +28 -0
  371. data/rails_generators/templates/spec/models/re_pipeline_activated_spec.rb +65 -0
  372. data/rails_generators/templates/spec/models/re_pipeline_base_spec.rb +37 -30
  373. data/rails_generators/templates/spec/models/re_pipeline_spec.rb +33 -1
  374. data/rails_generators/templates/spec/models/re_rule_expected_outcome_spec.rb +73 -0
  375. data/rails_generators/templates/spec/models/re_rule_spec.rb +266 -68
  376. data/rails_generators/templates/spec/support/rules_engine_macros.rb +23 -0
  377. data/spec/railsenv/app/controllers/application_controller.rb +10 -0
  378. data/spec/railsenv/app/rules/mock_rule.rb +11 -0
  379. data/spec/railsenv/config/boot.rb +110 -0
  380. data/spec/railsenv/config/database.yml +22 -0
  381. data/spec/railsenv/config/environment.rb +41 -0
  382. data/spec/railsenv/config/environments/development.rb +17 -0
  383. data/spec/railsenv/config/environments/production.rb +28 -0
  384. data/spec/railsenv/config/environments/test.rb +28 -0
  385. data/spec/railsenv/config/initializers/backtrace_silencers.rb +7 -0
  386. data/spec/railsenv/config/initializers/inflections.rb +10 -0
  387. data/spec/railsenv/config/initializers/mime_types.rb +5 -0
  388. data/spec/railsenv/config/initializers/new_rails_defaults.rb +19 -0
  389. data/spec/railsenv/config/initializers/session_store.rb +15 -0
  390. data/spec/railsenv/config/locales/en.yml +5 -0
  391. data/spec/railsenv/config/routes.rb +43 -0
  392. data/spec/railsenv/db/test.sqlite3 +1 -0
  393. data/spec/railsenv/log/debug.log +1 -0
  394. data/spec/railsenv/log/test.log +1 -0
  395. data/spec/rcov.opts +3 -0
  396. data/spec/rules_engine/cache_spec.rb +18 -0
  397. data/spec/rules_engine/discovery_spec.rb +32 -0
  398. data/spec/rules_engine/job_spec.rb +266 -0
  399. data/spec/rules_engine/rule_spec.rb +76 -0
  400. data/spec/rules_engine_view/alerts_spec.rb +142 -0
  401. data/spec/rules_engine_view/boxes_spec.rb +33 -0
  402. data/spec/rules_engine_view/buttons_spec.rb +123 -0
  403. data/spec/rules_engine_view/defer_spec.rb +50 -0
  404. data/spec/rules_engine_view/form_builder_fields_spec.rb +161 -0
  405. data/spec/rules_engine_view/form_builder_spec.rb +17 -0
  406. data/spec/rules_engine_view/form_fields_spec.rb +180 -0
  407. data/spec/rules_engine_view/form_styles_spec.rb +254 -0
  408. data/spec/rules_engine_view/model_loader_spec.rb +177 -0
  409. data/spec/rules_engine_view/navigate_spec.rb +55 -0
  410. data/spec/spec.opts +4 -1
  411. data/spec/spec_helper.rb +16 -4
  412. metadata +374 -213
  413. data/README.rdoc +0 -17
  414. data/lib/rules_engine/job_runner.rb +0 -115
  415. data/rails_generators/USAGE +0 -68
  416. data/rails_generators/blacklist_word.yml +0 -6
  417. data/rails_generators/blacklist_word_manifest.rb +0 -26
  418. data/rails_generators/generator.yml +0 -58
  419. data/rails_generators/generator_manifest.rb +0 -282
  420. data/rails_generators/simple.yml +0 -6
  421. data/rails_generators/simple_manifest.rb +0 -21
  422. data/rails_generators/template_manifest.rb +0 -13
  423. data/rails_generators/templates/app/models/re_rule_outcome.rb +0 -40
  424. data/rails_generators/templates/app/rules/blacklist_word.rb +0 -89
  425. data/rails_generators/templates/app/rules/simple.rb +0 -44
  426. data/rails_generators/templates/app/rules/template.rb +0 -51
  427. data/rails_generators/templates/app/views/layouts/_blockUI.html.erb +0 -3
  428. data/rails_generators/templates/app/views/re_jobs/_index.html.erb +0 -66
  429. data/rails_generators/templates/app/views/re_pipeline_jobs/_empty.html.erb +0 -11
  430. data/rails_generators/templates/app/views/re_pipeline_jobs/_index.html.erb +0 -41
  431. data/rails_generators/templates/app/views/re_pipelines/_show_actions.html.erb +0 -3
  432. data/rails_generators/templates/app/views/re_rule_definitions/blacklist_word/_edit.html.erb +0 -7
  433. data/rails_generators/templates/app/views/re_rule_definitions/blacklist_word/_help.html.erb +0 -2
  434. data/rails_generators/templates/app/views/re_rule_definitions/blacklist_word/_new.html.erb +0 -7
  435. data/rails_generators/templates/app/views/re_rule_definitions/blacklist_word/_pipeline.html.erb +0 -18
  436. data/rails_generators/templates/app/views/re_rule_definitions/blacklist_word/_script.html.erb +0 -26
  437. data/rails_generators/templates/app/views/re_rule_definitions/blacklist_word/_title.html.erb +0 -6
  438. data/rails_generators/templates/app/views/re_rule_definitions/blacklist_word/_word.html.erb +0 -12
  439. data/rails_generators/templates/app/views/re_rule_definitions/blacklist_word/_words.html.erb +0 -16
  440. data/rails_generators/templates/app/views/re_rule_definitions/simple/_edit.html.erb +0 -6
  441. data/rails_generators/templates/app/views/re_rule_definitions/simple/_help.html.erb +0 -2
  442. data/rails_generators/templates/app/views/re_rule_definitions/simple/_new.html.erb +0 -6
  443. data/rails_generators/templates/app/views/re_rule_definitions/template/_edit.html.erb +0 -6
  444. data/rails_generators/templates/app/views/re_rule_definitions/template/_help.html.erb +0 -2
  445. data/rails_generators/templates/app/views/re_rule_definitions/template/_new.html.erb +0 -6
  446. data/rails_generators/templates/lib/tasks/re_runner.rake +0 -12
  447. data/rails_generators/templates/public/images/re_job/goto-16.png +0 -0
  448. data/rails_generators/templates/public/images/re_pipeline/__destroy-14.png +0 -0
  449. data/rails_generators/templates/public/images/re_pipeline/__destroy-25.png +0 -0
  450. data/rails_generators/templates/public/images/re_pipeline/__destroy-48.png +0 -0
  451. data/rails_generators/templates/public/images/re_rule/__destroy-14.png +0 -0
  452. data/rails_generators/templates/public/images/re_rule/__destroy-18.png +0 -0
  453. data/rails_generators/templates/public/images/re_rule/__destroy-25.png +0 -0
  454. data/rails_generators/templates/public/images/re_rule/__destroy-48.png +0 -0
  455. data/rails_generators/templates/public/javascripts/re_jobs.js +0 -59
  456. data/rails_generators/templates/public/javascripts/re_pipeline.js +0 -54
  457. data/rails_generators/templates/public/javascripts/re_pipeline_jobs.js +0 -61
  458. data/rails_generators/templates/public/stylesheets/re_pipeline.css +0 -509
  459. data/rails_generators/templates/spec/models/re_rule_outcome_spec.rb +0 -97
  460. data/rails_generators/templates/spec/support/blueprint_re_pipelines.rb +0 -11
  461. data/spec/rules_engine_spec.rb +0 -7
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  describe RePipelineBase do
4
4
  def valid_attributes
5
5
  {
6
- :code => "AA-MOCK",
6
+ :code => "AA MOCK",
7
7
  :title => "Mock Title"
8
8
  }
9
9
  end
@@ -23,25 +23,32 @@ describe RePipelineBase do
23
23
  should_validate_uniqueness_of :code, :scope => :parent_re_pipeline_id, :case_sensitive => false, :message=>"alread taken."
24
24
  end
25
25
 
26
+ it "should replace any nonprint cahracters with an _" do
27
+ src = RePipelineBase.new(valid_attributes.merge(:code => "my code"))
28
+ src.save!
29
+ src.code.should == "my_code"
30
+ end
31
+
32
+
26
33
  it "should change the code to lower case when creating" do
27
34
  src = RePipelineBase.new(valid_attributes.merge(:code => "My code"))
28
35
  src.save!
29
- src.code.should == "my code"
36
+ src.code.should == "my_code"
30
37
  end
31
38
 
32
39
  describe "code cannot be changed after creation" do
33
40
  it "should save the code with a new record" do
34
41
  src = RePipelineBase.new(valid_attributes.merge(:code => "my code"))
35
42
  src.save!
36
- src.code.should == "my code"
43
+ src.code.should == "my_code"
37
44
  end
38
45
 
39
46
  it "should ignore the code attribute for an existing record" do
40
47
  src = RePipelineBase.new(valid_attributes.merge(:code => "my code"))
41
48
  src.save!
42
- src.code = "new code"
49
+ src.code = "new_code"
43
50
  src.save!
44
- src.code.should == "my code"
51
+ src.code.should == "my_code"
45
52
  end
46
53
  end
47
54
 
@@ -49,10 +56,10 @@ describe RePipelineBase do
49
56
 
50
57
  %W(code title description).each do |key|
51
58
  it "should copy the attribute #{key}" do
52
- src = RePipelineBase.new(valid_attributes.merge(key.to_sym => "mock source value"))
53
- dest = RePipelineBase.new(valid_attributes.merge(key.to_sym => "mock dest value"))
59
+ src = RePipelineBase.new(valid_attributes.merge(key.to_sym => "mock_source_value"))
60
+ dest = RePipelineBase.new(valid_attributes.merge(key.to_sym => "mock_dest_value"))
54
61
  dest.copy!(src)
55
- dest.read_attribute(key).should == "mock source value"
62
+ dest.read_attribute(key).should == "mock_source_value"
56
63
  end
57
64
 
58
65
  it "should copy the rules" do
@@ -123,35 +130,35 @@ describe RePipelineBase do
123
130
  end
124
131
  end
125
132
 
126
- describe "verify the pipeline" do
133
+ describe "checking for pipeline errors" do
134
+ before(:each) do
135
+ @re_rule1 = mock_model(ReRule, :title => "rule 1", :rule_class_name => "rule_class_1")
136
+ @re_rule1.stub!(:rule_error).and_return(nil)
137
+
138
+ @re_rule2 = mock_model(ReRule, :title => "rule 2", :rule_class_name => "rule_class_2")
139
+ @re_rule2.stub!(:rule_error).and_return(nil)
140
+
141
+ @re_pipeline = RePipelineBase.new
142
+ @re_pipeline.stub!(:re_rules).and_return([@re_rule1, @re_rule2])
143
+ end
144
+
127
145
  it "should return a failed message if there are no rules" do
128
- src = RePipelineBase.new(valid_attributes.merge(:code => "my code"))
129
- src.verify.should_not be_blank
130
- src.verify.should =~ /rules required/
146
+ src = RePipelineBase.new(valid_attributes)
147
+ src.pipeline_error.should == "rules required"
131
148
  end
132
149
 
133
- it "should verify each rule" do
134
- rule1 = mock_model(ReRule)
135
- rule2 = mock_model(ReRule)
136
- re_pipeline = RePipelineBase.new
137
- re_pipeline.stub!(:re_rules).and_return([rule1, rule2])
138
-
139
- rule1.should_receive(:verify).at_least(:once).and_return(nil)
140
- rule2.should_receive(:verify).at_least(:once).and_return(nil)
150
+ it "should validate each rule" do
151
+ @re_rule1.should_receive(:rule_error).at_least(:once).and_return(nil)
152
+ @re_rule2.should_receive(:rule_error).at_least(:once).and_return(nil)
141
153
 
142
- re_pipeline.verify.should be_nil
154
+ @re_pipeline.pipeline_error.should be_nil
143
155
  end
144
156
 
145
- it "should stop on the first verify error" do
146
- rule1 = mock_model(ReRule)
147
- rule2 = mock_model(ReRule)
148
- re_pipeline = RePipelineBase.new
149
- re_pipeline.stub!(:re_rules).and_return([rule1, rule2])
150
-
151
- rule1.should_receive(:verify).at_least(:once).and_return('failed rule 1')
152
- rule2.should_not_receive(:verify)
157
+ it "should stop on the first rule error" do
158
+ @re_rule1.should_receive(:rule_error).at_least(:once).and_return("invalid rule")
159
+ @re_rule2.should_not_receive(:rule)
153
160
 
154
- re_pipeline.verify.should == 'failed rule 1'
161
+ @re_pipeline.pipeline_error.should == "invalid rule"
155
162
  end
156
163
  end
157
164
  end
@@ -4,7 +4,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
4
4
  describe RePipeline do
5
5
  def valid_attributes
6
6
  {
7
- :code => "AA-MOCK",
7
+ :code => "AA_MOCK",
8
8
  :title => "Mock Title"
9
9
  }
10
10
  end
@@ -105,7 +105,39 @@ describe RePipeline do
105
105
  @re_pipeline.activate!
106
106
  end
107
107
  end
108
+
109
+ describe "deactivating a pipeline" do
110
+ before(:each) do
111
+ @re_pipeline = RePipeline.new(valid_attributes)
112
+ @re_pipeline_activated = RePipelineActivated.new
113
+ @re_pipeline.activated_re_pipeline = @re_pipeline_activated
114
+ @re_pipeline_activated.stub!(:destroy)
115
+ end
116
+
117
+ it "should destroy the activated pipeline" do
118
+ @re_pipeline_activated.should_receive(:destroy)
119
+ @re_pipeline.deactivate!
120
+ end
108
121
 
122
+ it "should not destroy the activated pipeline if not set" do
123
+ @re_pipeline.activated_re_pipeline = nil
124
+ @re_pipeline.deactivate!
125
+ end
126
+
127
+ it "should set the activated_re_pipeline to nil" do
128
+ @re_pipeline.activated_re_pipeline.should_not be_nil
129
+ @re_pipeline.deactivate!
130
+ @re_pipeline.activated_re_pipeline.should be_nil
131
+ end
132
+
133
+ it "should save the pipeline" do
134
+ @re_pipeline.should_receive(:save)
135
+ @re_pipeline.deactivate!
136
+ end
137
+
138
+
139
+ end
140
+
109
141
  describe "reverting a re_pipeline to it's previous state" do
110
142
  before(:each) do
111
143
  @re_pipeline = RePipeline.create(valid_attributes)
@@ -0,0 +1,73 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ReRuleExpectedOutcome do
4
+ def valid_attributes
5
+ {
6
+ :outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT
7
+ }
8
+ end
9
+
10
+ it "should be valid with valid attributes" do
11
+ ReRuleExpectedOutcome.new(valid_attributes).should be_valid
12
+ end
13
+
14
+ should_validate_presence_of :outcome
15
+
16
+ describe "START PIPELINE" do
17
+ it "should be invalid when the outcome pipeline code is blank" do
18
+ re_rule_expected_outcome = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE)
19
+ re_rule_expected_outcome.should_not be_valid
20
+ re_rule_expected_outcome.errors.on(:pipeline_code).should_not be_blank
21
+ end
22
+
23
+ it "should be valid when outcome pipeline code is present" do
24
+ re_rule_expected_outcome = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE, :pipeline_code => "mock code")
25
+ re_rule_expected_outcome.should be_valid
26
+ end
27
+ end
28
+
29
+ describe "copying the details from another rule outcome" do
30
+
31
+ %W(pipeline_code).each do |key|
32
+ it "should copy the attribute #{key}" do
33
+ src = ReRuleExpectedOutcome.new(valid_attributes.merge(key.to_sym => "mock source value"))
34
+ dest = ReRuleExpectedOutcome.new(valid_attributes.merge(key.to_sym => "mock dest value"))
35
+ dest.copy!(src)
36
+ dest.read_attribute(key).should == "mock source value"
37
+ end
38
+ end
39
+
40
+ %W(outcome).each do |key|
41
+ it "should copy the attribute #{key}" do
42
+ src = ReRuleExpectedOutcome.new(valid_attributes.merge(key.to_sym => 101))
43
+ dest = ReRuleExpectedOutcome.new(valid_attributes.merge(key.to_sym => 202))
44
+ dest.copy!(src)
45
+ dest.read_attribute(key).should == 101
46
+ end
47
+ end
48
+ end
49
+
50
+ describe "comparing rule outcomes" do
51
+ it "should be equal if the attributes are equal" do
52
+ src = ReRuleExpectedOutcome.new(valid_attributes)
53
+ dest = ReRuleExpectedOutcome.new(valid_attributes)
54
+ dest.equals?(src).should be_true
55
+ end
56
+
57
+ %W(outcome).each do |key|
58
+ it "should not be equal if the attribute #{key} are different" do
59
+ src = ReRuleExpectedOutcome.new(valid_attributes.merge(key.to_sym => 101))
60
+ dest = ReRuleExpectedOutcome.new(valid_attributes.merge(key.to_sym => 202))
61
+ dest.equals?(src).should be_false
62
+ end
63
+ end
64
+
65
+ it "should not be equal if the outcome is OUTCOME_START_PIPELINE and pipeline_code are different" do
66
+ src = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE, :pipeline_code => "value 1")
67
+ dest = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE, :pipeline_code => "value 2")
68
+ dest.equals?(src).should be_false
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -3,30 +3,56 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
3
  describe ReRule do
4
4
  def valid_attributes
5
5
  {
6
+ :rule_class_name => "MockRuleClass",
6
7
  :title => "Mock Title",
7
- :rule_class => "Mock Type",
8
8
  :summary => "Mock Summary",
9
- :data_version => 0,
10
9
  :data => "Lots Of Data"
11
10
  }
12
11
  end
13
12
 
13
+ before(:each) do
14
+ @rule = mock("MockRule", :title => "rule title", :summary => "rule summary", :data => "rule data")
15
+ @rule.stub!(:title=)
16
+ @rule.stub!(:summary=)
17
+ @rule.stub!(:data=)
18
+ @rule.stub!(:after_add_to_pipeline)
19
+ @rule.stub!(:before_remove_from_pipeline)
20
+ @rule.stub!(:expected_outcomes).and_return([])
21
+ @rule.stub!(:valid?).and_return(true)
22
+ @rule_class = mock("MockRuleClass")
23
+ @rule_class.stub!(:new).and_return(@rule)
24
+ RulesEngine::Discovery.stub!(:rule_class).and_return(@rule_class)
25
+ end
26
+
14
27
  it "should be valid with valid attributes" do
15
28
  ReRule.new(valid_attributes).should be_valid
16
29
  end
17
30
 
18
- should_have_many :re_rule_outcomes
31
+ should_have_many :re_rule_expected_outcomes
19
32
  should_have_many :re_job_audits
20
33
 
21
- should_validate_presence_of :title
22
- should_validate_presence_of :rule_class
23
- should_validate_presence_of :summary
24
- should_validate_presence_of :data_version
25
- should_validate_presence_of :data
34
+ should_validate_presence_of :rule_class_name
35
+
36
+ describe "validate the rule" do
37
+ it "should be false if the rule class not found" do
38
+ re_rule = ReRule.new(valid_attributes)
39
+ RulesEngine::Discovery.stub!(:rule_class).and_return(nil)
40
+ re_rule.should_not be_valid
41
+ re_rule.should have(1).error_on(:rule_class)
42
+ end
26
43
 
27
- describe "copying the rule" do
44
+ it "should be false if the rule is not valid" do
45
+ re_rule = ReRule.new(valid_attributes)
46
+ @rule.should_receive(:valid?).and_return(false)
47
+ re_rule.should_not be_valid
48
+ # re_rule.should have(1).error_on(:rule)
49
+ end
50
+ end
28
51
 
29
- %W(title rule_class summary data error).each do |key|
52
+
53
+ describe "copying the rule" do
54
+
55
+ %W(rule_class_name title summary data).each do |key|
30
56
  it "should copy the attribute #{key}" do
31
57
  src = ReRule.new(valid_attributes.merge(key.to_sym => "mock source value"))
32
58
  dest = ReRule.new(valid_attributes.merge(key.to_sym => "mock dest value"))
@@ -34,8 +60,8 @@ describe ReRule do
34
60
  dest.read_attribute(key).should == "mock source value"
35
61
  end
36
62
  end
37
-
38
- %W(position data_version).each do |key|
63
+
64
+ %W(position).each do |key|
39
65
  it "should copy the attribute #{key}" do
40
66
  src = ReRule.new(valid_attributes.merge(key.to_sym => 101))
41
67
  dest = ReRule.new(valid_attributes.merge(key.to_sym => 202))
@@ -48,19 +74,19 @@ describe ReRule do
48
74
  src = ReRule.new(valid_attributes)
49
75
  dest = ReRule.new(valid_attributes)
50
76
 
51
- src_outcome = mock_model(ReRuleOutcome)
52
- dest_outcome = mock_model(ReRuleOutcome )
77
+ src_outcome = mock_model(ReRuleExpectedOutcome)
78
+ dest_outcome = mock_model(ReRuleExpectedOutcome )
53
79
 
54
- ReRuleOutcome.should_receive(:new).and_return(dest_outcome)
80
+ ReRuleExpectedOutcome.should_receive(:new).and_return(dest_outcome)
55
81
  dest_outcome.should_receive(:copy!).with(src_outcome).and_return(dest_outcome)
56
82
 
57
- src.should_receive(:re_rule_outcomes).and_return([src_outcome])
58
- dest.should_receive(:re_rule_outcomes=).with([dest_outcome])
83
+ src.should_receive(:re_rule_expected_outcomes).and_return([src_outcome])
84
+ dest.should_receive(:re_rule_expected_outcomes=).with([dest_outcome])
59
85
 
60
86
  dest.copy!(src)
61
87
  end
62
88
  end
63
-
89
+
64
90
  describe "comparing rules" do
65
91
  it "should be equal if the attributes are equal" do
66
92
  src = ReRule.new(valid_attributes)
@@ -68,104 +94,276 @@ describe ReRule do
68
94
  dest.equals?(src).should be_true
69
95
  end
70
96
 
71
- %W(title rule_class summary data).each do |key|
97
+ %W(rule_class_name title summary data).each do |key|
72
98
  it "should not be equal if the attribute #{key} are different" do
73
99
  src = ReRule.new(valid_attributes.merge(key.to_sym => "mock source value"))
74
100
  dest = ReRule.new(valid_attributes.merge(key.to_sym => "mock dest value"))
75
101
  dest.equals?(src).should be_false
76
102
  end
77
103
  end
78
-
79
- %W(position data_version).each do |key|
104
+
105
+ %W(position).each do |key|
80
106
  it "should not be equal if the attribute #{key} are different" do
81
107
  src = ReRule.new(valid_attributes.merge(key.to_sym => 101))
82
108
  dest = ReRule.new(valid_attributes.merge(key.to_sym => 202))
83
109
  dest.equals?(src).should be_false
84
110
  end
85
111
  end
86
-
112
+
87
113
  describe "equals rule outcome" do
88
114
  before(:each) do
89
- @re_rule_re_rule_outcome_1 = mock_model(ReRuleOutcome)
90
- @re_rule_re_rule_outcome_2 = mock_model(ReRuleOutcome)
115
+ @re_rule_re_rule_expected_outcome_1 = mock_model(ReRuleExpectedOutcome)
116
+ @re_rule_re_rule_expected_outcome_2 = mock_model(ReRuleExpectedOutcome)
91
117
  @re_rule_1 = ReRule.new(valid_attributes)
92
118
  @re_rule_2 = ReRule.new(valid_attributes)
93
- @re_rule_1.stub!(:re_rule_outcomes).and_return([@re_rule_re_rule_outcome_1, @re_rule_re_rule_outcome_2])
94
- @re_rule_2.stub!(:re_rule_outcomes).and_return([@re_rule_re_rule_outcome_1, @re_rule_re_rule_outcome_2])
119
+ @re_rule_1.stub!(:re_rule_expected_outcomes).and_return([@re_rule_re_rule_expected_outcome_1, @re_rule_re_rule_expected_outcome_2])
120
+ @re_rule_2.stub!(:re_rule_expected_outcomes).and_return([@re_rule_re_rule_expected_outcome_1, @re_rule_re_rule_expected_outcome_2])
95
121
 
96
122
  end
97
123
  it "should not compare the outcomes if the the number is different" do
98
- @re_rule_2.stub!(:re_rule_outcomes).and_return([@re_rule_re_rule_outcome_1])
124
+ @re_rule_2.stub!(:re_rule_expected_outcomes).and_return([@re_rule_re_rule_expected_outcome_1])
99
125
 
100
- @re_rule_re_rule_outcome_1.should_not_receive(:equals?)
101
- @re_rule_re_rule_outcome_2.should_not_receive(:equals?)
126
+ @re_rule_re_rule_expected_outcome_1.should_not_receive(:equals?)
127
+ @re_rule_re_rule_expected_outcome_2.should_not_receive(:equals?)
102
128
 
103
129
  @re_rule_1.equals?(@re_rule_2)
104
130
  end
105
131
 
106
132
  it "should check the equals status of each rule outcome" do
107
- @re_rule_re_rule_outcome_1.should_receive(:equals?).with(@re_rule_re_rule_outcome_1).and_return(true)
108
- @re_rule_re_rule_outcome_2.should_receive(:equals?).with(@re_rule_re_rule_outcome_2).and_return(true)
133
+ @re_rule_re_rule_expected_outcome_1.should_receive(:equals?).with(@re_rule_re_rule_expected_outcome_1).and_return(true)
134
+ @re_rule_re_rule_expected_outcome_2.should_receive(:equals?).with(@re_rule_re_rule_expected_outcome_2).and_return(true)
109
135
 
110
136
  @re_rule_1.equals?(@re_rule_2).should be_true
111
137
  end
112
138
 
113
139
  it "should stop on the rule outcome equals error" do
114
- @re_rule_re_rule_outcome_1.should_receive(:equals?).with(@re_rule_re_rule_outcome_1).and_return(false)
115
- @re_rule_re_rule_outcome_2.should_not_receive(:equals?)
140
+ @re_rule_re_rule_expected_outcome_1.should_receive(:equals?).with(@re_rule_re_rule_expected_outcome_1).and_return(false)
141
+ @re_rule_re_rule_expected_outcome_2.should_not_receive(:equals?)
116
142
 
117
143
  @re_rule_1.equals?(@re_rule_2).should be_false
118
144
  end
119
145
  end
120
146
  end
121
-
122
- describe "verify the rule" do
123
- it "should return the rule_error if not blank" do
124
- src = ReRule.new(valid_attributes.merge(:error => "mock rule error"))
125
- src.verify.should_not be_blank
126
- src.verify.should == "mock rule error"
147
+
148
+ describe "loading a rule" do
149
+ before(:each) do
150
+ @re_rule = ReRule.new(valid_attributes)
151
+ end
152
+
153
+ it "should return an instance of the rule" do
154
+ @re_rule.rule.should == @rule
127
155
  end
128
156
 
129
- it "should verify each rule outcome" do
130
- re_rule_outcome_1 = mock_model(ReRule)
131
- re_rule_outcome_2 = mock_model(ReRule)
132
- re_rule = ReRule.new
133
- re_rule.stub!(:re_rule_outcomes).and_return([re_rule_outcome_1, re_rule_outcome_2])
134
-
135
- re_rule_outcome_1.should_receive(:verify).at_least(:once).and_return(nil)
136
- re_rule_outcome_2.should_receive(:verify).at_least(:once).and_return(nil)
137
-
138
- re_rule.verify.should be_nil
157
+ it "should load the rule from the discovery" do
158
+ RulesEngine::Discovery.should_receive(:rule_class).with("MockRuleClass")
159
+ @re_rule.rule
160
+ end
161
+
162
+ it "should only load the rule once" do
163
+ RulesEngine::Discovery.should_receive(:rule_class).once
164
+ @re_rule.rule.should == @rule
165
+ @re_rule.rule.should == @rule
166
+ end
167
+
168
+ it "should return nil if the rule class not found" do
169
+ RulesEngine::Discovery.should_receive(:rule_class).with("MockRuleClass").and_return(nil)
170
+ @re_rule.rule.should be_nil
171
+ end
172
+
173
+ it "should create a new instance of the rule class" do
174
+ @rule_class.should_receive(:new)
175
+ @re_rule.rule
176
+ end
177
+
178
+ it "should set the rule data with the model data attribute" do
179
+ @rule.should_receive(:data=).with("Lots Of Data")
180
+ @re_rule.rule
181
+ end
182
+ end
183
+
184
+ describe "setting the rule attributes" do
185
+ it "should raise an error if the rule does not exist" do
186
+ re_rule = ReRule.new(valid_attributes)
187
+ RulesEngine::Discovery.should_receive(:rule_class).with("MockRuleClass").and_return(nil)
188
+ lambda { re_rule.rule_attributes={} }.should raise_error('rule class not found')
189
+ end
190
+
191
+ it "should pass the parameters to the rule" do
192
+ re_rule = ReRule.new(valid_attributes)
193
+ @rule.should_receive("attributes=").with({:mock => "param"})
194
+ re_rule.rule_attributes = {:mock => "param"}
195
+ end
196
+ end
197
+
198
+ describe "saving a re_rule" do
199
+ it "should fail if the rule does not exist" do
200
+ re_rule = ReRule.new(valid_attributes)
201
+ re_rule.should_receive(:rule).and_return(nil)
202
+ re_rule.save.should == false
139
203
  end
204
+
205
+ describe "a valid rule" do
206
+ before(:each) do
207
+ @re_rule = ReRule.new(valid_attributes)
208
+ @re_rule.stub(:rule).and_return(@rule)
209
+ end
140
210
 
141
- it "should stop on the first verify error" do
142
- re_rule_outcome_1 = mock_model(ReRule)
143
- re_rule_outcome_2 = mock_model(ReRule)
144
- re_rule = ReRule.new
145
- re_rule.stub!(:re_rule_outcomes).and_return([re_rule_outcome_1, re_rule_outcome_2])
211
+ it "should be successful" do
212
+ @re_rule.save.should == true
213
+ end
214
+
215
+ it "should set the re_rule title to the title generated by the rule" do
216
+ @re_rule.save
217
+ @re_rule.title.should == "rule title"
218
+ end
219
+
220
+ it "should set the re_rule summary to the summary generated by the rule" do
221
+ @re_rule.save
222
+ @re_rule.summary.should == "rule summary"
223
+ end
146
224
 
147
- re_rule_outcome_1.should_receive(:verify).at_least(:once).and_return("mock fail error")
148
- re_rule_outcome_2.should_not_receive(:verify)
225
+ it "should set the re_rule data to the data generated by the rule" do
226
+ @re_rule.save
227
+ @re_rule.data.should == "rule data"
228
+ end
149
229
 
150
- re_rule.verify.should == "mock fail error"
230
+ it "should set the expected outcomes to the expected outcomes generated by the rule" do
231
+ re_rule_expected_outcome = ReRuleExpectedOutcome.new
232
+ ReRuleExpectedOutcome.should_receive(:new).with(:outcome => 101, :pipeline_code => "one").and_return(re_rule_expected_outcome)
233
+ ReRuleExpectedOutcome.should_receive(:new).with(:outcome => 202, :pipeline_code => "two").and_return(re_rule_expected_outcome)
234
+ @rule.stub(:expected_outcomes).and_return([{:outcome => 101, :pipeline_code => "one"}, {:outcome => 202, :pipeline_code => "two"}])
235
+ @re_rule.save
236
+ @re_rule.re_rule_expected_outcomes.should == [re_rule_expected_outcome, re_rule_expected_outcome]
237
+ end
238
+ end
239
+ end
240
+
241
+ describe "after saving a re_rule" do
242
+ it "should notify the rule" do
243
+ @re_rule = ReRule.new(valid_attributes)
244
+ @re_pipeline_id = nil
245
+ @re_rule_id = nil
246
+ @rule.should_receive(:after_add_to_pipeline) do |re_pipeline_id, re_rule_id|
247
+ @re_pipeline_id = re_pipeline_id
248
+ @re_rule_id = re_rule_id
249
+ end
250
+ @re_rule.save
251
+ @re_rule.re_pipeline_id.should == @re_pipeline_id
252
+ @re_rule.id.should == @re_rule_id
253
+ end
254
+ end
255
+
256
+ describe "before destroying a re_rule" do
257
+ it "should notify the rule" do
258
+ @re_rule = ReRule.create(valid_attributes)
259
+ @rule.should_receive(:before_remove_from_pipeline).with(@re_rule.re_pipeline_id, @re_rule.id)
260
+ @re_rule.destroy
261
+ end
262
+ end
263
+
264
+ describe "rule outcomes available" do
265
+ before(:each) do
266
+ @re_rule = ReRule.new
267
+ end
268
+
269
+ it "should return the first outcome that is a OUTCOME_NEXT" do
270
+ outcome_1 = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT)
271
+ outcome_2 = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT)
272
+ @re_rule.re_rule_expected_outcomes << outcome_1
273
+ @re_rule.re_rule_expected_outcomes << outcome_2
274
+ @re_rule.re_rule_expected_outcome_next.should == outcome_1
275
+ end
276
+
277
+ it "should return the first outcome that is a OUTCOME_STOP_SUCCESS" do
278
+ outcome_1 = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_STOP_SUCCESS)
279
+ outcome_2 = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_STOP_SUCCESS)
280
+ @re_rule.re_rule_expected_outcomes << outcome_1
281
+ @re_rule.re_rule_expected_outcomes << outcome_2
282
+ @re_rule.re_rule_expected_outcome_success.should == outcome_1
283
+ end
284
+
285
+ it "should return the first outcome that is a OUTCOME_STOP_FAILURE" do
286
+ outcome_1 = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_STOP_FAILURE)
287
+ outcome_2 = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_STOP_FAILURE)
288
+ @re_rule.re_rule_expected_outcomes << outcome_1
289
+ @re_rule.re_rule_expected_outcomes << outcome_2
290
+ @re_rule.re_rule_expected_outcome_failure.should == outcome_1
291
+ end
292
+
293
+ it "should return all outcomes that are a OUTCOME_START_PIPELINE" do
294
+ outcome_1 = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE)
295
+ outcome_2 = ReRuleExpectedOutcome.new(:outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE)
296
+ @re_rule.re_rule_expected_outcomes << outcome_1
297
+ @re_rule.re_rule_expected_outcomes << outcome_2
298
+ @re_rule.re_rule_expected_outcomes_start_pipeline.should == [outcome_1, outcome_2]
151
299
  end
152
300
  end
301
+
302
+ describe "checking for rule errors" do
303
+ before(:each) do
304
+ @rule = mock("Rule", :valid? => true)
305
+
306
+ @re_rule = ReRule.new(valid_attributes)
307
+ @re_rule.stub!(:rule).and_return(@rule)
308
+ end
309
+
310
+ it "should return '[title] class [class] invalid' if the rule is missing" do
311
+ @re_rule.should_receive(:rule).and_return(nil)
312
+ @re_rule.rule_error.should == "Mock Title class MockRuleClass invalid"
313
+ end
314
+
315
+ it "should ignore outcomes where the pipeline_code is nil" do
316
+ re_rule_expected_outcome = mock_model(ReRuleExpectedOutcome, :pipeline_code => nil)
317
+ @re_rule.stub!(:re_rule_expected_outcomes).and_return([re_rule_expected_outcome])
318
+ @re_rule.rule_error.should be_nil
319
+ end
153
320
 
154
- describe "moving items up in a list" do
321
+ it "should validate the rule is present and activated" do
322
+ re_rule_expected_outcome = mock_model(ReRuleExpectedOutcome, :pipeline_code => "mock_pipeline_code", :outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE)
323
+ RePipelineActivated.should_receive(:find_by_code).and_return(mock("RePipelineActivated", :pipeline_error => nil))
324
+ @re_rule.stub!(:re_rule_expected_outcomes).and_return([re_rule_expected_outcome])
325
+ @re_rule.rule_error.should be_nil
326
+ end
327
+
328
+ it "should return '[pipeline_code] not activated' if the required pipeline is missing" do
329
+ re_rule_expected_outcome = mock_model(ReRuleExpectedOutcome, :pipeline_code => "mock_pipeline_code", :outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE)
330
+ RePipelineActivated.should_receive(:find_by_code).and_return(nil)
331
+ @re_rule.stub!(:re_rule_expected_outcomes).and_return([re_rule_expected_outcome])
332
+ @re_rule.rule_error.should == "mock_pipeline_code not activated"
333
+ end
334
+
335
+ it "should return '[pipeline_code] not activated' if the required pipeline has not been activated" do
336
+ re_rule_expected_outcome = mock_model(ReRuleExpectedOutcome, :pipeline_code => "mock_pipeline_code", :outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE)
337
+ RePipelineActivated.should_receive(:find_by_code).and_return(nil)
338
+ @re_rule.stub!(:re_rule_expected_outcomes).and_return([re_rule_expected_outcome])
339
+ @re_rule.rule_error.should == "mock_pipeline_code not activated"
340
+ end
341
+
342
+ it "should return '[pipeline_code] invalid' if the required pipeline has errors" do
343
+ re_rule_expected_outcome = mock_model(ReRuleExpectedOutcome, :pipeline_code => "mock_pipeline_code", :outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE)
344
+ RePipelineActivated.should_receive(:find_by_code).and_return(mock("RePipelineActivated", :pipeline_error => "pipeline error"))
345
+ @re_rule.stub!(:re_rule_expected_outcomes).and_return([re_rule_expected_outcome])
346
+ @re_rule.rule_error.should == "mock_pipeline_code invalid"
347
+ end
348
+
349
+ end
350
+
351
+ describe "moving items in a list" do
155
352
  it "should move a rule down in the list" do
156
- base = RePipelineBase.create!(:code => "AA-MOCK",:title => "Mock Title")
353
+ re_pipeline = RePipelineBase.create!(:code => "AA-MOCK",:title => "Mock Title")
354
+
157
355
  re_rule_1 = ReRule.new(valid_attributes)
158
356
  re_rule_2 = ReRule.new(valid_attributes)
159
- base.re_rules << re_rule_1
160
- base.re_rules << re_rule_2
357
+ re_pipeline.re_rules << re_rule_1
358
+ re_pipeline.re_rules << re_rule_2
161
359
 
162
- base.reload
360
+ re_pipeline.reload
163
361
 
164
- base.re_rules.should == [re_rule_1, re_rule_2]
165
- base.re_rules[1].move_higher
166
- base.reload
167
-
168
- base.re_rules.should == [re_rule_2, re_rule_1]
362
+ re_pipeline.re_rules.should == [re_rule_1, re_rule_2]
363
+ re_pipeline.re_rules[1].move_higher
364
+ re_pipeline.reload
365
+
366
+ re_pipeline.re_rules.should == [re_rule_2, re_rule_1]
169
367
  end
170
- end
368
+ end
171
369
  end