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,5 +1,4 @@
1
1
  format :email_html do
2
- view :missing do |args| '' end
3
- view :closed_missing do |args| '' end
2
+ view :missing do |_args| '' end
3
+ view :closed_missing do |_args| '' end
4
4
  end
5
-
@@ -1,5 +1,5 @@
1
1
 
2
- format :email_text do
3
- view :missing do |args| '' end
4
- view :closed_missing do |args| '' end
2
+ format :email_text do
3
+ view :missing do |_args| '' end
4
+ view :closed_missing do |_args| '' end
5
5
  end
@@ -1,27 +1,21 @@
1
1
  card_accessor :followers
2
2
 
3
- FOLLOWER_IDS_CACHE_KEY = 'FOLLOWER_IDS'
3
+ FOLLOWER_IDS_CACHE_KEY = 'FOLLOWER_IDS'.freeze
4
4
 
5
5
  # FIXME: this should be in type/set
6
- event :cache_expired_for_new_set,
7
- before: :store, on: :create,
6
+ event :cache_expired_for_new_set, :store,
7
+ on: :create,
8
8
  when: proc { |c| c.type_id == Card::SetID } do
9
9
  Card.follow_caches_expired
10
10
  end
11
11
 
12
- event :cache_expired_for_type_change, before: :store, on: :update,
13
- changed: :type_id do
12
+ event :cache_expired_for_type_change, :store,
13
+ on: :update, changed: [:type_id, :name] do
14
14
  # FIXME: expire (also?) after save
15
15
  Card.follow_caches_expired
16
16
  end
17
17
 
18
- event :cache_expired_for_name_change, before: :store, on: :update,
19
- changed: :name do
20
- Card.follow_caches_expired
21
- end
22
-
23
- event :cache_expired_for_new_preference,
24
- before: :extend,
18
+ event :cache_expired_for_new_preference, :integrate,
25
19
  when: proc { |c| c.follow_rule_card? } do
26
20
  Card.follow_caches_expired
27
21
  end
@@ -63,7 +57,7 @@ format :html do
63
57
  hash = follow_link_hash args
64
58
  text = args[:icon] ? glyphicon('flag') : ''
65
59
  span_attrs = 'follow-verb menu-item-label'
66
- text += %[<span class="#{span_attrs}">#{hash[:verb]}</span>].html_safe
60
+ text += %(<span class="#{span_attrs}">#{hash[:verb]}</span>).html_safe
67
61
  # follow_rule_card = Card.fetch(
68
62
  # card.default_follow_set_card.follow_rule_name(Auth.current.name),
69
63
  # new: {}
@@ -73,7 +67,7 @@ format :html do
73
67
  title: hash[:title],
74
68
  'data-path' => hash[:path],
75
69
  'data-toggle' => 'modal',
76
- 'data-target' => "#modal-#{card.cardname.safe_key}",
70
+ 'data-target' => "#modal-#{card.cardname.safe_key}"
77
71
  )
78
72
  opts[:class] = "follow-link #{opts[:class]}"
79
73
  link_to text, hash[:path], opts
@@ -162,8 +156,8 @@ end
162
156
  def followed_field? field_card
163
157
  (follow_field_rule = rule_card(:follow_fields)) ||
164
158
  follow_field_rule.item_names.find do |item|
165
- item.to_name.key == field_card.key || (item.to_name.key == Card[:includes].key && included_card_ids.include?(field_card.id) )
166
- end
159
+ item.to_name.key == field_card.key || (item.to_name.key == Card[:includes].key && included_card_ids.include?(field_card.id))
160
+ end
167
161
  end
168
162
 
169
163
  def follower_ids
@@ -171,9 +165,7 @@ def follower_ids
171
165
  result = direct_follower_ids
172
166
  left_card = left
173
167
  while left_card
174
- if left_card.followed_field? self
175
- result += left_card.direct_follower_ids
176
- end
168
+ result += left_card.direct_follower_ids if left_card.followed_field? self
177
169
  left_card = left_card.left
178
170
  end
179
171
  write_follower_ids_cache result
@@ -196,7 +188,7 @@ def direct_follower_ids _args={}
196
188
  set_names.each do |set_name|
197
189
  set_card = Card.fetch(set_name)
198
190
  set_card.all_user_ids_with_rule_for(:follow).each do |user_id|
199
- if (!result.include? user_id) && self.follow_rule_applies?(user_id)
191
+ if !result.include?(user_id) && follow_rule_applies?(user_id)
200
192
  result << user_id
201
193
  end
202
194
  end
@@ -211,8 +203,8 @@ def all_direct_follower_ids_with_reason
211
203
  set_names.each do |set_name|
212
204
  set_card = Card.fetch(set_name)
213
205
  set_card.all_user_ids_with_rule_for(:follow).each do |user_id|
214
- if (!visited.include?(user_id)) &&
215
- (follow_option = self.follow_rule_applies?(user_id))
206
+ if !visited.include?(user_id) &&
207
+ (follow_option = follow_rule_applies?(user_id))
216
208
  visited << user_id
217
209
  yield(user_id, set_card: set_card, option: follow_option)
218
210
  end
@@ -22,7 +22,7 @@ class FollowerStash
22
22
  { included_by: left_card.name },
23
23
  "follow cards included by #{left_card.name}"
24
24
  ).map(&:key)
