card 1.17.4 → 1.18.0

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 (389) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/card.gemspec +24 -25
  4. data/config/initializers/01_init_ruby_extensions.rb +0 -4
  5. data/config/initializers/inflections.rb +1 -1
  6. data/config/initializers/notification.rb +2 -2
  7. data/db/migrate/20110511221913_require_earlier_migrations.rb +3 -3
  8. data/db/migrate/20120105203350_require_1_8_migrations.rb +3 -3
  9. data/db/migrate/20121111025347_require_1_10_migrations.rb +3 -3
  10. data/db/migrate/20130106052640_table_cleanup.rb +4 -4
  11. data/db/migrate/20130411210957_update_codenames.rb +2 -2
  12. data/db/migrate/20141001105348_move_revisions_to_actions.rb +4 -4
  13. data/db/migrate/20141121172918_rename_card_migration_table.rb +2 -2
  14. data/db/migrate/20141208132159_remove_present_from_reference_table.rb +2 -2
  15. data/db/migrate/20141216053032_better_index_names.rb +9 -9
  16. data/db/migrate_core_cards/20120611203506_rails_inflection_updates.rb +29 -32
  17. data/db/migrate_core_cards/20130411191151_renaming_for_menu.rb +3 -4
  18. data/db/migrate_core_cards/20130411211600_delete_old_related_tab_cards.rb +1 -1
  19. data/db/migrate_core_cards/20130419215612_import_help_text.rb +1 -2
  20. data/db/migrate_core_cards/20130823192433_add_style_cards.rb +3 -3
  21. data/db/migrate_core_cards/20130910183318_move_styles_to_content.rb +2 -3
  22. data/db/migrate_core_cards/20130920214038_jsonize_tinymce.rb +2 -2
  23. data/db/migrate_core_cards/20130920291703_update_stylesheets.rb +1 -2
  24. data/db/migrate_core_cards/20130927191728_account_events.rb +5 -6
  25. data/db/migrate_core_cards/20131016172445_common_css_patch.rb +2 -3
  26. data/db/migrate_core_cards/20140110193325_reset_account_request_type.rb +0 -1
  27. data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +23 -32
  28. data/db/migrate_core_cards/20140317035504_account_requests_to_signups.rb +1 -7
  29. data/db/migrate_core_cards/20140512155840_add_script_cards.rb +21 -24
  30. data/db/migrate_core_cards/20140629222005_add_email_cards.rb +17 -22
  31. data/db/migrate_core_cards/20140725180118_config_card_updates.rb +2 -2
  32. data/db/migrate_core_cards/20141111083921_delete_machine_output.rb +1 -3
  33. data/db/migrate_core_cards/20141115034214_config_descriptions_etc.rb +2 -2
  34. data/db/migrate_core_cards/20141119001955_make_symlinks_relative.rb +3 -3
  35. data/db/migrate_core_cards/20141120120605_fix_notification_html_message.rb +1 -1
  36. data/db/migrate_core_cards/20141204061304_watchers_to_following.rb +8 -12
  37. data/db/migrate_core_cards/20141208162106_add_ace_script.rb +2 -3
  38. data/db/migrate_core_cards/20141216155251_add_more_following_cards.rb +10 -10
  39. data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +10 -12
  40. data/db/migrate_core_cards/20150220134731_following_to_follow_rule.rb +4 -4
  41. data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +3 -3
  42. data/db/migrate_core_cards/20150326205655_bootswatch_themes.rb +7 -7
  43. data/db/migrate_core_cards/20150429090551_search_card_context.rb +18 -20
  44. data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +3 -7
  45. data/db/migrate_core_cards/20150510031118_fix_skin_images.rb +2 -3
  46. data/db/migrate_core_cards/20150528084659_add_session_cardtype.rb +3 -3
  47. data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +4 -4
  48. data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +4 -4
  49. data/db/migrate_core_cards/20150610180019_add_recaptcha_key_and_admin_info_cards.rb +5 -11
  50. data/db/migrate_core_cards/20150724123438_update_file_and_image_cards.rb +29 -35
  51. data/db/migrate_core_cards/20150824135418_update_file_history.rb +10 -14
  52. data/db/migrate_core_cards/20150903130006_attachment_upload_cards.rb +1 -1
  53. data/db/schema.rb +92 -94
  54. data/db/seed/new/card_actions.yml +461 -469
  55. data/db/seed/new/card_acts.yml +154 -172
  56. data/db/seed/new/card_changes.yml +4076 -4031
  57. data/db/seed/new/card_references.yml +1584 -1927
  58. data/db/seed/new/cards.yml +2095 -2112
  59. data/db/seed/test/fixtures/card_actions.yml +1497 -1505
  60. data/db/seed/test/fixtures/card_acts.yml +454 -472
  61. data/db/seed/test/fixtures/card_changes.yml +7309 -7263
  62. data/db/seed/test/fixtures/card_references.yml +2263 -2613
  63. data/db/seed/test/fixtures/cards.yml +3298 -3316
  64. data/db/seed/test/seed.rb +3 -0
  65. data/lib/card.rb +17 -9
  66. data/lib/card/active_record_ext.rb +6 -8
  67. data/lib/card/active_record_helper.rb +42 -32
  68. data/lib/card/auth.rb +3 -3
  69. data/lib/card/cache.rb +4 -4
  70. data/lib/card/cache/persistent.rb +9 -5
  71. data/lib/card/cache/temporary.rb +5 -5
  72. data/lib/card/chunk.rb +1 -1
  73. data/lib/card/codename.rb +3 -2
  74. data/lib/card/content.rb +62 -57
  75. data/lib/card/core_ext.rb +20 -30
  76. data/lib/card/diff.rb +88 -76
  77. data/lib/card/director_register.rb +66 -0
  78. data/lib/card/env.rb +14 -17
  79. data/lib/card/exceptions.rb +7 -9
  80. data/lib/card/format.rb +18 -367
  81. data/lib/card/format/nest.rb +183 -0
  82. data/lib/card/format/permission.rb +63 -0
  83. data/lib/card/format/render.rb +140 -0
  84. data/lib/card/loader.rb +17 -26
  85. data/lib/card/location.rb +6 -6
  86. data/lib/card/mailer.rb +4 -7
  87. data/lib/card/migration.rb +1 -1
  88. data/lib/card/name.rb +3 -6
  89. data/lib/card/query.rb +8 -8
  90. data/lib/card/query/attributes.rb +6 -6
  91. data/lib/card/query/clause.rb +10 -10
  92. data/lib/card/query/join.rb +7 -9
  93. data/lib/card/query/reference.rb +17 -19
  94. data/lib/card/query/sql_statement.rb +2 -2
  95. data/lib/card/query/value.rb +15 -16
  96. data/lib/card/set.rb +106 -209
  97. data/lib/card/set/event.rb +126 -0
  98. data/lib/card/set_pattern.rb +42 -29
  99. data/lib/card/simplecov_helper.rb +19 -19
  100. data/lib/card/spec_helper.rb +40 -16
  101. data/lib/card/stage.rb +72 -0
  102. data/lib/card/stage_director.rb +231 -0
  103. data/lib/card/subcards.rb +56 -24
  104. data/lib/card/subdirector_array.rb +31 -0
  105. data/lib/card/success.rb +15 -18
  106. data/lib/card/version.rb +1 -2
  107. data/lib/card/view_cache.rb +4 -4
  108. data/lib/card/view_name.rb +10 -8
  109. data/lib/cardio.rb +1 -1
  110. data/lib/generators/card.rb +2 -4
  111. data/lib/generators/card/format/format_generator.rb +4 -4
  112. data/lib/generators/card/migration/migration_generator.rb +6 -6
  113. data/lib/generators/card/set/set_generator.rb +5 -6
  114. data/mod/01_core/chunk/include.rb +2 -1
  115. data/mod/01_core/chunk/link.rb +2 -2
  116. data/mod/01_core/chunk/literal.rb +6 -9
  117. data/mod/01_core/chunk/query_reference.rb +1 -1
  118. data/mod/01_core/chunk/reference.rb +2 -2
  119. data/mod/01_core/chunk/uri.rb +52 -63
  120. data/mod/01_core/format/html_format.rb +8 -12
  121. data/mod/01_core/format/text_format.rb +1 -1
  122. data/mod/01_core/set/all/actify.rb +96 -0
  123. data/mod/01_core/set/all/active_card.rb +7 -7
  124. data/mod/01_core/set/all/collection.rb +19 -20
  125. data/mod/01_core/set/all/content.rb +9 -7
  126. data/mod/01_core/set/all/erb.rb +5 -5
  127. data/mod/01_core/set/all/event.rb +60 -0
  128. data/mod/01_core/set/all/fetch.rb +13 -19
  129. data/mod/01_core/set/all/haml.rb +1 -1
  130. data/mod/01_core/set/all/initialize.rb +35 -41
  131. data/mod/01_core/set/all/location_history.rb +3 -5
  132. data/mod/01_core/set/all/name.rb +19 -68
  133. data/mod/01_core/set/all/name_validations.rb +56 -0
  134. data/mod/01_core/set/all/pattern.rb +2 -2
  135. data/mod/01_core/set/all/permissions.rb +14 -20
  136. data/mod/01_core/set/all/phases.rb +9 -200
  137. data/mod/01_core/set/all/references.rb +10 -10
  138. data/mod/01_core/set/all/rules.rb +3 -4
  139. data/mod/01_core/set/all/stages.rb +24 -0
  140. data/mod/01_core/set/all/states.rb +4 -4
  141. data/mod/01_core/set/all/subcards.rb +16 -26
  142. data/mod/01_core/set/all/templating.rb +1 -3
  143. data/mod/01_core/set/all/tracked_attributes.rb +47 -48
  144. data/mod/01_core/set/all/trash.rb +10 -10
  145. data/mod/01_core/set/all/type.rb +9 -8
  146. data/mod/01_core/set/all/utils.rb +10 -14
  147. data/mod/01_core/set/all/view_cache.rb +2 -2
  148. data/mod/01_core/set_pattern/01_all.rb +3 -3
  149. data/mod/01_core/set_pattern/02_all_plus.rb +3 -3
  150. data/mod/01_core/set_pattern/03_type.rb +2 -2
  151. data/mod/01_core/set_pattern/04_star.rb +3 -3
  152. data/mod/01_core/set_pattern/05_rstar.rb +3 -3
  153. data/mod/01_core/set_pattern/06_right.rb +2 -2
  154. data/mod/01_core/set_pattern/07_type_plus_right.rb +2 -2
  155. data/mod/01_core/set_pattern/08_self.rb +1 -1
  156. data/mod/01_core/spec/chunk/literal_spec.rb +7 -8
  157. data/mod/01_core/spec/chunk/uri_spec.rb +140 -142
  158. data/mod/01_core/spec/format/html_format_spec.rb +72 -57
  159. data/mod/01_core/spec/set/all/collection_spec.rb +63 -43
  160. data/mod/01_core/spec/set/all/content_spec.rb +4 -4
  161. data/mod/01_core/spec/set/all/fetch_spec.rb +12 -3
  162. data/mod/01_core/spec/set/all/name_spec.rb +3 -4
  163. data/mod/01_core/spec/set/all/pattern_spec.rb +32 -35
  164. data/mod/01_core/spec/set/all/permissions_spec.rb +17 -5
  165. data/mod/01_core/spec/set/all/phases_spec.rb +0 -1
  166. data/mod/01_core/spec/set/all/references_spec.rb +1 -1
  167. data/mod/01_core/spec/set/all/rules2_spec.rb +79 -91
  168. data/mod/01_core/spec/set/all/rules_spec.rb +63 -56
  169. data/mod/01_core/spec/set/all/templating_spec.rb +0 -1
  170. data/mod/01_core/spec/set/all/tracked_attributes_spec.rb +4 -5
  171. data/mod/01_core/spec/set/all/trash_spec.rb +23 -1
  172. data/mod/01_core/spec/set/all/type_spec.rb +2 -5
  173. data/mod/01_history/lib/card/action.rb +8 -10
  174. data/mod/01_history/set/all/actions.rb +2 -4
  175. data/mod/01_history/set/all/content_history.rb +38 -32
  176. data/mod/01_history/set/all/history.rb +20 -17
  177. data/mod/02_basic_types/format/rss_format.rb +0 -1
  178. data/mod/02_basic_types/set/all/all_css.rb +9 -13
  179. data/mod/02_basic_types/set/all/all_csv.rb +14 -17
  180. data/mod/02_basic_types/set/all/all_js.rb +3 -4
  181. data/mod/02_basic_types/set/all/base.rb +2 -2
  182. data/mod/02_basic_types/set/all/file.rb +2 -5
  183. data/mod/02_basic_types/set/all/json.rb +19 -18
  184. data/mod/02_basic_types/set/all/rss.rb +3 -3
  185. data/mod/02_basic_types/set/all/text.rb +1 -3
  186. data/mod/02_basic_types/set/type/html.rb +4 -8
  187. data/mod/02_basic_types/set/type/plain_text.rb +2 -3
  188. data/mod/02_basic_types/set/type/pointer.rb +82 -92
  189. data/mod/02_basic_types/spec/set/all/all_css_spec.rb +2 -2
  190. data/mod/02_basic_types/spec/set/all/all_csv_spec.rb +6 -4
  191. data/mod/02_basic_types/spec/set/all/base_spec.rb +6 -6
  192. data/mod/02_basic_types/spec/set/all/json_spec.rb +8 -8
  193. data/mod/02_basic_types/spec/set/type/plain_text_spec.rb +3 -3
  194. data/mod/02_basic_types/spec/set/type/pointer_spec.rb +29 -32
  195. data/mod/03_machines/lib/card/machine.rb +95 -81
  196. data/mod/03_machines/lib/card/machine_input.rb +35 -34
  197. data/mod/03_machines/set/right/machine_input.rb +1 -1
  198. data/mod/03_machines/set/self/script_ace.rb +2 -3
  199. data/mod/03_machines/set/self/script_card_menu.rb +2 -3
  200. data/mod/03_machines/set/self/script_jquery_helper.rb +2 -2
  201. data/mod/03_machines/set/self/script_slot.rb +2 -2
  202. data/mod/03_machines/set/self/style_bootstrap_compatible.rb +1 -1
  203. data/mod/03_machines/set/self/style_cards.rb +1 -1
  204. data/mod/03_machines/set/self/style_jquery_ui_smoothness.rb +0 -1
  205. data/mod/03_machines/set/type/coffee_script.rb +9 -13
  206. data/mod/03_machines/set/type/css.rb +12 -13
  207. data/mod/03_machines/set/type/java_script.rb +6 -8
  208. data/mod/03_machines/set/type/scss.rb +4 -5
  209. data/mod/03_machines/set/type/skin.rb +3 -6
  210. data/mod/03_machines/spec/lib/shared_machine_examples.rb +31 -38
  211. data/mod/03_machines/spec/lib/shared_machine_input_examples.rb +7 -8
  212. data/mod/03_machines/spec/set/type/coffeescript_spec.rb +19 -13
  213. data/mod/03_machines/spec/set/type/css_spec.rb +22 -16
  214. data/mod/03_machines/spec/set/type/scss_spec.rb +28 -21
  215. data/mod/03_machines/spec/set/type/skin_spec.rb +28 -30
  216. data/mod/04_settings/lib/card/setting.rb +4 -4
  217. data/mod/04_settings/set/abstract/permission.rb +30 -37
  218. data/mod/04_settings/set/right/add_help.rb +3 -3
  219. data/mod/04_settings/set/right/script.rb +4 -5
  220. data/mod/04_settings/set/right/structure.rb +3 -4
  221. data/mod/04_settings/set/right/style.rb +3 -3
  222. data/mod/04_settings/set/self/add_help.rb +1 -1
  223. data/mod/04_settings/set/self/input.rb +1 -1
  224. data/mod/04_settings/set/self/on_create.rb +1 -1
  225. data/mod/04_settings/set/self/options.rb +1 -1
  226. data/mod/04_settings/set/self/options_label.rb +1 -1
  227. data/mod/04_settings/set/type/setting.rb +29 -44
  228. data/mod/04_settings/spec/set/right/comment_spec.rb +9 -12
  229. data/mod/04_settings/spec/set/right/script_spec.rb +7 -7
  230. data/mod/04_settings/spec/set/right/structure_spec.rb +13 -12
  231. data/mod/04_settings/spec/set/right/style_spec.rb +13 -13
  232. data/mod/04_settings/spec/set/type/setting_spec.rb +1 -1
  233. data/mod/05_email/format/email_html_format.rb +1 -1
  234. data/mod/05_email/format/email_text_format.rb +2 -2
  235. data/mod/05_email/lib/card/follow_option.rb +12 -15
  236. data/mod/05_email/set/all/email_html.rb +2 -3
  237. data/mod/05_email/set/all/email_text.rb +3 -3
  238. data/mod/05_email/set/all/follow.rb +14 -22
  239. data/mod/05_email/set/all/notify.rb +11 -11
  240. data/mod/05_email/set/all/observer.rb +7 -8
  241. data/mod/05_email/set/right/bcc.rb +4 -9
  242. data/mod/05_email/set/right/follow.rb +26 -39
  243. data/mod/05_email/set/right/follow_fields.rb +2 -2
  244. data/mod/05_email/set/right/followers.rb +3 -1
  245. data/mod/05_email/set/right/following.rb +13 -16
  246. data/mod/05_email/set/self/always.rb +1 -2
  247. data/mod/05_email/set/self/created.rb +4 -6
  248. data/mod/05_email/set/self/edited.rb +3 -7
  249. data/mod/05_email/set/self/follow_defaults.rb +11 -12
  250. data/mod/05_email/set/self/never.rb +2 -4
  251. data/mod/05_email/set/type/email_template.rb +40 -27
  252. data/mod/05_email/set/type_plus_right/user/follow.rb +159 -157
  253. data/mod/05_email/spec/set/all/follow_spec.rb +28 -37
  254. data/mod/05_email/spec/set/all/notify_spec.rb +21 -26
  255. data/mod/05_email/spec/set/all/observer_spec.rb +58 -37
  256. data/mod/05_email/spec/set/right/followers_spec.rb +9 -14
  257. data/mod/05_email/spec/set/right/following_spec.rb +1 -1
  258. data/mod/05_email/spec/set/self/follow_defaults_spec.rb +1 -1
  259. data/mod/05_standard/lib/carrier_wave/cardmount.rb +9 -9
  260. data/mod/05_standard/lib/file_uploader.rb +8 -13
  261. data/mod/05_standard/lib/image_uploader.rb +8 -9
  262. data/mod/05_standard/set/abstract/attachment.rb +26 -43
  263. data/mod/05_standard/set/all/account.rb +2 -2
  264. data/mod/05_standard/set/all/comment.rb +11 -13
  265. data/mod/05_standard/set/all/error.rb +18 -18
  266. data/mod/05_standard/set/all/event_viz.rb +16 -29
  267. data/mod/05_standard/set/all/links.rb +35 -34
  268. data/mod/05_standard/set/all/list_changes.rb +10 -12
  269. data/mod/05_standard/set/all/rich_html/content.rb +13 -13
  270. data/mod/05_standard/set/all/rich_html/editing.rb +5 -5
  271. data/mod/05_standard/set/all/rich_html/form.rb +22 -26
  272. data/mod/05_standard/set/all/rich_html/header.rb +18 -25
  273. data/mod/05_standard/set/all/rich_html/menu.rb +20 -22
  274. data/mod/05_standard/set/all/rich_html/modal.rb +3 -3
  275. data/mod/05_standard/set/all/rich_html/toolbar.rb +49 -58
  276. data/mod/05_standard/set/all/rich_html/wrapper.rb +40 -41
  277. data/mod/05_standard/set/right/account.rb +26 -14
  278. data/mod/05_standard/set/right/email.rb +2 -2
  279. data/mod/05_standard/set/right/password.rb +6 -5
  280. data/mod/05_standard/set/right/salt.rb +2 -2
  281. data/mod/05_standard/set/right/stats.rb +17 -20
  282. data/mod/05_standard/set/right/token.rb +1 -1
  283. data/mod/05_standard/set/right/when_created.rb +1 -1
  284. data/mod/05_standard/set/right/when_last_edited.rb +1 -1
  285. data/mod/05_standard/set/rstar/rules.rb +3 -3
  286. data/mod/05_standard/set/rstar/rules_editor.rb +39 -39
  287. data/mod/05_standard/set/self/account_links.rb +21 -22
  288. data/mod/05_standard/set/self/admin_info.rb +5 -5
  289. data/mod/05_standard/set/self/alerts.rb +1 -1
  290. data/mod/05_standard/set/self/all.rb +1 -1
  291. data/mod/05_standard/set/self/foot.rb +1 -1
  292. data/mod/05_standard/set/self/head.rb +19 -22
  293. data/mod/05_standard/set/self/navbox.rb +3 -7
  294. data/mod/05_standard/set/self/now.rb +1 -1
  295. data/mod/05_standard/set/self/recent.rb +19 -25
  296. data/mod/05_standard/set/self/search.rb +2 -4
  297. data/mod/05_standard/set/self/signin.rb +6 -6
  298. data/mod/05_standard/set/self/stats.rb +31 -38
  299. data/mod/05_standard/set/self/version.rb +1 -2
  300. data/mod/05_standard/set/type/basic.rb +15 -17
  301. data/mod/05_standard/set/type/cardtype.rb +3 -3
  302. data/mod/05_standard/set/type/date.rb +1 -2
  303. data/mod/05_standard/set/type/file.rb +22 -33
  304. data/mod/05_standard/set/type/image.rb +30 -23
  305. data/mod/05_standard/set/type/layout_type.rb +4 -4
  306. data/mod/05_standard/set/type/list.rb +32 -38
  307. data/mod/05_standard/set/type/listed_by.rb +11 -13
  308. data/mod/05_standard/set/type/number.rb +5 -6
  309. data/mod/05_standard/set/type/phrase.rb +1 -1
  310. data/mod/05_standard/set/type/search_type.rb +25 -23
  311. data/mod/05_standard/set/type/session.rb +2 -3
  312. data/mod/05_standard/set/type/set.rb +46 -51
  313. data/mod/05_standard/set/type/signup.rb +18 -19
  314. data/mod/05_standard/set/type/toggle.rb +5 -5
  315. data/mod/05_standard/set/type/user.rb +6 -6
  316. data/mod/05_standard/spec/chunk/include_spec.rb +115 -98
  317. data/mod/05_standard/spec/chunk/link_spec.rb +58 -31
  318. data/mod/05_standard/spec/chunk/query_reference_spec.rb +12 -14
  319. data/mod/05_standard/spec/set/all/email_html_spec.rb +3 -3
  320. data/mod/05_standard/spec/set/all/error_spec.rb +3 -3
  321. data/mod/05_standard/spec/set/all/history_spec.rb +52 -38
  322. data/mod/05_standard/spec/set/all/links_spec.rb +2 -2
  323. data/mod/05_standard/spec/set/all/rich_html/editing_spec.rb +0 -1
  324. data/mod/05_standard/spec/set/all/rich_html/form_spec.rb +11 -11
  325. data/mod/05_standard/spec/set/all/rich_html/wrapper_spec.rb +4 -4
  326. data/mod/05_standard/spec/set/right/email_spec.rb +1 -4
  327. data/mod/05_standard/spec/set/right/password_spec.rb +4 -7
  328. data/mod/05_standard/spec/set/right/stats_spec.rb +2 -3
  329. data/mod/05_standard/spec/set/right/when_created_spec.rb +1 -1
  330. data/mod/05_standard/spec/set/right/when_last_edited_spec.rb +1 -1
  331. data/mod/05_standard/spec/set/rstar/rules_spec.rb +6 -6
  332. data/mod/05_standard/spec/set/self/all_spec.rb +11 -13
  333. data/mod/05_standard/spec/set/self/head_spec.rb +1 -3
  334. data/mod/05_standard/spec/set/self/navbox_spec.rb +1 -1
  335. data/mod/05_standard/spec/set/self/now_spec.rb +2 -2
  336. data/mod/05_standard/spec/set/self/signin_spec.rb +1 -1
  337. data/mod/05_standard/spec/set/self/stats_spec.rb +1 -1
  338. data/mod/05_standard/spec/set/self/version_spec.rb +2 -2
  339. data/mod/05_standard/spec/set/type/cardtype_spec.rb +3 -4
  340. data/mod/05_standard/spec/set/type/date_spec.rb +1 -1
  341. data/mod/05_standard/spec/set/type/email_template_spec.rb +5 -5
  342. data/mod/05_standard/spec/set/type/file_spec.rb +50 -28
  343. data/mod/05_standard/spec/set/type/html_spec.rb +12 -7
  344. data/mod/05_standard/spec/set/type/image_spec.rb +55 -45
  345. data/mod/05_standard/spec/set/type/layout_type_spec.rb +2 -2
  346. data/mod/05_standard/spec/set/type/listed_by_spec.rb +2 -2
  347. data/mod/05_standard/spec/set/type/number_spec.rb +1 -1
  348. data/mod/05_standard/spec/set/type/phrase_spec.rb +1 -1
  349. data/mod/05_standard/spec/set/type/search_type_spec.rb +15 -16
  350. data/mod/05_standard/spec/set/type/set_spec.rb +16 -17
  351. data/mod/05_standard/spec/set/type/signup_spec.rb +7 -5
  352. data/mod/05_standard/spec/set/type/toggle_spec.rb +4 -4
  353. data/mod/05_standard/spec/set/type/uri_spec.rb +11 -11
  354. data/mod/05_standard/spec/set/type/user_spec.rb +0 -1
  355. data/mod/06_bootstrap/set/all/bootstrap/form.rb +9 -10
  356. data/mod/06_bootstrap/set/all/bootstrap/helper.rb +22 -27
  357. data/mod/06_bootstrap/set/all/bootstrap/wrapper.rb +1 -2
  358. data/mod/06_bootstrap/set/all/rich_bootstrap.rb +1 -3
  359. data/mod/06_bootstrap/set/self/bootstrap_cards.rb +2 -2
  360. data/mod/06_bootstrap/set/self/bootstrap_js.rb +2 -2
  361. data/mod/06_bootstrap/set/self/bootswatch_shared.rb +19 -19
  362. data/mod/06_bootstrap/set/self/smartmenu_css.rb +2 -2
  363. data/mod/06_bootstrap/set/self/smartmenu_js.rb +3 -3
  364. data/mod/06_bootstrap/spec/set/all/bootstrap/form_spec.rb +5 -5
  365. data/spec/lib/card/action_spec.rb +4 -4
  366. data/spec/lib/card/cache_spec.rb +3 -5
  367. data/spec/lib/card/chunk_spec.rb +6 -8
  368. data/spec/lib/card/codename_spec.rb +4 -6
  369. data/spec/lib/card/content_spec.rb +12 -17
  370. data/spec/lib/card/diff_spec.rb +59 -61
  371. data/spec/lib/card/format_spec.rb +55 -34
  372. data/spec/lib/card/loader_spec.rb +35 -37
  373. data/spec/lib/card/name_spec.rb +159 -145
  374. data/spec/lib/card/query_spec.rb +4 -4
  375. data/spec/lib/card/reference_spec.rb +24 -24
  376. data/spec/lib/card/set_pattern_spec.rb +3 -3
  377. data/spec/lib/card/stage_director_spec.rb +218 -0
  378. data/spec/lib/card/subcards_spec.rb +12 -16
  379. data/spec/lib/card/success_spec.rb +16 -18
  380. data/spec/lib/card/view_cache_spec.rb +1 -1
  381. data/spec/mailers/mailer_spec.rb +3 -5
  382. data/spec/models/card/cardtype_spec.rb +40 -51
  383. data/spec/models/card/create_spec.rb +58 -39
  384. data/spec/models/card/trash_spec.rb +23 -32
  385. data/spec/models/card/type_transition_spec.rb +41 -32
  386. data/spec/models/card/validation_spec.rb +13 -15
  387. data/spec/models/card_spec.rb +48 -59
  388. data/spec/spec_helper.rb +26 -31
  389. metadata +16 -2
