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,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Right::Following do
4
- end
4
+ end
@@ -12,7 +12,7 @@ describe Card::Set::Self::FollowDefaults do
12
12
 
13
13
  it 'updates follow rules of users' do
14
14
  ca = Card.fetch 'A'
15
- expect(ca.follower_names).to include "Joe User"
15
+ expect(ca.follower_names).to include 'Joe User'
16
16
  end
17
17
  end
18
18
  end
@@ -17,25 +17,25 @@ module CarrierWave
17
17
  super
18
18
 
19
19
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
20
- event :store_#{column}_event, on: :save, after: :store do
20
+ event :store_#{column}_event, :finalize, on: :save do
21
21
  store_#{column}!
22
22
  end
23
23
 
24
24
  # remove files only if card has no history
25
- event :remove_#{column}_event,
26
- on: :delete, after: :stored, when: proc { |c| !c.history? } do
25
+ event :remove_#{column}_event, :finalize,
26
+ on: :delete, when: proc { |c| !c.history? } do
27
27
  remove_#{column}!
28
28
  end
29
- event :mark_remove_#{column}_false_event,
30
- on: :update, after: :stored do
29
+ event :mark_remove_#{column}_false_event, :finalize,
30
+ on: :update do
31
31
  mark_remove_#{column}_false
32
32
  end
33
- event :store_previous_model_for_#{column}_event,
34
- on: :update, before: :store, when: proc { |c| !c.history? } do
33
+ event :store_previous_model_for_#{column}_event, :store,
34
+ on: :update, when: proc { |c| !c.history? } do
35
35
  store_previous_model_for_#{column}
36
36
  end
37
- event :remove_previously_stored_#{column}_event,
38
- on: :update, after: :store, when: proc { |c| !c.history?} do
37
+ event :remove_previously_stored_#{column}_event, :store,
38
+ on: :update, when: proc { |c| !c.history?} do
39
39
  if @previous_model_for_#{column}
40
40
  @previous_model_for_#{column}.include_set_modules
41
41
  end
@@ -60,25 +60,22 @@ class FileUploader < CarrierWave::Uploader::Base
60
60
 
61
61
  # generate identifier that gets stored in the card's db_content field
62
62
  def db_content opts={}
63
- if opts[:mod] && !model.load_from_mod
64
- model.load_from_mod = opts[:mod]
65
- end
63
+ return '' unless file.present?
64
+ model.load_from_mod = opts[:mod] if opts[:mod] && !model.load_from_mod
66
65
  '%s/%s' % [file_dir, url_filename(opts)]
67
66
  end
68
67
 
69
68
  def url_filename opts={}
70
- if opts[:mod] && !model.load_from_mod
71
- model.load_from_mod = opts[:mod]
72
- end
69
+ model.load_from_mod = opts[:mod] if opts[:mod] && !model.load_from_mod
73
70
 
74
71
  basename = if (mod = mod_file?)
75
- "#{mod}#{extension}"
76
- else
77
- "#{action_id}#{extension}"
72
+ "#{mod}#{extension}"
73
+ else
74
+ "#{action_id}#{extension}"
78
75
  end
79
76
  end
80
77
 
81
- def url opts = {}
78
+ def url opts={}
82
79
  '%s/%s/%s' % [card_path(Card.config.files_web_path), file_dir,
83
80
  full_filename(url_filename(opts))]
84
81
  end
@@ -115,9 +112,7 @@ class FileUploader < CarrierWave::Uploader::Base
115
112
  end
116
113
 
117
114
  def tmp_path
118
- if !Dir.exists? model.tmp_upload_dir
119
- Dir.mkdir model.tmp_upload_dir
120
- end
115
+ Dir.mkdir model.tmp_upload_dir unless Dir.exist? model.tmp_upload_dir
121
116
  File.join model.tmp_upload_dir, filename
122
117
  end
123
118
 
@@ -3,28 +3,29 @@ require 'mini_magick'
3
3
  class ImageUploader < FileUploader
4
4
  include CarrierWave::MiniMagick
5
5
 
6
- def path(version=nil)
6
+ def path version=nil
7
7
  (version && version != :original) ? versions[version].path : super()
8
8
  end