25
- if !@visited.intersection(includee_set).empty?
25
+ unless @visited.intersection(includee_set).empty?
26
26
  add_affected_card left_card
27
27
  break
28
28
  end
@@ -72,21 +72,21 @@ def notable_change?
72
72
  Card::Auth.current_id != WagnBotID && followable?
73
73
  end
74
74
 
75
- event :notify_followers_after_save,
76
- after: :extend, on: :save, when: proc { |ca| ca.notable_change? } do
75
+ event :notify_followers_after_save, :integrate,
76
+ on: :save, when: proc { |ca| ca.notable_change? } do
77
77
  notify_followers
78
78
  end
79
79
 
80
80
  # in the delete case we have to calculate the follower_stash beforehand
81
81
  # but we can't pass the follower_stash through the ActiveJob queue.
82
- # We have to deal with the notifications in the extend phase instead of the
83
- # subsequent phase
84
- event :stash_followers, after: :approve, on: :delete do
82
+ # We have to deal with the notifications in the integrate phase instead of the
83
+ # integrate_with_delay phase
84
+ event :stash_followers, :store, on: :delete do
85
85
  act_card.follower_stash ||= FollowerStash.new
86
86
  act_card.follower_stash.add_affected_card self
87
87
  end
88
- event :notify_followers_after_delete,
89
- after: :extend, on: :delete, when: proc { |ca| ca.notable_change? } do
88
+ event :notify_followers_after_delete, :integrate,
89
+ on: :delete, when: proc { |ca| ca.notable_change? } do
90
90
  notify_followers
91
91
  end
92
92
 
@@ -130,7 +130,7 @@ format do
130
130
  get_act(args).relevant_actions_for(card).map do |action|
131
131
  if action.card_id != card.id
132
132
  action.card.format(format: @format)
133
- .render_subedit_notice(action: action)
133
+ .render_subedit_notice(action: action)
134
134
  end
135
135
  end.compact.join
136
136
 
@@ -146,8 +146,8 @@ format do
146
146
  name_before_action =
147
147
  (action.new_values[:name] && action.old_values[:name]) || card.name
148
148
 