@@ -1,6 +1,6 @@
1
1
  format do
2
2
  def render_haml locals={}, template=nil, a_binding=nil, &block
3
- template ||= block.call
3
+ template ||= yield
4
4
  a_binding ||= binding
5
5
  ::Haml::Engine.new(template).render(a_binding, locals)
6
6
  end
@@ -1,41 +1,35 @@
1
- JUNK_INIT_ARGS = %w{ missing skip_virtual id }
2
-
3
- module ClassMethods
4
- def new args = {}, _options = {}
5
- args = (args || {}).stringify_keys
6
- JUNK_INIT_ARGS.each { |a| args.delete(a) }
7
- %w{ type type_code }.each { |k| args.delete(k) if args[k].blank? }
8
- args.delete('content') if args['attach'] # should not be handled here!
9
- super args
10
- end
11
- end
12
-
13
- def initialize args = {}
14
- args['name'] = args['name'].to_s
15
- args['db_content'] = args.delete('content') if args['content']
16
- @supercard = args.delete 'supercard' # must come before name =
17
- skip_modules = args.delete 'skip_modules'
18
- skip_type_lookup = args['skip_type_lookup']
19
-
20
- super args # ActiveRecord #initialize
21
- if !type_id && !skip_type_lookup
22
- self.type_id = get_type_id_from_structure
23
- end
24
- include_set_modules unless skip_modules
25
- self
26
- end
27
-
28
- def include_set_modules
29
- unless @set_mods_loaded
30
- set_modules.each do |m|
31
- singleton_class.send :include, m
32
- end
33
- assign_set_specific_attributes
34
- @set_mods_loaded = true
35
- end
36
- self
37
- end
38
-
39
- event :initialize_success_object, before: :handle do
40
- Env[:success] = Success.new(cardname, Env.params[:success])
41
- end
1
+ JUNK_INIT_ARGS = %w( missing skip_virtual id ).freeze
2
+
3
+ module ClassMethods
4
+ def new args={}, _options={}
5
+ args = (args || {}).stringify_keys
6
+ JUNK_INIT_ARGS.each { |a| args.delete(a) }
7
+ %w( type type_code ).each { |k| args.delete(k) if args[k].blank? }
8
+ args.delete('content') if args['attach'] # should not be handled here!
9
+ super args
10
+ end
11
+ end
12
+
13
+ def initialize args={}
14
+ args['name'] = args['name'].to_s
15
+ args['db_content'] = args.delete('content') if args['content']
16
+ @supercard = args.delete 'supercard' # must come before name =
17
+ skip_modules = args.delete 'skip_modules'
18
+ skip_type_lookup = args['skip_type_lookup']
19
+
20
+ super args # ActiveRecord #initialize
21
+ self.type_id = get_type_id_from_structure if !type_id && !skip_type_lookup
22
+ include_set_modules unless skip_modules
23
+ self
24
+ end
25
+
26
+ def include_set_modules
27
+ unless @set_mods_loaded
28
+ set_modules.each do |m|
29
+ singleton_class.send :include, m
30
+ end
31
+ assign_set_specific_attributes
32
+ @set_mods_loaded = true
33
+ end
34
+ self
35
+ end
@@ -1,10 +1,8 @@
1
- event :discard_deleted_locations, after: :store, on: :delete do
1
+ event :discard_deleted_locations, in: :finalize, on: :delete do
2
2
  Env.discard_locations_for self
