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
@@ -0,0 +1,390 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ReRulesController do
4
+ extend RulesEngineMacros
5
+
6
+ before(:each) do
7
+ controller.instance_eval { flash.stub!(:sweep) }
8
+ controller.stub!(:rules_engine_reader_access_required).and_return(true)
9
+ controller.stub!(:rules_engine_editor_access_required).and_return(true)
10
+
11
+ @rule = mock("Rule", :valid? => true)
12
+
13
+ @re_pipeline = mock_model(RePipeline)
14
+ RePipeline.stub!(:find).and_return(@re_pipeline)
15
+
16
+ @re_rule = mock_model(ReRule, :re_pipeline_id => @re_pipeline.id)
17
+ @re_rule.stub!(:rule).and_return(@rule)
18
+ ReRule.stub!(:new).and_return(@re_rule)
19
+ ReRule.stub!(:find).and_return(@re_rule)
20
+ end
21
+
22
+ describe "help" do
23
+ it_should_require_rules_engine_reader_access(:help)
24
+
25
+ before(:each) do
26
+ @rule_class = mock("RuleClass")
27
+ RulesEngine::Discovery.stub!(:rule_class).and_return(@rule_class)
28
+ @rule_class.stub!(:new).and_return(@rule)
29
+ end
30
+
31
+ it "should assign the re_pipeline" do
32
+ get :help, :re_pipeline => 1001, :rule_class_name => "mock_rule_class"
33
+ assigns[:re_pipeline].should == @re_pipeline
34
+ end
35
+
36
+ it "should call load discover the rule" do
37
+ RulesEngine::Discovery.should_receive(:rule_class).with("mock_rule_class").and_return(@rule_class)
38
+ get :help, :re_pipeline => 1001, :rule_class_name => "mock_rule_class"
39
+ end
40
+
41
+ describe "rule class not found" do
42
+ it "should render the 'error' template" do
43
+ RulesEngine::Discovery.should_receive(:rule_class).with("mock_rule_class").and_return(nil)
44
+ get :help, :re_pipeline => 1001, :rule_class_name => "mock_rule_class"
45
+ response.should render_template(:error)
46
+ end
47
+ end
48
+
49
+ describe "rule class found" do
50
+ it "should assign the rule_class" do
51
+ get :help, :re_pipeline => 1001, :rule_class_name => "mock_rule_class"
52
+ assigns[:rule_class].should == @rule_class
53
+ end
54
+
55
+ it "should assign the rule" do
56
+ get :help, :re_pipeline => 1001, :rule_class_name => "mock_rule_class"
57
+ assigns[:rule].should == @rule
58
+ end
59
+ end
60
+ end
61
+
62
+ describe "error" do
63
+ it_should_require_rules_engine_reader_access(:error)
64
+
65
+ it "should assign the re_pipeline" do
66
+ get :error, :re_pipeline => 1001, :rule_class_name => "mock_rule_class"
67
+ assigns[:re_pipeline].should == @re_pipeline
68
+ end
69
+ end
70
+
71
+ describe "new" do
72
+ it_should_require_rules_engine_editor_access(:new)
73
+
74
+ it "should assign the re_pipeline" do
75
+ get :new, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class"
76
+ assigns[:re_pipeline].should == @re_pipeline
77
+ end
78
+
79
+ it "should assign a new re_rule record" do
80
+ ReRule.should_receive(:new).and_return(@re_rule)
81
+ get :new, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class"
82
+ assigns[:re_rule].should == @re_rule
83
+ end
84
+
85
+ describe "rule class not found" do
86
+ it "should render the 'error' template" do
87
+ @re_rule.should_receive(:rule).and_return(nil)
88
+ get :new, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class"
89
+ response.should render_template(:error)
90
+ end
91
+ end
92
+
93
+ describe "rule class found" do
94
+ it "should render the 'new' template" do
95
+ get :new, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class"
96
+ response.should render_template(:new)
97
+ end
98
+ end
99
+ end
100
+
101
+ describe "create" do
102
+
103
+ before(:each) do
104
+ @re_rule.stub!(:rule_attributes=)
105
+ @re_rule.stub!(:valid?).and_return(true)
106
+ @re_rule.stub!(:save).and_return(true)
107
+ end
108
+
109
+ it_should_require_rules_engine_editor_access(:create)
110
+
111
+ it "should assign the re_pipeline" do
112
+ post :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
113
+ assigns[:re_pipeline].should == @re_pipeline
114
+ end
115
+
116
+ it "should assign the new re_rule record with the re_pipeline id" do
117
+ ReRule.should_receive(:new).with(hash_including(:re_pipeline_id => @re_pipeline.id)).and_return(@re_rule)
118
+ post :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
119
+ assigns[:re_rule].should == @re_rule
120
+ end
121
+
122
+ it "should assign the new re_rule record with the rule class name" do
123
+ ReRule.should_receive(:new).with(hash_including(:rule_class_name => "mock_rule_class")).and_return(@re_rule)
124
+ post :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
125
+ assigns[:re_rule].should == @re_rule
126
+ end
127
+
128
+ describe "rule class not found" do
129
+ it "should render the 'error' template" do
130
+ @re_rule.should_receive(:rule).and_return(nil)
131
+ post :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
132
+ response.should render_template(:error)
133
+ end
134
+ end
135
+
136
+ describe "rule class found" do
137
+ it "should assign the rule attributes" do
138
+ @re_rule.should_receive(:rule_attributes=).with(hash_including("re_pipeline" => "1001", "rule_class_name" => "mock_rule_class", "re_rule" => { "key" => "value" }))
139
+ post :create, :re_pipeline => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
140
+ end
141
+
142
+ describe "re_rule invalid" do
143
+ it "should render the 'new' template" do
144
+ @re_rule.should_receive(:valid?).and_return(false)
145
+ post :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
146
+ response.should render_template(:new)
147
+ end
148
+ end
149
+
150
+ describe "re_rule cannot be saved" do
151
+ it "should render the 'new' template" do
152
+ @re_rule.should_receive(:save).and_return(false)
153
+ post :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
154
+ response.should render_template(:new)
155
+ end
156
+ end
157
+
158
+ describe "re_rule valid and saved" do
159
+ it "should set the success message" do
160
+ post :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
161
+ flash[:success].should_not be_blank
162
+ end
163
+
164
+ it "should redirect to the change re_pipeline page for HTML" do
165
+ post :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
166
+ response.should redirect_to(change_re_pipeline_path(@re_pipeline))
167
+ end
168
+
169
+ it "should render 'update' template for JAVASCRIPT" do
170
+ xhr :post, :create, :re_pipeline_id => 1001, :rule_class_name => "mock_rule_class", :re_rule => { :key => "value" }
171
+ response.should render_template(:update)
172
+ end
173
+ end
174
+ end
175
+ end
176
+
177
+ describe "edit" do
178
+ it_should_require_rules_engine_editor_access(:edit)
179
+
180
+ it "should assign the re_pipeline" do
181
+ get :edit, :re_pipeline_id => 1001, :re_rule_id => 2002
182
+ assigns[:re_pipeline].should == @re_pipeline
183
+ end
184
+
185
+ it "should assign a new re_rule record" do
186
+ ReRule.should_receive(:find).and_return(@re_rule)
187
+ get :edit, :re_pipeline_id => 1001, :re_rule_id => 2002
188
+ assigns[:re_rule].should == @re_rule
189
+ end
190
+
191
+ describe "rule class not found" do
192
+ it "should render the 'error' template" do
193
+ @re_rule.should_receive(:rule).and_return(nil)
194
+ get :edit, :re_pipeline_id => 1001, :re_rule_id => 2002
195
+ response.should render_template(:error)
196
+ end
197
+ end
198
+
199
+ it "should render the 'edit' template" do
200
+ get :edit, :re_pipeline_id => 1001, :re_rule_id => 2002
201
+ response.should render_template(:edit)
202
+ end
203
+ end
204
+
205
+ describe "update" do
206
+ before(:each) do
207
+ @re_rule.stub!(:rule_attributes=)
208
+ @re_rule.stub!(:valid?).and_return(true)
209
+ @re_rule.stub!(:save).and_return(true)
210
+ end
211
+
212
+ it_should_require_rules_engine_editor_access(:update)
213
+
214
+ it "should assign the re_pipeline" do
215
+ put :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
216
+ assigns[:re_pipeline].should == @re_pipeline
217
+ end
218
+
219
+ it "should assign the re_rule record" do
220
+ ReRule.should_receive(:find).and_return(@re_rule)
221
+ put :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
222
+ assigns[:re_rule].should == @re_rule
223
+ end
224
+
225
+ describe "rule class not found" do
226
+ it "should render the 'error' template" do
227
+ @re_rule.should_receive(:rule).and_return(nil)
228
+ put :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
229
+ response.should render_template(:error)
230
+ end
231
+ end
232
+
233
+ describe "rule class found" do
234
+ it "should assign the rule attributes" do
235
+ @re_rule.should_receive(:rule_attributes=).with(hash_including("re_pipeline_id" => "1001", "re_rule_id" => "2002", "re_rule" => { "key" => "value" }))
236
+ put :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
237
+ end
238
+
239
+ describe "re_rule invalid" do
240
+ it "should render the 'edit' template" do
241
+ @re_rule.should_receive(:valid?).and_return(false)
242
+ put :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
243
+ response.should render_template(:edit)
244
+ end
245
+ end
246
+
247
+ describe "re_rule cannot be saved" do
248
+ it "should render the 'new' template" do
249
+ @re_rule.should_receive(:save).and_return(false)
250
+ put :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
251
+ response.should render_template(:edit)
252
+ end
253
+ end
254
+
255
+ describe "re_rule valid and saved" do
256
+ it "should set the success message" do
257
+ put :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
258
+ flash[:success].should_not be_blank
259
+ end
260
+
261
+ it "should redirect to the change re_pipeline page for HTML" do
262
+ put :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
263
+ response.should redirect_to(change_re_pipeline_path(@re_pipeline))
264
+ end
265
+
266
+ it "should render 'update' template for JAVASCRIPT" do
267
+ xhr :put, :update, :re_pipeline_id => 1001, :re_rule_id => 2002, :re_rule => { :key => "value" }
268
+ response.should render_template(:update)
269
+ end
270
+ end
271
+ end
272
+ end
273
+
274
+ describe "destroy" do
275
+ before(:each) do
276
+ @re_rule.stub!(:destroy).and_return(true)
277
+ end
278
+
279
+ it_should_require_rules_engine_editor_access(:destroy)
280
+
281
+ it "should assign the re_pipeline" do
282
+ delete :destroy, :re_pipeline_id => 1001, :re_rule_id => 2002
283
+ assigns[:re_pipeline].should == @re_pipeline
284
+ end
285
+
286
+ it "should assign the re_rule record" do
287
+ ReRule.should_receive(:find).and_return(@re_rule)
288
+ delete :destroy, :re_pipeline_id => 1001, :re_rule_id => 2002
289
+ assigns[:re_rule].should == @re_rule
290
+ end
291
+
292
+ it "should destroy the re_rule" do
293
+ @re_rule.should_receive(:destroy)
294
+ delete :destroy, :re_pipeline_id => 1001, :re_rule_id => 2002
295
+ end
296
+
297
+ it "should set the success message" do
298
+ delete :destroy, :re_pipeline_id => 1001, :re_rule_id => 2002
299
+ flash[:success].should_not be_blank
300
+ end
301
+
302
+ it "should redirect to the change re_pipeline page for HTML" do
303
+ delete :destroy, :re_pipeline_id => 1001, :re_rule_id => 2002
304
+ response.should redirect_to(change_re_pipeline_path(@re_pipeline))
305
+ end
306
+
307
+ it "should render 'destroy' template for JAVASCRIPT" do
308
+ xhr :delete, :destroy, :re_pipeline_id => 1001, :re_rule_id => 2002
309
+ response.should render_template(:destroy)
310
+ end
311
+ end
312
+
313
+ describe "move_up" do
314
+ before(:each) do
315
+ @re_rule.stub!(:move_higher).and_return(true)
316
+ end
317
+
318
+ it_should_require_rules_engine_editor_access(:move_up)
319
+
320
+ it "should assign the re_pipeline" do
321
+ put :move_up, :re_pipeline_id => 1001, :re_rule_id => 2002
322
+ assigns[:re_pipeline].should == @re_pipeline
323
+ end
324
+
325
+ it "should assign the re_rule record" do
326
+ ReRule.should_receive(:find).and_return(@re_rule)
327
+ put :move_up, :re_pipeline_id => 1001, :re_rule_id => 2002
328
+ assigns[:re_rule].should == @re_rule
329
+ end
330
+
331
+ it "should call move_higher for the re_rule" do
332
+ @re_rule.should_receive(:move_higher)
333
+ put :move_up, :re_pipeline_id => 1001, :re_rule_id => 2002
334
+ end
335
+
336
+ it "should set the success message" do
337
+ put :move_up, :re_pipeline_id => 1001, :re_rule_id => 2002
338
+ flash[:success].should_not be_blank
339
+ end
340
+
341
+ it "should redirect to the change re_pipeline page for HTML" do
342
+ put :move_up, :re_pipeline_id => 1001, :re_rule_id => 2002
343
+ response.should redirect_to(change_re_pipeline_path(@re_pipeline))
344
+ end
345
+
346
+ it "should render 'update' template for JAVASCRIPT" do
347
+ xhr :put, :move_up, :re_pipeline_id => 1001, :re_rule_id => 2002
348
+ response.should render_template(:update)
349
+ end
350
+ end
351
+
352
+ describe "move_down" do
353
+ before(:each) do
354
+ @re_rule.stub!(:move_lower).and_return(true)
355
+ end
356
+
357
+ it_should_require_rules_engine_editor_access(:move_down)
358
+
359
+ it "should assign the re_pipeline" do
360
+ put :move_down, :re_pipeline_id => 1001, :re_rule_id => 2002
361
+ assigns[:re_pipeline].should == @re_pipeline
362
+ end
363
+
364
+ it "should assign the re_rule record" do
365
+ ReRule.should_receive(:find).and_return(@re_rule)
366
+ put :move_down, :re_pipeline_id => 1001, :re_rule_id => 2002
367
+ assigns[:re_rule].should == @re_rule
368
+ end
369
+
370
+ it "should call move_lower for the re_rule" do
371
+ @re_rule.should_receive(:move_lower)
372
+ put :move_down, :re_pipeline_id => 1001, :re_rule_id => 2002
373
+ end
374
+
375
+ it "should set the success message" do
376
+ put :move_down, :re_pipeline_id => 1001, :re_rule_id => 2002
377
+ flash[:success].should_not be_blank
378
+ end
379
+
380
+ it "should redirect to the change re_pipeline page for HTML" do
381
+ put :move_down, :re_pipeline_id => 1001, :re_rule_id => 2002
382
+ response.should redirect_to(change_re_pipeline_path(@re_pipeline))
383
+ end
384
+
385
+ it "should render 'update' template for JAVASCRIPT" do
386
+ xhr :put, :move_down, :re_pipeline_id => 1001, :re_rule_id => 2002
387
+ response.should render_template(:update)
388
+ end
389
+ end
390
+ end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe RePipelineHelper do
4
+
5
+ before(:each) do
6
+ @re_pipeline = mock("RePipeline")
7
+ end
8
+
9
+ it "should be 'draft' when changed status is CHANGED_STATUS_DRAFT" do
10
+ @re_pipeline.should_receive(:changed_status).and_return(RePipelineBase::CHANGED_STATUS_DRAFT)
11
+ helper.re_pipeline_status(@re_pipeline).should == 'draft'
12
+ end
13
+
14
+ it "should be 'changed' when changed status is CHANGED_STATUS_CHANGED" do
15
+ @re_pipeline.should_receive(:changed_status).and_return(RePipelineBase::CHANGED_STATUS_CHANGED)
16
+ helper.re_pipeline_status(@re_pipeline).should == 'changed'
17
+ end
18
+
19
+ it "should be 'current' when changed status is CHANGED_STATUS_CURRENT" do
20
+ @re_pipeline.should_receive(:changed_status).and_return(RePipelineBase::CHANGED_STATUS_CURRENT)
21
+ helper.re_pipeline_status(@re_pipeline).should == 'current'
22
+ end
23
+
24
+ it "should be 'current' when changed status is unknown" do
25
+ @re_pipeline.should_receive(:changed_status).and_return(20202020202)
26
+ helper.re_pipeline_status(@re_pipeline).should == 'current'
27
+ end
28
+
29
+ end
@@ -0,0 +1,336 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe <%=rule_class%>Rule do
4
+
5
+ def valid_attributes
6
+ {
7
+ :<%=rule_name%>_title => 'Valid Title',
8
+ :<%=rule_name%>_words => {
9
+ "1" => { "word" => 'first word' },
10
+ "2" => { "word" => 'second word' }
11
+ }
12
+ }
13
+ end
14
+
15
+ def valid_json_data
16
+ '["Rule Title", ["one", "two"], "start_pipeline", "Other Pipeline"]'
17
+ end
18
+
19
+ it "should be discoverable" do
20
+ RulesEngine::Discovery.rule_class("<%=rule_class%>Rule").should == <%=rule_class%>Rule
21
+ end
22
+
23
+ describe "the expected class options" do
24
+ it "should be in the '<%=rule_class%> Rules' group" do
25
+ <%=rule_class%>Rule.options[:group].should == "<%=rule_class%>"
26
+ end
27
+
28
+ it "should have the diplay name of '<%=rule_class%>'" do
29
+ <%=rule_class%>Rule.options[:display_name].should == "<%=rule_class%>"
30
+ end
31
+
32
+ it "should have the help template of '/re_rule_definitions/<%=rule_name%>_rule/help'" do
33
+ <%=rule_class%>Rule.options[:help_partial].should == '/re_rule_definitions/<%=rule_name%>_rule/help'
34
+ end
35
+
36
+ it "should have the new template of '/re_rule_definitions/<%=rule_name%>_rule/new'" do
37
+ <%=rule_class%>Rule.options[:new_partial].should == '/re_rule_definitions/<%=rule_name%>_rule/new'
38
+ end
39
+
40
+ it "should have the edit view partial template of '/re_rule_definitions/<%=rule_name%>_rule/edit'" do
41
+ <%=rule_class%>Rule.options[:edit_partial].should == '/re_rule_definitions/<%=rule_name%>_rule/edit'
42
+ end
43
+ end
44
+
45
+ describe "setting the rule data" do
46
+ before(:each) do
47
+ @<%=rule_name%>_rule = <%=rule_class%>Rule.new
48
+ @<%=rule_name%>_rule.data = valid_json_data
49
+ end
50
+
51
+ describe "the json data is valid" do
52
+ it "should be valid" do
53
+ @<%=rule_name%>_rule.should be_valid
54
+ end
55
+
56
+ it "should set the title" do
57
+ @<%=rule_name%>_rule.title.should == "Rule Title"
58
+ end
59
+
60
+ it "should set the words" do
61
+ @<%=rule_name%>_rule.words.should == ["one", "two"]
62
+ end
63
+
64
+ it "should set the pipeline_action" do
65
+ @<%=rule_name%>_rule.pipeline_action.should == "start_pipeline"
66
+ end
67
+
68
+ it "should set the pipeline" do
69
+ @<%=rule_name%>_rule.pipeline.should == "Other Pipeline"
70
+ end
71
+ end
72
+
73
+ describe "the data is nil" do
74
+ it "should set the title to nil" do
75
+ @<%=rule_name%>_rule.title.should_not be_nil
76
+ @<%=rule_name%>_rule.data = nil
77
+ @<%=rule_name%>_rule.title.should be_nil
78
+ end
79
+
80
+ it "should set the words to nil" do
81
+ @<%=rule_name%>_rule.words.should_not be_nil
82
+ @<%=rule_name%>_rule.data = nil
83
+ @<%=rule_name%>_rule.words.should be_nil
84
+ end
85
+
86
+ it "should se the pipeline action to 'continue'" do
87
+ @<%=rule_name%>_rule.pipeline_action.should_not == 'continue'
88
+ @<%=rule_name%>_rule.data = nil
89
+ @<%=rule_name%>_rule.pipeline_action.should == 'continue'
90
+ end
91
+
92
+ it "should set the 'pipeline' to nil" do
93
+ @<%=rule_name%>_rule.pipeline.should_not be_nil
94
+ @<%=rule_name%>_rule.data = nil
95
+ @<%=rule_name%>_rule.pipeline.should be_nil
96
+ end
97
+ end
98
+ end
99
+
100
+ describe "the summary" do
101
+ it "should be singluar if there is one word" do
102
+ <%=rule_name%>_rule = <%=rule_class%>Rule.new
103
+ <%=rule_name%>_rule.stub!(:words).and_return(["one"])
104
+ <%=rule_name%>_rule.summary.should == "Match the word one"
105
+ end
106
+
107
+ it "should be plural if there are multiple words" do
108
+ <%=rule_name%>_rule = <%=rule_class%>Rule.new
109
+ <%=rule_name%>_rule.stub!(:words).and_return(["one", "two", "three"])
110
+ <%=rule_name%>_rule.summary.should == "Match the words one, two, three"
111
+ end
112
+ end
113
+
114
+ describe "the data" do
115
+ it "should be converted to a json string" do
116
+ <%=rule_name%>_rule = <%=rule_class%>Rule.new
117
+ <%=rule_name%>_rule.should_receive(:title).and_return(["mock title"])
118
+ <%=rule_name%>_rule.should_receive(:words).and_return(["one", "two"])
119
+ <%=rule_name%>_rule.should_receive(:pipeline_action).and_return(["pipeline action"])
120
+ <%=rule_name%>_rule.should_receive(:pipeline).and_return(["pipeline"])
121
+ <%=rule_name%>_rule.data.should == '[["mock title"],["one","two"],["pipeline action"],["pipeline"]]'
122
+ end
123
+ end
124
+
125
+ describe "the expected_outcomes" do
126
+ it "should be next" do
127
+ <%=rule_name%>_rule = <%=rule_class%>Rule.new
128
+ <%=rule_name%>_rule.should_receive(:pipeline_action).and_return('next')
129
+ <%=rule_name%>_rule.expected_outcomes.should == [:outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT]
130
+ end
131
+
132
+ it "should be stop success" do
133
+ <%=rule_name%>_rule = <%=rule_class%>Rule.new
134
+ <%=rule_name%>_rule.should_receive(:pipeline_action).and_return('stop_success')
135
+ <%=rule_name%>_rule.expected_outcomes.should == [:outcome => RulesEngine::RuleOutcome::OUTCOME_STOP_SUCCESS]
136
+ end
137
+
138
+ it "should be stop failure" do
139
+ <%=rule_name%>_rule = <%=rule_class%>Rule.new
140
+ <%=rule_name%>_rule.should_receive(:pipeline_action).and_return('stop_failure')
141
+ <%=rule_name%>_rule.expected_outcomes.should == [:outcome => RulesEngine::RuleOutcome::OUTCOME_STOP_FAILURE]
142
+ end
143
+
144
+ it "should be start pipeline" do
145
+ <%=rule_name%>_rule = <%=rule_class%>Rule.new
146
+ <%=rule_name%>_rule.should_receive(:pipeline_action).and_return('start_pipeline')
147
+ <%=rule_name%>_rule.should_receive(:pipeline).and_return('mock pipeline')
148
+ <%=rule_name%>_rule.expected_outcomes.should == [:outcome => RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE, :pipeline_code => "mock pipeline"]
149
+ end
150
+
151
+ it "should be next be default" do
152
+ <%=rule_name%>_rule = <%=rule_class%>Rule.new
153
+ <%=rule_name%>_rule.should_receive(:pipeline_action).and_return('this is not valid')
154
+ <%=rule_name%>_rule.expected_outcomes.should == [:outcome => RulesEngine::RuleOutcome::OUTCOME_NEXT]
155
+ end
156
+
157
+ end
158
+
159
+ describe "setting the rule attributes" do
160
+ before(:each) do
161
+ @<%=rule_name%>_rule = <%=rule_class%>Rule.new
162
+ end
163
+
164
+ it "should be valid with valid attributes" do
165
+ @<%=rule_name%>_rule.attributes = valid_attributes
166
+ @<%=rule_name%>_rule.should be_valid
167
+ end
168
+
169
+ describe "setting the <%=rule_name%>_title" do
170
+ it "should set the title" do
171
+ @<%=rule_name%>_rule.attributes = valid_attributes
172
+ @<%=rule_name%>_rule.title.should == 'Valid Title'
173
+ end
174
+
175
+ it "should not be valid if the '<%=rule_name%>_title' attribute is missing" do
176
+ @<%=rule_name%>_rule.attributes = valid_attributes.except(:<%=rule_name%>_title)
177
+ @<%=rule_name%>_rule.should_not be_valid
178
+ @<%=rule_name%>_rule.errors.should include(:<%=rule_name%>_title)
179
+ end
180
+
181
+ it "should not be valid if the '<%=rule_name%>_title' attribute is blank" do
182
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_title => "")
183
+ @<%=rule_name%>_rule.should_not be_valid
184
+ @<%=rule_name%>_rule.errors.should include(:<%=rule_name%>_title)
185
+ end
186
+ end
187
+
188
+ describe "setting the <%=rule_name%>_words" do
189
+ it "should set the words" do
190
+ @<%=rule_name%>_rule.attributes = valid_attributes
191
+ @<%=rule_name%>_rule.words.should == ['first word', 'second word']
192
+ end
193
+
194
+ it "should not be valid if the '<%=rule_name%>_words' attribute is missing" do
195
+ @<%=rule_name%>_rule.attributes = valid_attributes.except(:<%=rule_name%>_words)
196
+ @<%=rule_name%>_rule.should_not be_valid
197
+ @<%=rule_name%>_rule.errors.should include(:<%=rule_name%>_words)
198
+ end
199
+
200
+ it "should not be valid if the '<%=rule_name%>_words' is not a hash" do
201
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_words => "<%=rule_name%> word")
202
+ @<%=rule_name%>_rule.should_not be_valid
203
+ @<%=rule_name%>_rule.errors.should include(:<%=rule_name%>_words)
204
+ end
205
+
206
+ it "should not be valid if the '<%=rule_name%>_words' is empty" do
207
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_words => {})
208
+ @<%=rule_name%>_rule.should_not be_valid
209
+ @<%=rule_name%>_rule.errors.should include(:<%=rule_name%>_words)
210
+ end
211
+
212
+ it "should not include parameters that are marked for deletion" do
213
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_words => {
214
+ "1" => { "word" => 'first word', "_delete" => '1' },
215
+ "2" => { "word" => 'second word' }
216
+ }
217
+ )
218
+ @<%=rule_name%>_rule.should be_valid
219
+ @<%=rule_name%>_rule.words.should == ['second word']
220
+ end
221
+
222
+ end
223
+
224
+ describe "setting the <%=rule_name%>_pipeline" do
225
+ it "should set the pipeline action" do
226
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_pipeline_action => "mock action")
227
+ @<%=rule_name%>_rule.should be_valid
228
+ @<%=rule_name%>_rule.pipeline_action.should == 'mock action'
229
+ end
230
+
231
+ it "should set the pipeline action to 'continue' by default" do
232
+ @<%=rule_name%>_rule.attributes = valid_attributes.except(:<%=rule_name%>_pipeline_action)
233
+ @<%=rule_name%>_rule.should be_valid
234
+ @<%=rule_name%>_rule.pipeline_action.should == 'continue'
235
+ end
236
+
237
+ it "should set the pipeline" do
238
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_pipeline => "mock pipeline")
239
+ @<%=rule_name%>_rule.should be_valid
240
+ @<%=rule_name%>_rule.pipeline.should == 'mock pipeline'
241
+ end
242
+
243
+ describe "pipeline action is start_pipeline" do
244
+ it "should be valid with valid '<%=rule_name%>_pipeline'" do
245
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_pipeline_action => "start_pipeline", :<%=rule_name%>_pipeline => "mock pipeline")
246
+ @<%=rule_name%>_rule.should be_valid
247
+ @<%=rule_name%>_rule.pipeline.should == 'mock pipeline'
248
+ end
249
+
250
+ it "should not be valid if the '<%=rule_name%>_pipeline' attribute is missing" do
251
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_pipeline_action => "start_pipeline").except(:<%=rule_name%>_pipeline)
252
+ @<%=rule_name%>_rule.should_not be_valid
253
+ @<%=rule_name%>_rule.errors.should include(:<%=rule_name%>_pipeline)
254
+ end
255
+
256
+ it "should not be valid if the '<%=rule_name%>_pipeline' attribute is blank" do
257
+ @<%=rule_name%>_rule.attributes = valid_attributes.merge(:<%=rule_name%>_pipeline_action => "start_pipeline", :<%=rule_name%>_pipeline => "")
258
+ @<%=rule_name%>_rule.should_not be_valid
259
+ @<%=rule_name%>_rule.errors.should include(:<%=rule_name%>_pipeline)
260
+ end
261
+ end
262
+ end
263
+ end
264
+
265
+ describe "after a rule is created" do
266
+ # xit "There is nothing to do here"
267
+ end
268
+
269
+ describe "after a rule is created" do
270
+ # xit "There is nothing to do here"
271
+ end
272
+
273
+ describe "processing the rule" do
274
+ before(:each) do
275
+ @<%=rule_name%>_rule = <%=rule_class%>Rule.new
276
+ @<%=rule_name%>_rule.stub!(:words).and_return(["mock", "words"])
277
+ @data = {:sentence => "there was a mock sentence"}
278
+
279
+ @job = mock("job")
280
+ @job.stub!(:audit)
281
+ end
282
+
283
+ it "should do nothing if there is no sentance" do
284
+ @<%=rule_name%>_rule = <%=rule_class%>Rule.new
285
+ @<%=rule_name%>_rule.process(@job, {}).should be_nil
286
+ end
287
+
288
+ it "should do nothing if there is no match" do
289
+ @<%=rule_name%>_rule = <%=rule_class%>Rule.new
290
+ @<%=rule_name%>_rule.stub!(:words).and_return(["no", "words"])
291
+ @<%=rule_name%>_rule.process(@job, @data).should be_nil
292
+ end
293
+
294
+ describe "a match found" do
295
+ it "should add the match to the data" do
296
+ @<%=rule_name%>_rule.process(@job, @data)
297
+ @data[:match].should == "mock"
298
+ end
299
+
300
+ it "should audit the match" do
301
+ @job.should_receive(:audit) do |one, two|
302
+ one.should =~ /mock$/
303
+ end
304
+ @<%=rule_name%>_rule.process(@job, @data)
305
+ end
306
+
307
+ it "should return next" do
308
+ @<%=rule_name%>_rule.should_receive(:pipeline_action).and_return('next')
309
+ @<%=rule_name%>_rule.process(@job, @data).outcome.should == RulesEngine::RuleOutcome::OUTCOME_NEXT
310
+ end
311
+
312
+ it "should return stop success" do
313
+ @<%=rule_name%>_rule.should_receive(:pipeline_action).and_return('stop_success')
314
+ @<%=rule_name%>_rule.process(@job, @data).outcome.should == RulesEngine::RuleOutcome::OUTCOME_STOP_SUCCESS
315
+ end
316
+
317
+ it "should return stop failure" do
318
+ @<%=rule_name%>_rule.should_receive(:pipeline_action).and_return('stop_failure')
319
+ @<%=rule_name%>_rule.process(@job, @data).outcome.should == RulesEngine::RuleOutcome::OUTCOME_STOP_FAILURE
320
+ end
321
+
322
+ it "should return start pipeline with the pipeline_code" do
323
+ @<%=rule_name%>_rule.should_receive(:pipeline_action).and_return('start_pipeline')
324
+ @<%=rule_name%>_rule.should_receive(:pipeline).and_return('mock_pipeline')
325
+ <%=rule_name%>_rule_outcome = @<%=rule_name%>_rule.process(@job, @data)
326
+ <%=rule_name%>_rule_outcome.outcome.should == RulesEngine::RuleOutcome::OUTCOME_START_PIPELINE
327
+ <%=rule_name%>_rule_outcome.pipeline_code.should == "mock_pipeline"
328
+ end
329
+
330
+ it "should return nextv for an unknown action" do
331
+ @<%=rule_name%>_rule.should_receive(:pipeline_action).and_return('this is not a valid action')
332
+ @<%=rule_name%>_rule.process(@job, @data).outcome.should == RulesEngine::RuleOutcome::OUTCOME_NEXT
333
+ end
334
+ end
335
+ end
336
+ end