149
- wrap_subedit_item %{#{name_before_action} #{action.action_type}d
150
- #{ render_list_of_changes(args) }}
149
+ wrap_subedit_item %(#{name_before_action} #{action.action_type}d
150
+ #{render_list_of_changes(args)})
151
151
  end
152
152
 
153
153
  view :followed, perms: :none, closed: true do |args|
@@ -1,14 +1,13 @@
1
1
  def send_action_mails args
2
2
  setting = "on_#{args[:on]}".to_sym
3
- email_templates_for( setting ) do |mailcard|
4
- mailcard.deliver( context: self )
3
+ email_templates_for(setting) do |mailcard|
4
+ mailcard.deliver(context: self)
5
5
  end
6
6
  end
7
7
 
8
8
  def email_templates_for setting
9
-
10
9
  if (email_templates = @email_template_cache ||
11
- ((event_card = self.rule_card(setting)) && event_card.extended_item_cards))
10
+ ((event_card = rule_card(setting)) && event_card.extended_item_cards))
12
11
  email_templates.each do |mailcard|
13
12
  yield(mailcard)
14
13
  end
@@ -16,12 +15,12 @@ def email_templates_for setting
16
15
  end
17
16
 
18
17
  [:create, :update, :delete].each do |action|
19
- event "observer_#{action}".to_sym, after: :extend, on: action do
20
- self.send_action_mails on: action
18
+ event "observer_#{action}".to_sym, :integrate, on: action do
19
+ send_action_mails on: action
21
20
  end
22
21
  end
23
22
 
24
- event :cache_delete_email_templates, after: :approve, on: :delete do
25
- event_card = self.rule_card(:on_delete)
23
+ event :cache_delete_email_templates, :store, on: :delete do
24
+ event_card = rule_card(:on_delete)
26
25
  @email_template_cache = event_card && event_card.extended_item_cards
27
26
  end
@@ -3,14 +3,12 @@ def process_email_addresses context_card, format_args, args
3
3
  format(format_args).render_email_addresses(args.merge(context: context_card))
4
4
  end
5
5
 
6
-
7
6
  format do
8
- def chunk_list #turn off autodetection of uri's
7
+ def chunk_list # turn off autodetection of uri's
9
8
  :references
10
9
  end
11
10
  end
12
11
 
13
-
14
12
  format :html do
15
13
  view :pointer_items do |args|
16
14
  card.item_names(context: :raw).map do |iname|
@@ -26,20 +24,17 @@ format :email_text do
26
24
  # note that context is processed twice here because pointers absolutize item_names by default
27
25
  # while other types can return relative names. That's poor default behavior and should be fixed!
28
26
  item_name = item_name.to_name.to_absolute(context).to_s
29
- if item_name.match(/.+\@.+\..+/)
27
+ if item_name =~ /.+\@.+\..+/
30
28
  item_name
31
- elsif item_card = Card.fetch( item_name )
29
+ elsif item_card = Card.fetch(item_name)
32
30
  if item_card.account
33
31
  item_card.account.email
34
32
  else
35
- item_card.contextual_content(context,format: :email_text).split( /[,\n]/ )
33
+ item_card.contextual_content(context, format: :email_text).split(/[,\n]/)
36
34
  end
37
35
  end
38
36
  end.flatten.compact.join(', ')
39
37
  end
40
38
  end
41
39
 
42
-
43
-
44
40
  # _user, info@mail.com, Ethan, Pointer -> ..., _left+email, my email address -> info@mail.com
45
-
@@ -8,11 +8,10 @@ def options_rule_card
8
8
  Card.new(
9
9
  name: 'follow_options_card',
10
10
  type_code: :pointer,
11
- content: option_cards.map {|oc| "[[#{oc.title}]]" }.join("\n")
11
+ content: option_cards.map { |oc| "[[#{oc.title}]]" }.join("\n")
12
12
  )
13
13
  end
14
14
 
15
-
16
15
  format :html do
17
16
  def default_follow_item_args args
18
17
  args[:condition] ||= Env.params[:condition] || '*always'
@@ -21,10 +20,10 @@ format :html do
21
20
  view :follow_item, tags: :unknown_ok do |args|
22
21
  if card.new_card? || !card.include_item?(args[:condition])
23
22
  button_view = :add_follow_rule_button
24
- form_opts = {add_item: args[:condition]}
23
+ form_opts = { add_item: args[:condition] }
25
24
  else
26
25
  button_view = :delete_follow_rule_button
27
- form_opts = {drop_item: args[:condition]}
26
+ form_opts = { drop_item: args[:condition] }
28
27
  end
29
28
 
30
29
  text = if (option_card = Card.fetch args[:condition])
@@ -42,10 +41,9 @@ format :html do
42
41
  { action: :update, name: card.name, success: { view: :follow_item } },
43
42
  hidden: { condition: args[:condition] }.merge(form_opts)
44
43
  ) do
45
-
46
44
  output [
47
45
  _optional_render(button_view, args),
48
- card_link( link_target, text: text)
46
+ card_link(link_target, text: text)
49
47
  ]
50
48
  end
51
49
  end
@@ -56,57 +54,46 @@ format :html do
56
54
  end
57
55
 
58
56
  view :follow_status do |args|
59
- %{
57
+ %(
60
58
  <h4>Get notified about changes</h4>
61
59
 
62
- #{
63
- wrap_with( :ul, class: 'delete-list list-group') do
60
+ #{wrap_with(:ul, class: 'delete-list list-group') do
64
61
  card.item_names.map do |option|
65
62
  content_tag :li, class: 'list-group-item' do
66
63
  condition = option == '*never' ? '*always' : option
67
64
  subformat(card).render_follow_item condition: condition
68
65
  end
69
66
  end.join "\n"
70
- end
71
- }
72
-
73
- #{
74
- card_link(args[:card_key], {
75
- text: 'more options',
76
- path_opts: {
77
- view: :related,
78
- related: {
79
- name: card.name,
80
- view: :related_edit_rule
81
- }
82
- },
83
- class: 'btn update-follow-link',
84
- 'data-card_key'=>args[:card_key]
85
- })
86
- }
87
- }
67
+ end}
68
+
69
+ #{card_link(args[:card_key], text: 'more options',
70
+ path_opts: {
71
+ view: :related,
72
+ related: {
73
+ name: card.name,
74
+ view: :related_edit_rule
75
+ }
76
+ },
77
+ class: 'btn update-follow-link',
78
+ 'data-card_key' => args[:card_key])}
79
+ )
88
80
  end