3
- if success.target == self
4
- success.target = :previous
5
- end
3
+ success.target = :previous if success.target == self
6
4
  end
7
5
 
8
- event :save_current_location, before: :show, on: :read do
6
+ event :save_current_location, before: :show_page, on: :read do
9
7
  Env.save_location self
10
8
  end
@@ -4,9 +4,7 @@ module ClassMethods
4
4
  def uniquify_name name, rename=:new
5
5
  return name unless Card.exists?(name)
6
6
  uniq_name = "#{name} 1"
7
- while Card.exists?(uniq_name)
8
- uniq_name.next!
9
- end
7
+ uniq_name.next! while Card.exists?(uniq_name)
10
8
  if rename == :old
11
9
  # name conflict resolved; original name can be used
12
10
  Card[name].update_attributes! name: uniq_name,
@@ -38,8 +36,10 @@ def name= newname
38
36
  reset_patterns_if_rule
39
37
  reset_patterns
40
38
  end
41
- subcards.each do |subcard|
42
- subcard.name = subcard.cardname.replace_part name, newname
39
+ if @director
40
+ subcards.each do |subcard|
41
+ subcard.name = subcard.cardname.replace_part name, newname
42
+ end
43
43
  end
44
44
 
45
45
  write_attribute :name, cardname.s