9
9
 
10
10
  version :icon, if: :create_versions?, from_version: :small do
11
- process resize_and_pad: [16,16]
11
+ process resize_and_pad: [16, 16]
12
12
  end
13
13
  version :small, if: :create_versions?, from_version: :medium do
14
- process resize_to_fit: [75,75]
14
+ process resize_to_fit: [75, 75]
15
15
  end
16
16
  version :medium, if: :create_versions? do
17
- process resize_to_fit: [200,200]
17
+ process resize_to_fit: [200, 200]
18
18
  end
19
19
  version :large, if: :create_versions? do
20
- process resize_to_fit: [500,500]
20
+ process resize_to_fit: [500, 500]
21
21
  end
22
22
 
23
23
  def identifier
24
24
  full_filename(super())
25
25
  end
26
+
26
27
  # add 'original' if no version is given
27
- def full_filename(for_file)
28
+ def full_filename for_file
28
29
  name = super(for_file)
29
30
  if version_name
30
31
  name
@@ -33,6 +34,4 @@ class ImageUploader < FileUploader
33
34
  "#{parts.shift}-original.#{parts.join('.')}"
34
35
  end
35
36
  end
36
-
37
-
38
- end
37
+ end
@@ -8,8 +8,8 @@ event :select_file_revision, after: :select_action do
8
8
  attachment.retrieve_from_store!(attachment.identifier)
9
9
  end
10
10
 
11
- event :upload_attachment, before: :validate_name, on: :save,
12
- when: proc { |c| c.preliminary_upload? } do
11
+ event :upload_attachment, :prepare_to_validate,
12
+ on: :save, when: proc { |c| c.preliminary_upload? } do
13
13
  save_original_filename # save original filename as comment in action
14
14
  write_identifier # set db_content
15
15
  # (needs original filename to determine extension)
@@ -27,9 +27,8 @@ event :upload_attachment, before: :validate_name, on: :save,
27
27
  abort :success
28
28
  end
29
29
 
30
- event :assign_attachment_on_create,
31
- after: :prepare,
32
- on: :create,
30
+ event :assign_attachment_on_create, :initialize,
31
+ after: :assign_action, on: :create,
33
32
  when: proc { |c| c.save_preliminary_upload? } do
34
33
  if (action = Card::Action.fetch(@action_id_of_cached_upload))
35
34
  upload_cache_card.selected_action_id = action.id
@@ -38,15 +37,14 @@ event :assign_attachment_on_create,
38
37
  end
39
38
  end
40
39
 
41
- event :assign_attachment_on_update,
42
- after: :prepare,
43
- on: :update,
40
+ event :assign_attachment_on_update, :initialize,
41
+ after: :assign_action, on: :update,
44
42
  when: proc { |c| c.save_preliminary_upload? } do
45
43
  if (action = Card::Action.fetch(@action_id_of_cached_upload))
46
44
  uploaded_file =
47
- with_selected_action_id(action.id) do
48
- attachment.file
49
- end
45
+ with_selected_action_id(action.id) do
46
+ attachment.file
47
+ end
50
48
  assign_attachment uploaded_file, action.comment
51
49
  end
52
50
  end
@@ -59,7 +57,7 @@ end
59
57
 
60
58
  # we need a card id for the path so we have to update db_content when we have
61
59
  # an id
62
- event :correct_identifier, after: :store, on: :create do
60
+ event :correct_identifier, :finalize, on: :create do
63
61
  update_column(:db_content, attachment.db_content(mod: load_from_mod))
64
62
  expire
65
63
  end
@@ -71,16 +69,14 @@ def file_ready_to_save?
71
69
  attachment_changed?
72
70
  end
73
71
 
74
- event :save_original_filename, after: :validate_name,
75
- when: proc { |c| c.file_ready_to_save? } do
72
+ event :save_original_filename, :prepare_to_store,
73
+ when: proc { |c| c.file_ready_to_save? } do
76
74
  return unless @current_action
77
75
  @current_action.update_attributes! comment: original_filename
78
76
  end
79
77
 
