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
@@ -7,10 +7,21 @@ card_accessor :salt
7
7
  card_accessor :status
8
8
  card_accessor :token
9
9
 
10
- def active?; status == 'active' end
11
- def blocked?; status == 'blocked' end
12
- def built_in?; status == 'system' end
13
- def pending?; status == 'pending' end
10
+ def active?
11
+ status == 'active'
12
+ end
13
+
14
+ def blocked?
15
+ status == 'blocked'
16
+ end
17
+
18
+ def built_in?
19
+ status == 'system'
20
+ end
21
+
22
+ def pending?
23
+ status == 'pending'
24
+ end
14
25
 
15
26
  def validate_token! test_token
16
27
  tcard = token_card
@@ -60,23 +71,24 @@ format :html do
60
71
  end
61
72
  end
62
73
 
63
- event :validate_accountability, on: :create, before: :approve do
74
+ event :validate_accountability, :prepare_to_validate, on: :create do
64
75
  unless left && left.accountable?
65
76
  errors.add :content, 'not allowed on this card'
66
77
  end
67
78
  end
68
79
 
69
- event :require_email, on: :create, after: :approve do
80
+ event :require_email, :prepare_to_validate,
81
+ after: :validate_accountability, on: :create do
70
82
  errors.add :email, 'required' unless subfield(:email)
71
83
  end
72
84
 
73
- event :set_default_salt, on: :create, before: :approve_subcards do
85
+ event :set_default_salt, :prepare_to_validate, on: :create do
74
86
  salt = Digest::SHA1.hexdigest "--#{Time.zone.now}--"
75
87
  Env[:salt] = salt # HACK!!! need viable mechanism to get this to password
76
88
  add_subfield :salt, content: salt
77
89
  end
78
90
 
79
- event :set_default_status, on: :create, before: :approve_subcards do
91
+ event :set_default_status, :prepare_to_validate, on: :create do
80
92
  default_status = Auth.needs_setup? ? 'active' : 'pending'
81
93
  add_subfield :status, content: default_status
82
94
  end
@@ -85,14 +97,14 @@ def confirm_ok?
85
97
  Card.new(type_id: Card.default_accounted_type_id).ok? :create
86
98
  end
87
99
 
88
- event :generate_confirmation_token,
89
- on: :create, before: :process_subcards,
100
+ event :generate_confirmation_token, :prepare_to_store,
101
+ on: :create,
90
102
  when: proc { |c| c.confirm_ok? } do
91
103
  add_subfield :token, content: generate_token
92
104
  end
93
105
 
94
- event :reset_password, on: :update, before: :approve, when:
95
- proc { |c| c.reset_password? } do
106
+ event :reset_password,
107
+ :prepare_to_validate, on: :update, when: proc { |c| c.reset_password? } do
96
108
  if validate_token! @env_token
97
109
  token_card.used!
98
110
  Auth.signin left_id
@@ -133,8 +145,8 @@ event :send_welcome_email do
133
145
  end
134
146
  end
135
147
 
136
- event :send_account_verification_email, on: :create, after: :extend, when:
137
- proc { |c| c.token.present? } do
148
+ event :send_account_verification_email, :integrate,
149
+ on: :create, when: proc { |c| c.token.present? } do
138
150
  Card[:verification_email].deliver context: self, to: email
139
151
  end
140
152
 
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  view :core, :raw
14
14
 
15
- event :validate_email, after: :approve, on: :save do
15
+ event :validate_email, :validate, on: :save do
16
16
  if content.present? && content !~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
17
17
  errors.add :content, 'must be valid address'
18
18
  end
@@ -31,7 +31,7 @@ event :validate_unique_email, after: :validate_email, on: :save do
31
31
  end
32
32
  end
33
33
 
34
- event :downcase_email, before: :approve, on: :save do
34
+ event :downcase_email, :prepare_to_validate, on: :save do
35
35
  return if !content || content == content.downcase
36
36
  self.content = content.downcase
37
37
  end