@@ -166,8 +166,8 @@ def repair_key
166
166
  key_blocker.save
167
167
  end
168
168
 
169
- saved = (self.key = correct_key) && self.save!
170
- saved ||= (self.cardname = current_key) && self.save!
169
+ saved = (self.key = correct_key) && save!
170
+ saved ||= (self.cardname = current_key) && save!
171
171
 
172
172
  if saved
173
173
  descendants.each(&:repair_key)
@@ -182,50 +182,7 @@ rescue
182
182
  self
183
183
  end
184
184
 
185
- event :permit_codename, before: :approve, on: :update, changed: :codename do
186
- errors.add :codename, 'only admins can set codename' unless Auth.always_ok?
187
- end
188
-
189
- event :validate_unique_codename, after: :permit_codename do
190
- if codename.present? && errors.empty? &&
191
- Card.find_by_codename(codename).present?
192
- errors.add :codename, "codename #{codename} already in use"
193
- end
194
- end
195
-
196
- event :validate_name, before: :approve, on: :save do
197
- cdname = name.to_name
198
- if name.length > 255
199
- errors.add :name, 'is too long (255 character maximum)'
200
- elsif cdname.blank?
201
- errors.add :name, "can't be blank"
202
- elsif name_changed?
203
- # Rails.logger.debug "valid name #{card.name.inspect} New #{name.inspect}"
204
-
205
- unless cdname.valid?
206
- errors.add :name, 'may not contain any of the following characters: ' \
207
- "#{Card::Name.banned_array * ' '}"
208
- end
209
- # this is to protect against using a plus card as a tag
210
- if cdname.junction? && simple? && id &&
211
- Auth.as_bot { Card.count_by_wql right_id: id } > 0
212
- errors.add :name, "#{name} in use as a tag"
213
- end
214
-
215
- # validate uniqueness of name
216
- condition_sql = 'cards.key = ? and trash=?'
217
- condition_params = [cdname.key, false]
218
- unless new_record?
219
- condition_sql << ' AND cards.id <> ?'
220
- condition_params << id
221
- end
222
- if (c = Card.find_by(condition_sql, *condition_params))
223
- errors.add :name, "must be unique; '#{c.name}' already exists."
224
- end
225
- end
226
- end
227
-
228
- event :set_autoname, before: :validate_name, on: :create do
185
+ event :set_autoname, :prepare_to_validate, on: :create do
229
186
  if name.blank? && (autoname_card = rule_card(:autoname))