89
81
 
90
-
91
- view :delete_follow_rule_button do |args|
82
+ view :delete_follow_rule_button do |_args|
92
83
  button_tag(
93
84
  type: :submit,
94
- class: 'btn-xs btn-item-delete btn-primary', 'aria-label'=>'Left Align'
85
+ class: 'btn-xs btn-item-delete btn-primary', 'aria-label' => 'Left Align'
95
86
  ) do
96
-
97
- tag :span, class: "glyphicon glyphicon-ok", 'aria-hidden'=>"true"
87
+ tag :span, class: 'glyphicon glyphicon-ok', 'aria-hidden' => 'true'
98
88
  end
99
-
100
89
  end
101
90
 
102
- view :add_follow_rule_button do |args|
91
+ view :add_follow_rule_button do |_args|
103
92
  button_tag(
104
93
  type: :submit,
105
- class: 'btn-xs btn-item-add', 'aria-label'=>'Left Align'
94
+ class: 'btn-xs btn-item-add', 'aria-label' => 'Left Align'
106
95
  ) do
107
-
108
- tag :span, class: "glyphicon glyphicon-plus", 'aria-hidden'=>"true"
96
+ tag :span, class: 'glyphicon glyphicon-plus', 'aria-hidden' => 'true'
109
97
  end
110
98
  end
111
-
112
- end
99
+ end
@@ -1,3 +1,3 @@
1
- event :follow_fields_changed, before: :extend do
1
+ event :follow_fields_changed, :integrate do
2
2
  Card.follow_caches_expired
3
- end
3
+ end
@@ -21,7 +21,9 @@ def raw_content
21
21
  end
22
22
  end
23
23
 
24
- def virtual?; !real? end
24
+ def virtual?
25
+ !real?
26
+ end
25
27
 
26
28
  format do
27
29
  include Card::Set::Type::Pointer::Format
@@ -1,9 +1,9 @@
1
1
 
2
- def virtual?; !real? end
3
-
2
+ def virtual?
3
+ !real?
4
+ end
4
5
 
5
6
  format :html do
6
-
7
7
  view :core do |args|
8
8
  if card.left && Auth.signed_in?
9
9
  render_rule_editor args
@@ -14,35 +14,33 @@ format :html do
14
14
  end
15
15
  end
16
16
 
17
- view :status do |args|
17
+ view :status do |_args|
18
18
  if (rcard = current_follow_rule_card)
19
19
  rcard.item_cards.map do |item|
20
- %{<div class="alert alert-success" role="alert">
20
+ %(<div class="alert alert-success" role="alert">
21
21
  <strong>#{rcard.rule_set.follow_label}</strong>: #{item.title}
22
- </div>}
22
+ </div>)
23
23
  end.join
24
24
  else
25
25
  'No following preference'
26
26
  end
27
27
  end
28
28
 
29
- view :closed_content do |args|
29
+ view :closed_content do |_args|
30
30
  ''
31
31
  end
32
32
 
33
- =begin
34
- view :editor do |args|
35
- hidden_field( :content, class: 'card-content', 'no-autosave'=>true) +
36
- (args.delete(:select_list) ? raw(render_rule_editor(args)) : super(args) )
37
- end
38
- =end
33
+ # view :editor do |args|
34
+ # hidden_field( :content, class: 'card-content', 'no-autosave'=>true) +
35
+ # (args.delete(:select_list) ? raw(render_rule_editor(args)) : super(args) )
36
+ # end
39
37
 
40
- view :rule_editor do |args|
38
+ view :rule_editor do |_args|
41
39
  preference_name = [
42
40
  card.left.default_follow_set_card.name,
43
41
  Auth.current.name,
44
42
  Card[:follow].name
45
- ]*'+'
43
+ ].join('+')
46
44
  rule_context = Card.fetch preference_name, new: { type_id: PointerID }
47
45
 
48
46
  wrap_with :div, class: 'edit-rule' do
@@ -57,5 +55,4 @@ format :html do
57
55
  def current_follow_rule_card
58
56
  card.left.rule_card :follow, user: Auth.current
59
57
  end
60
-
61
58
  end
@@ -2,7 +2,7 @@ include Card::FollowOption
2
2
 
3
3
  follow_opts position: 2
4
4
 
5
- follow_test { |follower_id, accounted_ids| true }
5
+ follow_test { |_follower_id, _accounted_ids| true }
6
6
 
7
7
  def title
8
8
  'Following'
@@ -11,4 +11,3 @@ end
11
11
  def label
12
12
  'follow'
13
13
  end
14
-