rules_engine 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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