230
187
  self.name = autoname autoname_card.content
231
188
  # FIXME: should give placeholder in approve phase
@@ -234,34 +191,28 @@ event :set_autoname, before: :validate_name, on: :create do
234
191
  end
235
192
  end
236
193
 
237
- event :validate_key, after: :validate_name, on: :save do
238
- if key.empty?
239
- errors.add :key, 'cannot be blank' if errors.empty?
240
- elsif key != cardname.key
241
- errors.add :key, "wrong key '#{key}' for name #{name}"
242
- end
243
- end
244
-
245
- event :set_name, before: :store, changed: :name do
194
+ event :set_name, :store, changed: :name do
246
195
  Card.expire name
247
196
  Card.expire name_was
197
+ end
198
+
199
+ event :set_left_and_right, :store,
200
+ changed: :name, on: :save do
248
201
  if cardname.junction?
249
202
  [:left, :right].each do |side|
250
203
  sidename = cardname.send "#{side}_name"
251
- # warn "sidename #{name} / #{name_was} / #{cardname},
252
- # #{side}: #{sidename}"
253
204
  sidecard = Card[sidename]
254
205
 
255
206
  # eg, renaming A to A+B
256
207
  old_name_in_way = (sidecard && sidecard.id == id)
257
208
  suspend_name(sidename) if old_name_in_way
