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
@@ -13,6 +13,6 @@ class DeleteOldRelatedTabCards < Card::CoreMigration
13
13
  c = Card[name]
14
14
  c.codename = nil
15
15
  c.delete!
16
- end
16
+ end
17
17
  end
18
18
  end
@@ -3,11 +3,10 @@
3
3
  class ImportHelpText < Card::CoreMigration
4
4
  def up
5
5
  dir = data_path '1.11_help_text.json'
6
- data = JSON.parse( File.read dir )
6
+ data = JSON.parse(File.read dir)
7
7
  data.each do |atom|
8
8
  c = atom['card']
9
9
  Card.merge c['name'], { type: c['type'], content: atom['views'][0]['parts'] }, pristine: true
10
10
  end
11
11
  end
12
-
13
12
  end
@@ -26,7 +26,7 @@ class AddStyleCards < Card::CoreMigration
26
26
 
27
27
  # PERMISSIONS FOR CSS AND SCSS TYPES
28
28
 
29
- ['CSS', 'SCSS', 'Skin'].each do |type|
29
+ %w(CSS SCSS Skin).each do |type|
30
30
  [:create, :update, :delete].each do |action|
31
31
  Card.create! name: "#{type}+#{Card[:type].name}+#{Card[action].name}",
32
32
  content: "[[#{Card[:administrator].name}]]"
@@ -53,10 +53,10 @@ class AddStyleCards < Card::CoreMigration
53
53
 
54
54
  simple_styles = []
55
55
  classic_styles = []
56
- %w{
56
+ %w(
57
57
  jquery-ui-smoothness.css functional.scss standard.scss right_sidebar.scss
58
58
  common.scss classic_cards.scss traditional.scss
59
- }.each_with_index do |sheet, index|
59
+ ).each_with_index do |sheet, index|
60
60
  name, type = sheet.split '.'
61
61
  name.tr! '_', ' '
62
62
  index < 5 ? simple_styles << name : classic_styles << name
@@ -2,10 +2,9 @@
2
2
 
3
3
  class MoveStylesToContent < Card::CoreMigration
4
4
  def up
5
- dir = File.join data_path, "1.12_stylesheets"
6
- %w{ right_sidebar common classic_cards traditional }.each do |sheetname|
5
+ dir = File.join data_path, '1.12_stylesheets'
6
+ %w( right_sidebar common classic_cards traditional ).each do |sheetname|
7
7
  Card["style: #{sheetname}"].update_attributes! codename: nil, content: File.read("#{dir}/#{sheetname}.scss")
8
8
  end
9
9
  end
10
-
11
10
  end
@@ -3,13 +3,13 @@
3
3
  class JsonizeTinymce < Card::CoreMigration
4
4
  def up
5
5
  card = Card[:tiny_mce]
6
- cleaned_rows = card.content.strip.split( /\s*\,\s+/ ).map do |row|
6
+ cleaned_rows = card.content.strip.split(/\s*\,\s+/).map do |row|
7
7
  key, val = row.split(/\s*\:\s*/)