80
- event :delete_cached_upload_file_on_create,
81
- after: :extend,
82
- on: :create,
83
- when: proc { |c| c.save_preliminary_upload? } do
78
+ event :delete_cached_upload_file_on_create, :integrate,
79
+ on: :create, when: proc { |c| c.save_preliminary_upload? } do
84
80
  if (action = Card::Action.fetch(@action_id_of_cached_upload))
85
81
  upload_cache_card.delete_files_for_action action
86
82
  action.delete
@@ -88,17 +84,15 @@ event :delete_cached_upload_file_on_create,
88
84
  clear_upload_cache_dir_for_new_cards
89
85
  end
90
86
 
91
- event :delete_cached_upload_file_on_update,
92
- after: :extend,
93
- on: :update,
94
- when: proc { |c| c.save_preliminary_upload? } do
87
+ event :delete_cached_upload_file_on_update, :integrate,
88
+ on: :update, when: proc { |c| c.save_preliminary_upload? } do
95
89
  if (action = Card::Action.fetch(@action_id_of_cached_upload))
96
90
  delete_files_for_action action
97
91
  action.delete
98
92
  end
99
93
  end
100
94
 
101
- event :validate_file_exist, before: :validate, on: :create do
95
+ event :validate_file_exist, :validate, on: :create do
102
96
  unless attachment.file.present? || empty_ok?
103
97
  errors.add attachment_name, 'is missing'
104
98
  end
@@ -142,17 +136,11 @@ def upload_cache_card
142
136
  end
143
137
 
144
138
  # action id of the cached upload
145
- def action_id_of_cached_upload= value
146
- @action_id_of_cached_upload = value
147
- end
139
+ attr_writer :action_id_of_cached_upload
148
140
 
149
- def action_id_of_cached_upload
150
- @action_id_of_cached_upload
151
- end
141
+ attr_reader :action_id_of_cached_upload
152
142
 
153
- def empty_ok= value
154
- @empty_ok = value
155
- end
143
+ attr_writer :empty_ok
156
144
 
157
145
  def empty_ok?
158
146
  @empty_ok
@@ -203,9 +191,7 @@ def mod_dir
203
191
  mod = @mod || mod_file?
204
192
  Card.paths['mod'].to_a.each do |mod_path|
205
193
  dir = File.join(mod_path, mod, 'file', codename)
206
- if Dir.exist? dir
207
- return dir
208
- end
194
+ return dir if Dir.exist? dir
209
195
  end
210
196
  end
211
197
 
@@ -215,7 +201,7 @@ def mod_file?
215
201
  # when db_content was changed assume that it's no longer a mod file
216
202
  elsif !db_content_changed? && content.present?
217
203
  case content
218
- when %r{^:[^/]+/([^.]+)} then $1 # current mod_file format
204
+ when %r{^:[^/]+/([^.]+)} then Regexp.last_match(1) # current mod_file format
219
205
  when /^\~/ then false # current id file format
220
206
  else
221
207
  if (lines = content.split("\n")) && (lines.size == 4)
@@ -236,16 +222,13 @@ end
236
222
 
237
223
  def clear_upload_cache_dir_for_new_cards
238
224
  Dir.entries(tmp_upload_dir).each do |filename|
239
- if filename =~/^\d+/
240
- path = File.join(tmp_upload_dir, filename )
241
- if Card.older_than_five_days? File.ctime(path)
242
- FileUtils.rm path
243
- end
225
+ if filename =~ /^\d+/
226
+ path = File.join(tmp_upload_dir, filename)
227
+ FileUtils.rm path if Card.older_than_five_days? File.ctime(path)
244
228
  end
245
229
  end
246
230
  end
247
231
 
248
-
249
232
  def delete_files_for_action action
250
233
  with_selected_action_id(action.id) do
251
234
  FileUtils.rm attachment.file.path
@@ -278,7 +261,7 @@ end
278
261
 
279
262
  def attachment_format ext
280
263
  if ext.present? && attachment && (original_ext = attachment.extension)
281
- if['file', original_ext].member? ext
264
+ if ['file', original_ext].member? ext
282
265
  original_ext
283
266
  elsif (exts = MIME::Types[attachment.content_type])
284
267
  if exts.find { |mt| mt.extensions.member? ext }