258
- send "#{side}_id=", begin
209
+ side_id_or_card =
259
210
  if !sidecard || old_name_in_way
260
- Card.create! name: sidename, supercard: self
211
+ add_subcard(sidename.s)
261
212
  else
262
- sidecard
263
- end.id
264
- end
213
+ sidecard.id
214
+ end
215
+ send "#{side}_id=", side_id_or_card
265
216
  end
266
217
  else
267
218
  self.left_id = self.right_id = nil
@@ -285,7 +236,7 @@ def suspend_name name
285
236
  Card.where(id: id).update_all(name: tmp_name, key: tmp_name)
286
237
  end
287
238
 
288
- event :cascade_name_changes, after: :store, on: :update, changed: :name do
239
+ event :cascade_name_changes, :finalize, on: :update, changed: :name do
289
240
  des = descendants
290
241
  @descendants = nil # reset
291
242
 
@@ -0,0 +1,56 @@
1
+ event :permit_codename, :validate,
2
+ on: :update, changed: :codename do
3
+ errors.add :codename, 'only admins can set codename' unless Auth.always_ok?
4
+ validate_uniqueness_of_codename
5
+ end
6
+
7
+ event :validate_uniqueness_of_codename do
8
+ return unless codename.present? && errors.empty? &&
9
+ Card.find_by_codename(codename).present?
10
+ errors.add :codename, "codename #{codename} already in use"
11
+ end
12
+
13
+ event :validate_name, :validate,
14
+ on: :save, changed: :name do
15
+ validate_legality_of_name
16
+ return if errors.any?
17
+ validate_uniqueness_of_name
18
+ end
19
+
20
+ event :validate_uniqueness_of_name do
21
+ # validate uniqueness of name
22
+ condition_sql = 'cards.key = ? and trash=?'
23
+ condition_params = [cardname.key, false]
24
+ unless new_record?
25
+ condition_sql << ' AND cards.id <> ?'
26
+ condition_params << id
27
+ end
28
+ if (c = Card.find_by(condition_sql, *condition_params))
29
+ errors.add :name, "must be unique; '#{c.name}' already exists."
30
+ end
31
+ end
32
+
33
+ event :validate_legality_of_name do
34
+ if name.length > 255
35
+ errors.add :name, 'is too long (255 character maximum)'
36
+ elsif cardname.blank?
37
+ errors.add :name, "can't be blank"
38
+ else
39
+ unless cardname.valid?
40
+ errors.add :name, 'may not contain any of the following characters: ' \
41
+ "#{Card::Name.banned_array * ' '}"
42
+ end
43
+ # this is to protect against using a plus card as a tag
44
+ return unless cardname.junction? && simple? && id &&
45
+ Auth.as_bot { Card.count_by_wql right_id: id } > 0
46
+ errors.add :name, "#{name} in use as a tag"
47
+ end
48
+ end
49
+
50
+ event :validate_key, after: :validate_name, on: :save do
51
+ if key.empty?
52
+ errors.add :key, 'cannot be blank' if errors.empty?
53
+ elsif key != cardname.key
54
+ errors.add :key, "wrong key '#{key}' for name #{name}"
55
+ end
56
+ end
@@ -24,13 +24,13 @@ def reset_patterns_if_rule saving=false
24
24
 