@@ -17,9 +17,9 @@ view :raw do
17
17
  '<em>encrypted</em>'
18
18
  end
19
19
 
20
- event :encrypt_password, on: :save, after: :process_subcards,
21
- changed: :content,
22
- when: proc { !Card::Env[:no_password_encryptions] } do
20
+ event :encrypt_password, :store,
21
+ on: :save, changed: :content,
22
+ when: proc { !Card::Env[:no_password_encryptions] } do
23
23
  # no_password_encryptions = hack for import - fix with api for ignoring events
24
24
  salt = left && left.salt
25
25
  # HACK: fix with better ORM handling
@@ -31,13 +31,14 @@ event :encrypt_password, on: :save, after: :process_subcards,
31
31
  # not sure when that broke??
32
32
  end
33
33
 
34
- event :validate_password, on: :save, before: :approve do
34
+ event :validate_password, :validate,
35
+ on: :save do
35
36
  unless content.length > 3
36
37
  errors.add :password, 'must be at least 4 characters'
37
38
  end
38
39
  end
39
40
 
40
- event :validate_password_present, on: :update, before: :approve do
41
+ event :validate_password_present, :prepare_to_validate, on: :update do
41
42
  abort :success if content.blank?
42
43
  end
43
44
 
@@ -1,5 +1,5 @@
1
1
  include All::Permissions::Accounts
2
2
 
3
- view :raw do |args|
4
- "Private data"
3
+ view :raw do |_args|
4
+ 'Private data'
5
5
  end
@@ -1,35 +1,32 @@
1
1
 
2
2
  view :core do |args|
3
3
  if subject = card.left
4
-
4
+
5
5
  frame args do
6
6
  cache_card = Card.fetch(subject.key)
7
7
  db_card = Card.find_by_key(subject.key)
8
-
8
+
9
9
  table = if cache_card && db_card
10
- %{<table class="show-cache">
11
- <tr><th>Field</th><th>Cache Val</th><th>Database Val</th></tr>
12
- #{
13
- [ :name, :updated_at, :updater_id, :content ].map do |field|
14
- %{<tr>#{ [ field, cache_card.send(field), db_card.send(field) ].map() { |cell| "<td>#{cell}</td>"}.join }</tr>}
15
- end.join
16
- }
17
- </table>
18
- }
10
+ %(<table class="show-cache">
11
+ <tr><th>Field</th><th>Cache Val</th><th>Database Val</th></tr>
12
+ #{[:name, :updated_at, :updater_id, :content].map do |field|
13
+ %(<tr>#{[field, cache_card.send(field), db_card.send(field)].map { |cell| "<td>#{cell}</td>" }.join}</tr>)
14
+ end.join}
15
+ </table>
16
+ )
19
17
  end
20
-
21
- %{
18
+
19
+ %(
22
20
  <h1>Cache/DB Comparison</h1>
23
- #{ table }
24
-
21
+ #{table}
22
+
25
23
  <h1>Cached Card Inspect</h1>
26
- #{ h cache_card.inspect }
24
+ #{h cache_card.inspect}
27
25
 
28
26
  <h1>Database Card Inspect</h1>
29
- #{ h db_card.inspect }
30
- }
27
+ #{h db_card.inspect}
28
+ )
31
29
  end
32
-
30
+
33
31
  end
34
32
  end
35
-
@@ -1,6 +1,6 @@
1
1
  include All::Permissions::Accounts
2
2
 
3
- DURATIONS = 'second|minute|hour|day|week|month|year'
3
+ DURATIONS = 'second|minute|hour|day|week|month|year'.freeze
4
4
 
5
5
  card_accessor :expiration
6
6
 
@@ -1,4 +1,4 @@
1
- view :raw do |args|
1
+ view :raw do |_args|
2
2
  card.left.new_card? ? '' : card.left.created_at.strftime('%A, %B %d, %Y %I:%M %p %Z')
3
3
  end
4
4
 