@@ -51,7 +51,7 @@ def fetch_roles
51
51
  Auth.as_bot do
52
52
  role_trait = fetch trait: :roles
53
53
  next [Card::AnyoneSignedInID] unless role_trait
54
- [Card::AnyoneSignedInID] + (role_trait.item_ids)
54
+ [Card::AnyoneSignedInID] + role_trait.item_ids
55
55
  end
56
56
  end
57
57
 
@@ -59,7 +59,7 @@ event :generate_token do
59
59
  Digest::SHA1.hexdigest "--#{Time.zone.now.to_f}--#{rand 10}--"
60
60
  end
61
61
 
62
- event :set_stamper, before: :approve do
62
+ event :set_stamper, :prepare_to_validate do
63
63
  self.updater_id = Auth.current_id
64
64
  self.creator_id = updater_id if new_card?
65
65
  end
@@ -1,4 +1,5 @@
1
- event :add_comment, after: :approve, on: :save, when: proc { |c| c.comment } do
1
+ event :add_comment, :prepare_to_store,
2
+ on: :save, when: proc { |c| c.comment } do
2
3
  cleaned_comment =
3
4
  comment.split(/\n/).map do |line|
4
5
  "<p>#{line.strip.empty? ? '&nbsp;' : line}</p>"
@@ -12,18 +13,18 @@ event :add_comment, after: :approve, on: :save, when: proc { |c| c.comment } do
12
13
  "#{comment_author} (Not signed in)"
13
14
  end
14
15
 
15
- self.content = %{
16
+ self.content = %(
16
17
  #{content}
17
18
  #{'<hr>' unless content.blank?}
18
19
  #{cleaned_comment}
19
20
  <div class="w-comment-author">--#{signature}.....#{Time.zone.now}</div>
20
- }
21
+ )
21
22
  end
22
23
 
23
24
  format do
24
25
  view :comment_box,
25
26
  denial: :blank, tags: :unknown_ok,
26
- perms: lambda { |r| r.card.ok? :comment } do |_args|
27
+ perms: ->(r) { r.card.ok? :comment } do |_args|
27
28
  <<-HTML
28
29
  <div class="comment-box nodblclick">#{comment_form}</div>
29
30
  HTML
@@ -31,28 +32,25 @@ format do
31
32
 
32
33
  def comment_form
33
34
  card_form :update do
34
- %{
35
- #{hidden_field_tag('card[name]', card.name) if card.new_card?
36
- # FIXME: wish we had more generalized solution for names.
35
+ %(
36
+ #{hidden_field_tag('card[name]', card.name) if card.new_card? # FIXME: wish we had more generalized solution for names.
37
37
  # without this, nonexistent cards will often take left's linkname.
38
38
  # (needs test)
39
39
  }
40
40
  #{text_area :comment, rows: 3}
41
41
  #{comment_buttons}
42
- }
42
+ )
43
43
  end
44
44
  end
45
45
 
46
46
  def comment_buttons
47
47
  <<-HTML
48
48
  <div class="comment-buttons">
49
- #{
50
- unless Auth.signed_in?
49
+ #{unless Auth.signed_in?
51
50
  card.comment_author = session[:comment_author] ||
52
51
  params[:comment_author] || 'Anonymous' # ENGLISH
53
- %{<label>My Name is:</label> #{text_field :comment_author}}
54
- end
55
- }
52
+ %(<label>My Name is:</label> #{text_field :comment_author})
53
+ end}
56
54
  #{submit_button text: 'Comment', type: :submit,
57
55
  disable_with: 'Commenting'}
58
56
  </div>
@@ -19,15 +19,15 @@ format do
19
19
 
20
20
  view :not_found, perms: :none, error_code: 404 do |_args|
21
21
  error_name = card.name.present? ? card.name : 'the card requested'