25
25
  # FIXME: should be in right/read.rb
26
26
  if saving && right.id == Card::ReadID
27
- self.add_to_read_rule_update_queue(set.item_cards limit: 0)
27
+ add_to_read_rule_update_queue(set.item_cards limit: 0)
28
28
  end
29
29
  end
30
30
  end
31
31
 
32
32
  def safe_set_keys
33
- patterns.map(&:safe_key).reverse * " "
33
+ patterns.map(&:safe_key).reverse * ' '
34
34
  end
35
35
 
36
36
  def set_modules
@@ -98,7 +98,7 @@ end
98
98
 
99
99
  def permitted? action
100
100
  return if Card.config.read_only
101
- return true if action != :comment and Auth.always_ok?
101
+ return true if action != :comment && Auth.always_ok?
102
102
 
103
103
  permitted_ids = who_can action
104
104
  if action == :comment && Auth.always_ok?
@@ -110,9 +110,7 @@ def permitted? action
110
110
  end
111
111
 
112
112
  def permit action, verb=nil
113
- if Card.config.read_only # not called by ok_to_read
114
- deny_because 'Currently in read-only mode'
115
- end
113
+ deny_because 'Currently in read-only mode' if Card.config.read_only # not called by ok_to_read
116
114
 
117
115
  return if permitted? action
118
116
  verb ||= action.to_s
@@ -127,10 +125,9 @@ def ok_to_create
127
125
  # left is supercard; create permissions will get checked there.
128
126
  next if side == :left && @superleft
129
127
  part_card = send side, new: {}
130
- if part_card && part_card.new_card? # if no card, there must be other errors
131
- unless part_card.ok? :create
132
- deny_because you_cant("create #{part_card.name}")
133
- end
128
+ next unless part_card && part_card.new_card? # if no card, there must be other errors
129
+ unless part_card.ok? :create
130
+ deny_because you_cant("create #{part_card.name}")
134
131
  end
135
132
  end
136
133
  end
@@ -161,12 +158,12 @@ def ok_to_comment
161
158
  deny_because 'No comments allowed on structured content' if structure
162
159
  end
163
160
 
164
- event :clear_read_rule, before: :store, on: :delete do
161
+ event :clear_read_rule, :store, on: :delete do
165
162
  self.read_rule_id = self.read_rule_class = nil
166
163
  end
167
164
 
168
- event :set_read_rule, before: :store, on: :save do
169
- # avoid doing this on simple content saves?
165
+ event :set_read_rule, :store,
166
+ on: :save, changed: [:type_id, :name] do
170
167
  read_rule_id, read_rule_class = permission_rule_id_and_class(:read)
171
168
  self.read_rule_id = read_rule_id
172
169
  self.read_rule_class = read_rule_class
@@ -188,20 +185,18 @@ end
188
185
  def update_read_rule
189
186
  Card.record_timestamps = false
190
187
  reset_patterns # why is this needed?
191
- rcard, rclass = permission_rule_card :read
188
+ rcard_id, rclass = permission_rule_id_and_class :read
192
189
  # these two are just to make sure vals are correct on current object
193
- self.read_rule_id = rcard.id
190
+ self.read_rule_id = rcard_id
194
191
  self.read_rule_class = rclass
195
- Card.where(id: id).update_all read_rule_id: rcard.id, read_rule_class: rclass
192
+ Card.where(id: id).update_all read_rule_id: rcard_id, read_rule_class: rclass
196
193
  expire_hard
197
194
 
198
195
  # currently doing a brute force search for every card that may be impacted.
199
196
  # may want to optimize(?)
200
197
  Auth.as_bot do
201
198
  fields.each do |field|
202
- if field.rule(:read) == '_left'
203
- field.update_read_rule
204
- end
199
+ field.update_read_rule if field.rule(:read) == '_left'
205
200
  end
206
201
  end
207
202
 
@@ -209,12 +204,11 @@ ensure
209
204
  Card.record_timestamps = true
210
205
  end
211
206
 
212
-
213
207
  def add_to_read_rule_update_queue updates
214
208
  @read_rule_update_queue = Array.wrap(@read_rule_update_queue).concat updates
215
209
  end
216
210
 
217
- event :check_permissions, after: :approve do
211
+ event :check_permissions, :validate do
218
212
  task =