@@ -1,4 +1,4 @@
1
- view :raw do |args|
1
+ view :raw do |_args|
2
2
  card.left.new_card? ? '' : card.left.updated_at.strftime('%A, %B %d, %Y %I:%M %p %Z')
3
3
  end
4
4
 
@@ -1,5 +1,5 @@
1
- event :save_recently_edited_settings,
2
- before: :extend, on: :save, when: proc { |c| c.is_rule? } do
1
+ event :save_recently_edited_settings, :integrate,
2
+ on: :save, when: proc { |c| c.is_rule? } do
3
3
  if (recent = Card[:recent_settings])
4
4
  recent.insert_item 0, cardname.right
5
5
  recent.save
@@ -88,7 +88,7 @@ def set_options
88
88
  # have the option to create rules based on arbitrary narrower sets, though
89
89
  # narrower sets will always apply to whatever prototype we create
90
90
 
91
- return res, fallback_set
91
+ [res, fallback_set]
92
92
  end
93
93
 
94
94
  def set_prototype
@@ -2,7 +2,7 @@ format :html do
2
2
  view :closed_rule, tags: :unknown_ok do
3
3
  # these are helpful for handling non-rule rstar cards until we have real
4
4
  # rule sets
5
- return 'not a rule' if !card.is_rule?
5
+ return 'not a rule' unless card.is_rule?
6
6
 
7
7
  rule_card = find_current_rule_card
8
8
  rule_content =
@@ -22,24 +22,24 @@ format :html do
22
22
  )
23
23
  ],
24
24
  ['rule-content',
25
- %{<div class="rule-content-container">
25
+ %(<div class="rule-content-container">
26
26
  <span class="closed-content content">#{rule_content}</span>
27
- </div> }],
28
- ['rule-set', (rule_card ? rule_card.trunk.label : '')],
27
+ </div> )],
28
+ ['rule-set', (rule_card ? rule_card.trunk.label : '')]
29
29
  ]
30
30
  extra_css_class =
31
31
  rule_card && !rule_card.new_card? ? 'known-rule' : 'missing-rule'
32
32
 
33
33
  row =
34
34
  cells.map do |css_class, content|
35
- %{<td class="rule-cell #{css_class} #{extra_css_class}">#{content}</td>}
35
+ %(<td class="rule-cell #{css_class} #{extra_css_class}">#{content}</td>)
36
36
  end.join("\n")
37
37
 
38
- %{<tr class="card-slot closed-rule"> #{row} </tr>}
38
+ %(<tr class="card-slot closed-rule"> #{row} </tr>)
39
39
  end
40
40
 
41
41
  view :open_rule, tags: :unknown_ok do |args|
42
- return 'not a rule' if !card.is_rule?
42
+ return 'not a rule' unless card.is_rule?
43
43
  current_rule = args[:current_rule]
44
44
  setting_name = args[:setting_name]
45
45
 
@@ -59,7 +59,7 @@ format :html do
59
59
 
60
60
  opts = {
61
61
  rule_context: card, # determines the set options and the success view
62
- set_context: card.rule_set_name,
62
+ set_context: card.rule_set_name
63
63
  }
64
64
  rule_view = edit_mode ? :edit_rule : :show_rule
65
65
 
@@ -67,20 +67,20 @@ format :html do
67
67
  <tr class="card-slot open-rule #{rule_view.to_s.sub '_', '-'}">
68
68
  <td class="rule-cell" colspan="3">
69
69
  <div class="rule-setting">
70
- #{ view_link setting_name.sub(/^\*/, ''), :closed_rule,
71
- class: 'close-rule-link slotter' }
72
- #{ card_link setting_name,
73
- text: "all #{setting_name} rules",
74
- class: 'setting-link',
75
- target: 'wagn_setting' }
70
+ #{view_link setting_name.sub(/^\*/, ''), :closed_rule,
71
+ class: 'close-rule-link slotter'}
72
+ #{card_link setting_name,
73
+ text: "all #{setting_name} rules",
74
+ class: 'setting-link',
75
+ target: 'wagn_setting'}
76
76
  </div>