8
8
  val.gsub!(/\"\s*\+\s*\"/, '')
9
9
  val.gsub! "'", '"‚'
10
10
  %("#{key}":#{val})
11
11
  end
12
- card.content = %({\n#{ cleaned_rows.join ",\n" }\n})
12
+ card.content = %({\n#{cleaned_rows.join ",\n"}\n})
13
13
  card.save!
14
14
  end
15
15
  end
@@ -3,7 +3,7 @@
3
3
  class UpdateStylesheets < Card::CoreMigration
4
4
  def up
5
5
  dir = File.join data_path, '1.12_stylesheets'
6
- %w{ common traditional }.each do |sheetname|
6
+ %w( common traditional ).each do |sheetname|
7
7
  card = Card["style: #{sheetname}"]
8
8
  if card && card.pristine?
9
9
  card.update_attributes! content: File.read("#{dir}/#{sheetname}.scss")
@@ -14,5 +14,4 @@ class UpdateStylesheets < Card::CoreMigration
14
14
  c.delete!
15
15
  end
16
16
  end
17
-
18
17
  end
@@ -2,20 +2,19 @@
2
2
 
3
3
  class AccountEvents < Card::CoreMigration
4
4
  def up
5
- aa = Card.fetch "#{ Card[ :signup ].name }+#{ Card[ :type ].name}+#{ Card[:accountable ].name}", new: {}
6
- aa.content = "1"
5
+ aa = Card.fetch "#{Card[:signup].name}+#{Card[:type].name}+#{Card[:accountable].name}", new: {}
6
+ aa.content = '1'
7
7
  aa.save!
8
8
 
9
- role_right = "#{ Card[ :roles ].name }+#{ Card[ :right ].name }"
9
+ role_right = "#{Card[:roles].name}+#{Card[:right].name}"
10
10
 
11
- r_options = Card.fetch "#{ role_right }+#{ Card[ :options ].name }", new: {}
11
+ r_options = Card.fetch "#{role_right}+#{Card[:options].name}", new: {}
12
12
  r_options.type_id = Card::SearchTypeID
13
13
  r_options.content = %({"type":"role", "not":{"codename":["in","anyone","anyone_signed_in"]}})
14
14
  r_options.save!
15
15
 
16
- r_input = Card.fetch "#{ role_right }+#{ Card[ :input ].name }", new: {}
16
+ r_input = Card.fetch "#{role_right}+#{Card[:input].name}", new: {}
17
17
  r_input.content = '[[checkbox]]'
18
18
  r_input.save!
19
19
  end
20
-
21
20
  end
@@ -2,11 +2,10 @@
2
2
 
3
3
  class CommonCssPatch < Card::CoreMigration
4
4
  def up
5
- dir = File.join data_path, "1.12_stylesheets"
6
- card = Card["style: common"]
5
+ dir = File.join data_path, '1.12_stylesheets'
6
+ card = Card['style: common']
7
7
  if card && card.pristine?
8
8
  card.update_attributes! content: File.read("#{dir}/common.scss")
9
9
  end
10
10
  end
11
-
12
11
  end
@@ -7,5 +7,4 @@ class ResetAccountRequestType < Card::CoreMigration
7
7
  arcard.update_attributes type_id: Card::CardtypeID
8
8
  end
9
9
  end
10
-
11
10
  end
@@ -4,70 +4,61 @@ class User < ActiveRecord::Base
4
4
  end
5
5
 
6
6
  class UserDataToCards < Card::CoreMigration
7
-
8
7
  def up
9
-
10
- puts "adding new codename cards"
11
- [ :password, :token, :salt, :status, :signin, :stats ].each do |codename|
8
+ puts 'adding new codename cards'
9
+ [:password, :token, :salt, :status, :signin, :stats].each do |codename|
12
10
  Card.create! name: "*#{codename}", codename: codename
13
11
  end
14
12
 
15
13
  Card::Codename.reset_cache
16
14
 
17
- puts "setting read permissions for account cards (Administrator)"
18
- [ :password, :token, :salt, :status, :email, :account ].each do |codename|
19
- rule_name = [ codename, :right, :read ].map { |code| Card[code].name } * '+'
15
+ puts 'setting read permissions for account cards (Administrator)'
16
+ [:password, :token, :salt, :status, :email, :account].each do |codename|
17
+ rule_name = [codename, :right, :read].map { |code| Card[code].name } * '+'
20
18
  rule_card = Card.fetch rule_name, new: {}
21
19
  rule_card.content = '[[Administrator]]'
22
20
  rule_card.save!
23
21
  end
24
22
 
25
- puts "making email and password fields default to Phrase cards"
23
+ puts 'making email and password fields default to Phrase cards'
26
24
  [:email, :password].each do |field|
27
25
  rulename = [field, :right, :default].map { |code| Card[code].name } * '+'
28
26
  Card.create! name: rulename, type_id: Card::PhraseID
29
27
  end
30
28
 
31
- puts "signin permissions"
29
+ puts 'signin permissions'
32
30
  [:read, :update].each do |setting|
33
- rulename = [ :signin, :self, setting ].map { |code| Card[code].name } * '+'
31
+ rulename = [:signin, :self, setting].map { |code| Card[code].name } * '+'
34
32
  Card.create! name: rulename, content: "[[#{Card[:anyone].name}]]"
35
33
  end
36
34
 
37
- puts "supporting legacy handling of +*email on User cards"
38
- oldname = [ :email, :right, :structure].map { |code| Card[code].name } * '+'
35
+ puts 'supporting legacy handling of +*email on User cards'
36
+ oldname = [:email, :right, :structure].map { |code| Card[code].name } * '+'
39
37
  newname = [:user, :email, :type_plus_right, :structure].map { |code| Card[code].name } * '+'
40
38
  Card[oldname].update_attributes! name: newname
41
39
 
42
-
43
- puts "importing all user details (for those not in trash) into +*account attributes"
40
+ puts 'importing all user details (for those not in trash) into +*account attributes'
44
41
  Card::Env[:no_password_encryptions] = true
45
42
  User.all.each do |user|
46
43
  base = Card[user.card_id]
47
- if base and !base.trash
48
- puts "~ importing details for #{base.name}"
49
- date_args = { created_at: user.created_at, updated_at: user.updated_at }
50
- [ :email, :salt, :password, :status ].each do |field|
51
- cardname = "#{base.name}+#{Card[:account].name}+#{Card[field].name}"
52
- user_field = ( field==:password ? :crypted_password : field )
53
- if (content = user.send( user_field ))
54
- begin
55
- Card.create! date_args.merge( name: cardname, content: content)
56
- rescue => e
57
- puts "error importing #{cardname}: #{e.message}"
58
- end
59
- end
44
+ next unless base && !base.trash
45
+ puts "~ importing details for #{base.name}"
46
+ date_args = { created_at: user.created_at, updated_at: user.updated_at }
47
+ [:email, :salt, :password, :status].each do |field|
48
+ cardname = "#{base.name}+#{Card[:account].name}+#{Card[field].name}"
49
+ user_field = (field == :password ? :crypted_password : field)
50
+ next unless (content = user.send(user_field))
51
+ begin
52
+ Card.create! date_args.merge(name: cardname, content: content)
53
+ rescue => e
54
+ puts "error importing #{cardname}: #{e.message}"
60
55
  end
61
56
  end
62
57
  end
63
-
64
58
  end
65
-
66
59
  end
67
60
 
68
-
69
- #FIXME
61
+ # FIXME
70
62
  # before 1.13!
71
63
  # but add read permission migration for *stats and
72
64
  # structure for *stats+*right
73
-
@@ -2,11 +2,10 @@
2
2
 
3
3
  class AccountRequestsToSignups < Card::CoreMigration
4
4
  def up
5
-
6
5
  newname = 'Sign up'
7
6
  newname = '*signup' if Card.exists? newname
8
7
 
9
- #get old codename and name out of the way
8
+ # get old codename and name out of the way
10
9
  old_signup = Card[:signup]
11
10
  old_signup.name = "#{newname} - old"
12
11
  old_signup.codename = nil
@@ -41,10 +40,5 @@ class AccountRequestsToSignups < Card::CoreMigration
41
40
  captcha_rule = Card.fetch rulename, new: {}
42
41
  captcha_rule.content = '0'
43
42
  captcha_rule.save!
44
-
45
-
46
43
  end
47
-
48
44
  end
49
-
50
-
@@ -1,15 +1,15 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  class Card
4
- def self.gimme! name, args = {}
4
+ def self.gimme! name, args={}
5
5
  Card::Auth.as_bot do
6
- c = Card.fetch( name, new: args )
6
+ c = Card.fetch(name, new: args)
7
7
  c.putty args
8
8
  Card.fetch name
9
9
  end
10
10
  end
11
11
 
12
- def putty args = {}
12
+ def putty args={}
13
13
  Card::Auth.as_bot do
14
14
  if args.present?
15
15
  update_attributes! args
@@ -23,24 +23,24 @@ end
23
23
  class AddScriptCards < Card::CoreMigration
24
24
  def up
25
25
  # JavaScript and CoffeeScript types
26
- card = Card.fetch "CoffeeScript", new: {}
27
- card.codename = "coffee_script"
26
+ card = Card.fetch 'CoffeeScript', new: {}
27
+ card.codename = 'coffee_script'
28
28
  card.type_id = Card::CardtypeID
29
29
  card.save!
30
30
 
31
- card = Card.fetch "JavaScript", new: {}
32
- card.codename = "java_script"
31
+ card = Card.fetch 'JavaScript', new: {}
32
+ card.codename = 'java_script'
33
33
  card.type_id = Card::CardtypeID
34
34
  card.save!
35
- #Card.create! name: 'JavaScript', codename: :java_script, type_id: Card::CardtypeID
36
- #Card.create! name: 'CoffeeScript', codename: :coffee_script, type_id: Card::CardtypeID
35
+ # Card.create! name: 'JavaScript', codename: :java_script, type_id: Card::CardtypeID
36
+ # Card.create! name: 'CoffeeScript', codename: :coffee_script, type_id: Card::CardtypeID
37
37
 
38
38
  # Permissions for JavaScript and CoffeeScript types
39
39
  # ( the same as for CSS and SCSS)
40
- ['JavaScript', 'CoffeeScript'].each do |type|
41
- [ :create, :update, :delete].each do |action|
42
- Card.gimme!( "#{type}+#{Card[:type].name}+#{Card[action].name}",
43
- content: "[[#{Card[:administrator].name}]]")
40
+ %w(JavaScript CoffeeScript).each do |type|
41
+ [:create, :update, :delete].each do |action|
42
+ Card.gimme!("#{type}+#{Card[:type].name}+#{Card[action].name}",
43
+ content: "[[#{Card[:administrator].name}]]")
44
44
  end
45
45
  end
46
46
 
@@ -51,23 +51,22 @@ class AddScriptCards < Card::CoreMigration
51
51
  Card.create! name: "#{script_set}+#{Card[:read].name}", content: "[[#{Card[:anyone].name}]]"
52
52
  Card.create! name: "#{script_set}+#{Card[:options].name}", content: %( {"type":["in", "JavaScript", "CoffeeScript"] }), type: Card::SearchTypeID
53
53
  Card.create! name: "#{script_set}+#{Card[:input].name}", content: 'list'
54
- Card.create! name: "#{script_set}+#{Card[:help].name}", content: %{ JavaScript (or CoffeeScript) for card's page. } #TODO help link?
55
-
54
+ Card.create! name: "#{script_set}+#{Card[:help].name}", content: %{ JavaScript (or CoffeeScript) for card's page. } # TODO: help link?
56
55
 
57
56
  # Machine inputs and outputs
58
- default_rule_ending = "#{ Card[:right].name }+#{ Card[ :default ].name }"
57
+ default_rule_ending = "#{Card[:right].name}+#{Card[:default].name}"
59
58
  Card.create! name: '*machine output', codename: :machine_output
60
59
  Card.create! name: "*machine output+#{default_rule_ending}", type_id: Card::FileID
61
- Card.create! name: "*machine output+#{ Card[:right].name}+#{Card[:read].name}", content: '_left'
60
+ Card.create! name: "*machine output+#{Card[:right].name}+#{Card[:read].name}", content: '_left'
62
61
  Card.create! name: '*machine input', codename: :machine_input
63
62
  Card.create! name: "*machine input+#{default_rule_ending}", type_id: Card::PointerID
64
63
 
65
64
  # create default script rule
66
- card_type = { 'js' => "java_script", 'coffee' => "coffee_script"}
67
- scripts = %w{ jquery tinymce slot card_menu jquery_helper html5shiv_printshiv }
68
- types = %w{ js js coffee js js js }
65
+ card_type = { 'js' => 'java_script', 'coffee' => 'coffee_script' }
66
+ scripts = %w( jquery tinymce slot card_menu jquery_helper html5shiv_printshiv )
67
+ types = %w( js js coffee js js js )
69
68
  # jquery.mobile (in jquery_helper) must be after card to avoid mobileinit nastiness
70
- cardnames = scripts.map { |name| "script: #{name.gsub( '_', ' ' )}" }
69
+ cardnames = scripts.map { |name| "script: #{name.tr('_', ' ')}" }
71
70
 
72
71
  scripts.each_with_index do |name, index|
73
72
  Card.create! name: cardnames[index], type: card_type[types[index]], codename: "script_#{name}"
@@ -75,8 +74,6 @@ class AddScriptCards < Card::CoreMigration
75
74
 
76
75
  cardnames.pop # html5shiv_printshiv not in default list, only used for IE9 (handled in head.rb)
77
76
  Card::Cache.reset_all
78
- Card.create! name: "#{Card[:all].name}+*script", content: cardnames.map { |name| "[[#{ name }]]" }.join("\n")
79
-
77
+ Card.create! name: "#{Card[:all].name}+*script", content: cardnames.map { |name| "[[#{name}]]" }.join("\n")
80
78
  end
81
79
  end
82
-
@@ -2,7 +2,6 @@
2
2
 
3
3
  class AddEmailCards < Card::CoreMigration
4
4
  def up
5
-
6
5
  # change notification rules
7
6
  %w( create update delete ).each do |action|
8
7
  Card.create! name: "*on #{action}", type_code: :setting, codename: "on_#{action}"
@@ -17,7 +16,7 @@ class AddEmailCards < Card::CoreMigration
17
16
  default_rule.type_id = Card::PointerID
18
17
  default_rule.save!
19
18
 
20
- Card.search( right: {codename: field.to_s} ).each do |field_card|
19
+ Card.search(right: { codename: field.to_s }).each do |field_card|
21
20
  field_card.update_attributes! type_id: Card::PointerID
22
21
  end
23
22
 
@@ -27,49 +26,45 @@ class AddEmailCards < Card::CoreMigration
27
26
  options_rule.save!
28
27
  end
29
28
 
30
-
31
29
  # create new cardtype for email templates
32
- Card.create! name: "Email template", codename: :email_template, type_id: Card::CardtypeID
33
- Card.create! name: "Email template+*type+*structure", content: %(
30
+ Card.create! name: 'Email template', codename: :email_template, type_id: Card::CardtypeID
31
+ Card.create! name: 'Email template+*type+*structure', content: %(
34
32
  {{+#{Card[:from].name} | labeled | link}}
35
- {{+#{Card[:to ].name} | labeled | link}}
36
- {{+#{Card[:cc ].name} | labeled | link}}
37
- {{+#{Card[:bcc ].name} | labeled | link}}
33
+ {{+#{Card[:to].name} | labeled | link}}
34
+ {{+#{Card[:cc].name} | labeled | link}}
35
+ {{+#{Card[:bcc].name} | labeled | link}}
38
36
  {{+*subject | titled}}
39
37
  {{+*html message | titled}}
40
38
  {{+*text message | titled}}
41
39
  {{+*attach | titled}}
42
40
  )
43
41
 
44
- c = Card.fetch '*message', new: { }
42
+ c = Card.fetch '*message', new: {}
45
43
  c.name = '*html message'
46
- c.codename = 'html_message'
44
+ c.codename = 'html_message'
47
45
  c.save!
48
46
 
49
47
  Card.create! name: '*text message', codename: 'text_message'
50
- Card.create! name: "*text message+*right+*default", type_code: :plain_text
51
-
48
+ Card.create! name: '*text message+*right+*default', type_code: :plain_text
52
49
 
53
50
  Card::Cache.reset_all
54
51
 
55
-
56
52
  # create system email cards
57
53
  dir = File.join data_path, 'mailer'
58
- json = File.read( File.join( dir, 'mail_config.json' ) )
54
+ json = File.read(File.join(dir, 'mail_config.json'))
59
55
  data = JSON.parse(json)
60
56
  data.each do |mail|
61
57
  mail = mail.symbolize_keys!
62
58
  Card.create! name: mail[:name], codename: mail[:codename], type_id: Card::EmailTemplateID
63
- Card.create! name: "#{mail[:name]}+*html message", content: File.read( File.join( dir, "#{mail[:codename]}.html" ))
64
- Card.create! name: "#{mail[:name]}+*text message", content: File.read( File.join( dir, "#{mail[:codename]}.txt" ))
59
+ Card.create! name: "#{mail[:name]}+*html message", content: File.read(File.join(dir, "#{mail[:codename]}.html"))
60
+ Card.create! name: "#{mail[:name]}+*text message", content: File.read(File.join(dir, "#{mail[:codename]}.txt"))
65
61
  Card.create! name: "#{mail[:name]}+*subject", content: mail[:subject]
66
62
  end
67
63
 
68
-
69
64
  # move old hard-coded signup alert email handling to new card-based on_create handling
70
65
  Card.create!(
71
- name: ( [:signup, :type, :on_create].map { |code| Card[code].name } * '+'),
72
- type_id: Card::PointerID, content: "[[signup alert email]]"
66
+ name: ([:signup, :type, :on_create].map { |code| Card[code].name } * '+'),
67
+ type_id: Card::PointerID, content: '[[signup alert email]]'
73
68
  )
74
69
  if request_card = Card[:request]
75
70
  [:to, :from].each do |field|
@@ -83,15 +78,15 @@ class AddEmailCards < Card::CoreMigration
83
78
 
84
79
  # update *from settings
85
80
 
86
- signup_alert_from = Card["signup alert email"].fetch(trait: :from, new: {})
81
+ signup_alert_from = Card['signup alert email'].fetch(trait: :from, new: {})
87
82
  if signup_alert_from.content.blank?
88
83
  signup_alert_from.content = '_user'
89
84
  signup_alert_from.save!
90
85
  end
91
86
 
92
87
  wagn_bot = Card[:wagn_bot].account.email.present? ? Card[:wagn_bot].name : nil
93
- token_emails_from = Card.global_setting( '*invite+*from' ) || wagn_bot || '_user'
94
- [ 'verification email', 'password reset email'].each do |token_email_template_name|
88
+ token_emails_from = Card.global_setting('*invite+*from') || wagn_bot || '_user'
89
+ ['verification email', 'password reset email'].each do |token_email_template_name|
95
90
  Card.create! name: "#{token_email_template_name}+#{Card[:from].name}", content: token_emails_from
96
91
  end
97
92