22
- %{ Could not find #{error_name}. }
22
+ %( Could not find #{error_name}. )
23
23
  end
24
24
 
25
25
  view :server_error, perms: :none, error_code: 500 do
26
- %{
26
+ %(
27
27
  Wagn Hitch! Server Error. Yuck, sorry about that.
28
28
  To tell us more and follow the fix,
29
29
  add a support ticket at http://wagn.org/new/Support_Ticket
30
- }
30
+ )
31
31
  end
32
32
 
33
33
  view :denial, perms: :none, error_code: 403 do
@@ -35,15 +35,15 @@ format do
35
35
  end
36
36
 
37
37
  view :bad_address, perms: :none, error_code: 404 do
38
- %{ 404: Bad Address }
38
+ %( 404: Bad Address )
39
39
  end
40
40
 
41
41
  view :too_deep, perms: :none, closed: true do
42
- %{ Man, you're too deep. (Too many levels of inclusions at a time) }
42
+ %{ Man, you're too deep. (Too many levels of nests at a time) }
43
43
  end
44
44
 
45
45
  view :too_slow, perms: :none, closed: true do
46
- %{ Timed out! #{showname} took too long to load. }
46
+ %( Timed out! #{showname} took too long to load. )
47
47
  end
48
48
  end
49
49
 
@@ -86,12 +86,12 @@ format :html do
86
86
  end
87
87
 
88
88
  view :unsupported_view, perms: :none, tags: :unknown_ok do |args|
89
- %{
89
+ %(
90
90
  <strong>
91
91
  view <em>#{args[:unsupported_view]}</em>
92
92
  not supported for <em>#{error_cardname}</em>
93
93
  </strong>
94
- }
94
+ )
95
95
  end
96
96
 
97
97
  view :message, perms: :none, tags: :unknown_ok do |args|
@@ -115,7 +115,7 @@ format :html do
115
115
  end
116
116
 
117
117
  view :closed_missing, perms: :none do
118
- %{<span class="faint"> #{showname} </span>}
118
+ %(<span class="faint"> #{showname} </span>)
119
119
  end
120
120
 
121
121
  view :conflict, error_code: 409 do |args|
@@ -125,13 +125,13 @@ format :html do
125
125
  end
126
126
  wrap args.merge(slot_class: 'error-view') do # ENGLISH below
127
127
  alert 'warning' do
128
- %{
128
+ %(
129
129
  <strong>Conflict!</strong>
130
130
  <span class="new-current-revision-id">#{card.last_action_id}</span>
131
131
  <div>#{actor_link} has also been making changes.</div>
132
132
  <div>Please examine below, resolve above, and re-submit.</div>
133
133
  #{expanded_act}
134
- }
134
+ )
135
135
  end
136
136
  end
137
137
  end
@@ -157,14 +157,14 @@ format :html do
157
157
 
158
158
  view :not_found do |args| # ug. bad name.
159
159
  sign_in_or_up_links =
160
- if !Auth.signed_in?
160
+ unless Auth.signed_in?
161
161
  signin_link = card_link :signin, text: 'Sign in'
162
162
  signup_link = link_to 'Sign up', card_path('new/:signup')
163
- %{<div>#{signin_link} or #{signup_link} to create it.</div>}
163
+ %(<div>#{signin_link} or #{signup_link} to create it.</div>)
164
164
  end
165
165
  frame args.merge(title: 'Not Found', optional_menu: :never) do
166
166
  card_label = card.name.present? ? "<em>#{card.name}</em>" : 'that'
167
- %{<h2>Could not find #{card_label}.</h2> #{sign_in_or_up_links}}
167
+ %(<h2>Could not find #{card_label}.</h2> #{sign_in_or_up_links})
168
168
  end
169
169
  end
170
170
 
@@ -172,11 +172,11 @@ format :html do
172
172
  task = args[:denied_task]
173
173
  to_task = task ? "to #{task} this." : 'to do that.'
174
174
  if !focal?
175
- %{
175
+ %(
176
176
  <span class="denied">
177
177
  <!-- Sorry, you don't have permission #{to_task} -->
178
178
  </span>
179
- }
179
+ )
180
180
  else
181
181
  frame args do # ENGLISH below
182
182
  message =
@@ -195,10 +195,10 @@ format :html do
195
195
  "Please #{signin_link} #{or_signup_link} #{to_task}"
196
196
  end
197
197
 
198
- %{
198
+ %(
199
199
  <h1>Sorry!</h1>
200
200
  <div>#{message}</div>
201
- }
201
+ )
202
202
  end
203
203
  end
204
204
  end