77
77
 
78
78
  <div class="alert alert-info rule-instruction">
79
- #{ process_content "{{#{setting_name}+*right+*help|content}}" }
79
+ #{process_content "{{#{setting_name}+*right+*help|content}}"}
80
80
  </div>
81
81
 
82
82
  <div class="card-body">
83
- #{ subformat(current_rule)._render rule_view, opts }
83
+ #{subformat(current_rule)._render rule_view, opts}
84
84
  </div>
85
85
  </td>
86
86
  </tr>
@@ -96,24 +96,24 @@ format :html do
96
96
  end
97
97
 
98
98
  view :show_rule, tags: :unknown_ok do |args|
99
- return 'not a rule' if !card.is_rule?
99
+ return 'not a rule' unless card.is_rule?
100
100
 
101
101
  if !card.new_card?
102
102
  set = card.rule_set
103
103
  args[:item] ||= :link
104
- %{
104
+ %(
105
105
  <div class="rule-set">
106
- <label>Applies to</label> #{ card_link set.cardname, text: set.label }:
106
+ <label>Applies to</label> #{card_link set.cardname, text: set.label}:
107
107
  </div>
108
- #{ _render_core args }
109
- }
108
+ #{_render_core args}
109
+ )
110
110
  else
111
111
  'No Current Rule'
112
112
  end
113
113
  end
114
114
 
115
115
  view :edit_rule, tags: :unknown_ok do |args|