219
213
  if @action != :delete && comment # will be obviated by new comment handling
220
214
  :comment
@@ -256,7 +250,7 @@ def have_recaptcha_keys?
256
250
  end
257
251
  end
258
252
 
259
- event :recaptcha, before: :approve do
253
+ event :recaptcha, :validate do
260
254
  if !@supercard && !Env[:recaptcha_used] && recaptcha_on?
261
255
  Env[:recaptcha_used] = true
262
256
  Env[:controller].verify_recaptcha model: self, attribute: :captcha
@@ -1,208 +1,17 @@
1
-
2
- # The Card#abort method is for cleanly exiting an action without continuing
3
- # to process any further events.
4
- #
5
- # Three statuses are supported:
6
- #
7
- # failure: adds an error, returns false on save
8
- # success: no error, returns true on save
9
- # triumph: similar to success, but if called on a subcard
10
- # it causes the entire action to abort (not just the subcard)
11
-
12
- def abort status, msg = 'action canceled'
13
- if status == :failure && errors.empty?
14
- errors.add :abort, msg
15
- elsif Hash === status && status[:success]
16
- success << status[:success]
17
- status = :success
18
- end
19
- raise Card::Abort.new(status, msg)
20
- end
21
-
22
- def abortable
23
- yield
24
- rescue Card::Abort => e
25
- if e.status == :triumph
26
- @supercard ? raise(e) : true
27
- elsif e.status == :success
28
- if @supercard
29
- @supercard.subcards.delete(key)
30
- end
31
- true
32
- end
33
- end
34
-
35
- def valid_subcard?
36
- abortable { valid? }
37
- end
38
-
39
- # this is an override of standard rails behavior that rescues abort
40
- # makes it so that :success abortions do not rollback
41
- def with_transaction_returning_status
42
- status = nil
43
- self.class.transaction do
44
- add_to_transaction
45
- status = abortable { yield }
46
- raise ActiveRecord::Rollback unless status
47
- end
48
- status
49
- end
50
-
51
- # perhaps above should be in separate module?
52
- # ~~~~~~
53
-
54
- PHASES = {}
55
- [:prepare, :approve, :store, :stored, :extend, :subsequent]
56
- .each_with_index do |phase, i|
57
- PHASES[phase] = i
58
- end
59
-
60
- def run_phase phase, &block
61
- @phase = phase
62
- @subphase = :before
63
- if block_given?
64
- block.call
65
- else
66
- run_callbacks phase
67
- end
68
- @subphase = :after
69
- end
70
-
71
- def simulate_phase opts, &block
72
- @phase
73
- end
74
-
75
- def phase
76
- @phase || (@supercard && @supercard.phase)
77
- end
78
-
79
- def subphase
80
- @subphase || (@supercard && @supercard.subphase)
81
- end
82
-
83
- def prepare
84
- @action = identify_action
85
- # the following should really happen when type, name etc are changed
1
+ def prepare_for_phases
2
+ identify_action
86
3
  reset_patterns
87
4
  include_set_modules
88
- run_phase :prepare
89
- rescue => e
90
- rescue_event e
91
5
  end
92
6
 
93
- def approve
94
- @action ||= identify_action
95
- run_phase :approve
96
- expire_pieces if errors.any?
97
- errors.empty?
98
- rescue => e
99
- rescue_event e
7
+ def run_phases?
8
+ director.main? && !skip_phases
100
9
  end
101
10
 
102
- def identify_action
103
- case
104
- when trash then :delete
105
- when new_card? then :create
106
- else :update
107
- end
108
- end
109
-
110
- def store
111
- run_phase :store do
112
- run_callbacks :store do
113
- yield # unless @draft
114
- @virtual = false
115
- end
116
- end
117
- run_phase :stored
118
- rescue => e
119
- rescue_event e
120
- ensure
121
- @from_trash = @last_content_action_id = nil
122
- end
123
-
124
- def extend
125
- run_phase :extend
126
- run_phase :subsequent
127
- rescue => e
128
- rescue_event e
129
- ensure
130
- @action = nil
131
- end
132
-
133
- def rescue_event e
134
- @action = nil
135
- expire_pieces
136
- subcards.each(&:expire_pieces)
137
- raise e
138
- # rescue Card::Cancel
139
- # false
140
- end
141
-
142
- def phase_ok? opts
143
- phase && (
144
- (opts[:during] && in?(opts[:during])) ||
145
- (opts[:before] && before?(opts[:before])) ||
146
- (opts[:after] && after?(opts[:after])) ||
147
- true # no phase restriction in opts
148
- )
149
- end
150
-
151
- def before? allowed_phase
152
- PHASES[allowed_phase] > PHASES[phase] ||
153
- (PHASES[allowed_phase] == PHASES[phase] && subphase == :before)
154
- end
155
-
156
- def after? allowed_phase
157
- PHASES[allowed_phase] < PHASES[phase] ||
158
- (PHASES[allowed_phase] == PHASES[phase] && subphase == :after)
159
- end
160
-
161
- def in? allowed_phase
162
- (allowed_phase.is_a?(Array) && allowed_phase.include?(phase)) ||
163
- allowed_phase == phase
164
- end
165
-
166
- event :notable_exception_raised do
167
- Rails.logger.debug "BT: #{Card::Error.current.backtrace * "\n "}"
168
- end
169
-
170
- def event_applies? opts
171
- on_condition_applies?(opts[:on]) &&
172
- changed_condition_applies?(opts[:changed]) &&
173
- when_condition_applies?(opts[:when])
174
- end
175
-
176
- def on_condition_applies? action
177
- if action
178
- Array.wrap(action).member? @action
179
- else
180
- true
181
- end
182
- end
183
-
184
- def changed_condition_applies? db_column
185
- if db_column
186
- db_column =
187
- case db_column.to_sym
188
- when :content then 'db_content'
189
- when :type then 'type_id'
190
- else db_column.to_s
191
- end
192
- @action != :delete && changes[db_column]
193
- else
194
- true
195
- end
196
- end
197
-
198
- def when_condition_applies? block
199
- if block
200
- block.call self
201
- else
202
- true
203
- end
204
- end
11
+ delegate :validation_phase, to: :director
12
+ delegate :storage_phase, to: :director
13
+ delegate :integration_phase, to: :director
205
14
 
206
- def success
207
- Env.success(cardname)
15
+ def clean_up
16
+ Card::DirectorRegister.clear
208
17
  end