116
- return 'not a rule' if !card.is_rule?
116
+ return 'not a rule' unless card.is_rule?
117
117
  form_args = {
118
118
  url: path(action: :update, no_id: true),
119
119
  html: { class: 'card-form card-rule-form' }
@@ -125,11 +125,11 @@ format :html do
125
125
 
126
126
  form_for card, form_args do |form|
127
127
  @form = form
128
- %{
129
- #{ hidden_success_formgroup args[:success]}
130
- #{ editor args }
131
- #{ edit_buttons args }
132
- }
128
+ %(
129
+ #{hidden_success_formgroup args[:success]}
130
+ #{editor args}
131
+ #{edit_buttons args}
132
+ )
133
133
  end
134
134
  end
135
135
 
@@ -194,10 +194,10 @@ format :html do
194
194
  b_args[:href] = path action: :delete, success: args[:success]
195
195
  if (fset = args[:fallback_set]) && (fcard = Card.fetch(fset))
196
196
  b_args['data-confirm'] =
197
- "Deleting will revert to #{ card.rule_setting_name } rule for " \
198
- "#{ fcard.label }"
197
+ "Deleting will revert to #{card.rule_setting_name} rule for " \
198
+ "#{fcard.label}"
199
199
  end
200
- %{<span class="rule-delete-section">#{ button_tag 'Delete', b_args }</span>}
200
+ %(<span class="rule-delete-section">#{button_tag 'Delete', b_args}</span>)
201
201
  end
202
202
 
203
203
  # used keys for args:
@@ -225,11 +225,11 @@ format :html do
225
225
  end
226
226
 
227
227
  def hidden_success_formgroup args
228
- %{
229
- #{ hidden_field_tag 'success[id]', args[:id] || args[:card].name }
230
- #{ hidden_field_tag 'success[view]', args[:view] }
231
- #{ hidden_field_tag 'success[item]', args[:item] }
232
- }
228
+ %(
229
+ #{hidden_field_tag 'success[id]', args[:id] || args[:card].name}
230
+ #{hidden_field_tag 'success[view]', args[:view]}
231
+ #{hidden_field_tag 'success[item]', args[:item]}
232
+ )
233
233
  end
234
234
 
235
235
  def set_selection args
@@ -299,9 +299,9 @@ format :html do
299
299
  text: "(#{state})"
300
300
  end
301
301
  label = <<-HTML
302
- <label class="set-label #{ 'current-set-label' if state == :current }">
303
- #{ card_link set_name, text: label, target: 'wagn_set' }
304
- #{"<em> #{info} </em>" if info }
302
+ <label class="set-label #{'current-set-label' if state == :current}">
303
+ #{card_link set_name, text: label, target: 'wagn_set'}
304
+ #{"<em> #{info} </em>" if info}
305
305
  </label>
306
306
  HTML
307
307
  label.html_safe
@@ -319,7 +319,7 @@ format :html do
319
319
  wrap_each_with(:li, class: 'radio') do
320
320
  yield
321
321
  end
322
- formgroup title, "<ul>#{ list }</ul>", editor: 'set', class: 'col-xs-6'
322
+ formgroup title, "<ul>#{list}</ul>", editor: 'set', class: 'col-xs-6'
323
323
  end
324
324
 
325
325
  def edit_buttons args
@@ -1,40 +1,39 @@
1
1
 
2
2
  format :html do
3
-
4
3
  def item_links args
5
4
  [
6
- optional_render( :my_card, args),
7
- optional_render( :invite, args),
8
- optional_render( :sign_out, args),
9
- optional_render( :sign_up, args),
10
- optional_render( :sign_in, args)
5
+ optional_render(:my_card, args),
6
+ optional_render(:invite, args),
7
+ optional_render(:sign_out, args),
8
+ optional_render(:sign_up, args),
9
+ optional_render(:sign_in, args)
11
10
  ]
12
11
  end
13
12
 
14
- #ENGLISH below
15
- view :sign_up, perms: lambda { |r| !Auth.signed_in? && Card.new(type_id: Card::SignupID).ok?(:create) },
16
- denial: :blank do |args|
17
- link_to( 'Sign up', card_path('account/signup'), id: 'signup-link' )
13
+ # ENGLISH below
14
+ view :sign_up, perms: ->(_r) { !Auth.signed_in? && Card.new(type_id: Card::SignupID).ok?(:create) },
15
+ denial: :blank do |_args|
16
+ link_to('Sign up', card_path('account/signup'), id: 'signup-link')
18
17
  end
19
18
 
20
- view :sign_in, perms: lambda { |r| !Auth.signed_in? },
21
- denial: :blank do |args|
22
- link_to( 'Sign in', card_path(':signin'), id: 'signin-link' )
19
+ view :sign_in, perms: ->(_r) { !Auth.signed_in? },
20
+ denial: :blank do |_args|
21
+ link_to('Sign in', card_path(':signin'), id: 'signin-link')
23
22
  end
24
23
 
25
- view :invite, perms: lambda { |r| Auth.signed_in? && Card.new(type_id: Card.default_accounted_type_id).ok?(:create) },
26
- denial: :blank do |args|
27
- link_to( 'Invite', card_path('account/signup'), id: 'invite-a-friend-link' )
24
+ view :invite, perms: ->(_r) { Auth.signed_in? && Card.new(type_id: Card.default_accounted_type_id).ok?(:create) },
25
+ denial: :blank do |_args|
26
+ link_to('Invite', card_path('account/signup'), id: 'invite-a-friend-link')
28
27
  end
29
28
 
30
- view :sign_out, perms: lambda { |r| Auth.signed_in? },
31
- denial: :blank do |args|
32
- link_to( 'Sign out', card_path('delete/:signin'), id: 'signout-link' )
29
+ view :sign_out, perms: ->(_r) { Auth.signed_in? },
30
+ denial: :blank do |_args|
31
+ link_to('Sign out', card_path('delete/:signin'), id: 'signout-link')
33
32
  end
34
33
 
35
- view :my_card, perms: lambda { |r| Auth.signed_in? },
36
- denial: :blank do |args|
37
- card_link( Auth.current.cardname, id: 'my-card-link' )
34
+ view :my_card, perms: ->(_r) { Auth.signed_in? },
35
+ denial: :blank do |_args|
36
+ card_link(Auth.current.cardname, id: 'my-card-link')
38
37
  end
39
38
 
40
39
  view :raw do |args|