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,9 +1,8 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require_dependency 'card/version'
3
3
 
4
- view :raw do |args|
4
+ view :raw do |_args|
5
5
  Card::Version.release
6
6
  end
7
7
 
8
8
  view :core, :raw
9
-
@@ -5,15 +5,16 @@ format :html do
5
5
  end
6
6
 
7
7
  def table_of_contents content
8
- return if @mode==:closed || !content.present?
8
+ return if @mode == :closed || !content.present?
9
9
  min = card.rule(:table_of_contents).to_i
10
- #warn "table_of #{name}, #{min}"
11
- return unless min and min > 0
10
+ # warn "table_of #{name}, #{min}"
11
+ return unless min && min > 0
12
12
 
13
- toc, dep = [], 1
14
- content.gsub!( /<(h\d)>(.*?)<\/h\d>/i ) do |match|
15
- if $~
16
- tag, value = $~[1,2]
13
+ toc = []
14
+ dep = 1
15
+ content.gsub!(/<(h\d)>(.*?)<\/h\d>/i) do |match|
16
+ if $LAST_MATCH_INFO
17
+ tag, value = $LAST_MATCH_INFO[1, 2]
17
18
  value = ActionView::Base.new.strip_tags(value).strip
18
19
  next if value.empty?
19
20
  item = { value: value, uri: URI.escape(value) }
@@ -24,23 +25,20 @@ format :html do
24
25
  toc << [] if dep == 1
25
26
  item[:depth] = dep = 2; toc.last << item
26
27
  end
27
- %{<a name="#{item[:uri]}"></a>#{match}}
28
+ %(<a name="#{item[:uri]}"></a>#{match})
28
29
  end
29
30
  end
30
31
 
31
32
  if toc.flatten.length >= min
32
- content.replace %{ <div class="table-of-contents"> <h5>Table of Contents</h5> } +
33
- make_table_of_contents_list(toc) + '</div>'+ content
33
+ content.replace %( <div class="table-of-contents"> <h5>Table of Contents</h5> ) +
34
+ make_table_of_contents_list(toc) + '</div>' + content
34
35
  end
35
36
  end
36
37
 
37
-
38
- def make_table_of_contents_list(items)
39
- list = items.collect do |i|
40
- Array === i ? make_table_of_contents_list(i) : %{<li><a href="##{i[:uri]}"> #{i[:value]}</a></li>}
38
+ def make_table_of_contents_list items
39
+ list = items.map do |i|
40
+ Array === i ? make_table_of_contents_list(i) : %(<li><a href="##{i[:uri]}"> #{i[:value]}</a></li>)
41
41
  end.join("\n")
42
- "<ol>" + list + "</ol>"
42
+ '<ol>' + list + '</ol>'
43
43
  end
44
-
45
44
  end
46
-
@@ -1,18 +1,18 @@
1
1
 
2
2
  format :html do
3
3
  view :type do |args|
4
- args.merge!(type_class: 'no-edit') if card.cards_of_type_exist?
4
+ args[:type_class] = 'no-edit' if card.cards_of_type_exist?
5
5
  super args
6
6
  end
7
7
 
8
8
  view :type_formgroup do |args|
9
9
  if card.cards_of_type_exist?
10
- %{
10
+ %(
11
11
  <div>
12
12
  Sorry, this card must remain a Cardtype so long as there are
13
13
  <strong>#{card.name}</strong> cards.
14
14
  </div>
15
- }
15
+ )
16
16
  else
17
17
  super args
18
18
  end
@@ -1,8 +1,7 @@
1
1
 
2
2
  format :html do
3
-
4
3
  # what is this for? Can't you just use TYPE-date and editor to match this cas, no special view needed?
5
- view :editor do |args|
4
+ view :editor do |_args|
6
5
  text_field :content, class: 'date-editor'
7
6
  end
8
7
  end
@@ -11,12 +11,11 @@ module SelectedAction
11
11
  # find action id from content (saves lookups)
12
12
  db_content.to_s.split(/[\/\.]/)[1]
13
13
  end
14
-
15
14
  end
16
15
  include SelectedAction
17
16
 
18
17
  format do
19
- view :source do |args|
18
+ view :source do |_args|
20
19
  card.attachment.url
21
20
  end
22
21
 
@@ -28,34 +27,31 @@ format do
28
27
 
29
28
  def handle_source args
30
29
  source = _render_source args
31
- source ? yield( source ) : ''
30
+ source ? yield(source) : ''
32
31
  rescue
33
32
  'File Error'
34
33
  end
35
34
  end
36
35
 
37
-
38
-
39
36
  format :file do
40
-
41
- view :core do |args| # returns send_file args. not in love with this...
42
- if format = card.attachment_format( params[:format] ) # this means we only support known formats. dislike.
43
- if params[:explicit_file] and r = controller.response
44
- r.headers["Expires"] = 1.year.from_now.httpdate
45
- #r.headers["Cache-Control"] = "public" # currently using default "private", because proxy servers could block needed permission checks
37
+ view :core do |_args| # returns send_file args. not in love with this...
38
+ if format = card.attachment_format(params[:format]) # this means we only support known formats. dislike.
39
+ if params[:explicit_file] && (r = controller.response)
40
+ r.headers['Expires'] = 1.year.from_now.httpdate
41
+ # r.headers["Cache-Control"] = "public" # currently using default "private", because proxy servers could block needed permission checks
46
42
  end
47
43
 
48
- # elsif ![format, 'file'].member? params[:format] # formerly supported redirecting to correct file format
49
- # return redirect_to( request.fullpath.sub( /\.#{params[:format]}\b/, '.' + format ) ) #card.attachment.url(style) )
44
+ # elsif ![format, 'file'].member? params[:format] # formerly supported redirecting to correct file format
45
+ # return redirect_to( request.fullpath.sub( /\.#{params[:format]}\b/, '.' + format ) ) #card.attachment.url(style) )
50
46
 
51
47
  file = selected_file_version
52
- [ file.path,
53
- {
54
- type: file.content_type,
55
- filename: "#{card.cardname.safe_key}#{file.extension}",
56
- x_sendfile: true,
57
- disposition: (params[:format]=='file' ? 'attachment' : 'inline' )
58
- }
48
+ [file.path,
49
+ {
50
+ type: file.content_type,
51
+ filename: "#{card.cardname.safe_key}#{file.extension}",
52
+ x_sendfile: true,
53
+ disposition: (params[:format] == 'file' ? 'attachment' : 'inline')
54
+ }
59
55
  ]
60
56
  else
61
57
  _render_not_found
@@ -65,15 +61,12 @@ format :file do
65
61
  def selected_file_version
66
62
  card.attachment
67
63
  end
68
-
69
64
  end
70
65
 
71
-
72
66
  format :html do
73
-
74
67
  view :core do |args|
75
68
  handle_source args do |source|
76
- "<a href=\"#{source}\">Download #{ showname args[:title] }</a>"
69
+ "<a href=\"#{source}\">Download #{showname args[:title]}</a>"
77
70
  end
78
71
  end
79
72
 
@@ -81,14 +74,13 @@ format :html do
81
74
  file_chooser args
82
75
  end
83
76
 
84
-
85
- def preview args
77
+ def preview _args
86
78
  ''
87
79
  end
88
80
 
89
81
  view :preview_editor, tags: :unknown_ok do |args|
90
82
  cached_upload_card_name = Card::Env.params[:attachment_upload]
91
- cached_upload_card_name.gsub!(/\[\w+\]$/, "[action_id_of_cached_upload]")
83
+ cached_upload_card_name.gsub!(/\[\w+\]$/, '[action_id_of_cached_upload]')
92
84
  <<-HTML
93
85
  <div class="chosen-file">
94
86
  <input type="hidden" name="#{cached_upload_card_name}" value="#{card.selected_action_id}">
@@ -128,11 +120,11 @@ format :html do
128
120
  <span>
129
121
  #{card.new_card? ? 'Add' : 'Replace'} #{card.attachment_name}...
130
122
  </span>
131
- <input class="file-upload slotter form-control" type="file"
123
+ <input class="file-upload slotter form-control" type="file"
132
124
  name="card[#{card.type_code}]" id="card_#{card.type_code}">
133
125
  #{hidden_field_tag 'attachment_type_id', card.type_id}
134
- #{hidden_field card.attachment_name, class: "attachment_card_name",
135
- value: ''}
126
+ #{hidden_field card.attachment_name, class: 'attachment_card_name',
127
+ value: ''}
136
128
  #{hidden_field_tag 'file_card_name', card.cardname.url_key}
137
129
  </span>
138
130
  </div>
@@ -142,7 +134,4 @@ format :html do
142
134
  <div class="chosen-file"></div>
143
135
  HTML
144
136
  end
145
-
146
137
  end
147
-
148
-
@@ -3,19 +3,19 @@ attachment :image, uploader: ImageUploader
3
3
  include File::SelectedAction
4
4
 
5
5
  format do
6
-
7
6
  include File::Format
8
7
 
9
- view :closed_content do |args|
8
+ view :closed_content do |_args|
10
9
  _render_core size: :icon
11
10
  end
12
11
 
13
12
  view :source do |args|
14
- style = case
15
- when @mode==:closed ; :icon
16
- when args[:size] ; args[:size].to_sym
17
- when main? ; :large
18
- else ; :medium
13
+ style =
14
+ case
15
+ when @mode == :closed then :icon
16
+ when args[:size] then args[:size].to_sym
17
+ when main? then :large
18
+ else :medium
19
19
  end
20
20
  style = :original if style.to_sym == :full
21
21
  if style == :original
@@ -24,7 +24,6 @@ format do
24
24
  card.image.versions[style].url
25
25
  end
26
26
  end
27
-
28
27
  end
29
28
 
30
29
  format :html do
@@ -32,37 +31,42 @@ format :html do
32
31
 
33
32
  view :core do |args|
34
33
  handle_source args do |source|
35
- source == 'missing' ? "<!-- image missing #{@card.name} -->" : image_tag(source)
34
+ if source == 'missing'
35
+ "<!-- image missing #{@card.name} -->"
36
+ else
37
+ image_tag(source)
38
+ end
36
39
  end
37
40
  end
38
41
 
39
42
  def preview args
40
43
  if !card.new_card? || card.preliminary_upload?
41
- content_tag( :div, _render_core(args.merge(size: :medium)).html_safe,
42
- class: 'attachment-preview', id: "#{card.attachment.filename}-preview")
44
+ content_tag :div, _render_core(args.merge(size: :medium)).html_safe,
45
+ class: 'attachment-preview',
46
+ id: "#{card.attachment.filename}-preview"
43
47
  end
44
48
  end
45
49
 
46
50
  view :content_changes do |args|
47
51
  out = ''
48
- size = args[:diff_type]==:summary ? :icon : :medium
49
- if !args[:hide_diff] and args[:action] and last_change = card.last_change_on(:db_content,before: args[:action])
50
- card.selected_action_id=last_change.card_action_id
52
+ size = args[:diff_type] == :summary ? :icon : :medium
53
+ if !args[:hide_diff] && args[:action] &&
54
+ (last_change = card.last_change_on(:db_content, before: args[:action]))
55
+ card.selected_action_id = last_change.card_action_id
51
56
  out << Card::Diff.render_deleted_chunk(_render_core(size: size))
52
57
  end
53
- card.selected_action_id=args[:action].id
54
- out << Card::Diff.render_added_chunk(_render_core(size: size))
58
+ card.selected_action_id = args[:action].id
59
+ out << Card::Diff.render_added_chunk(_render_core(size: size))
55
60
  out
56
61
  end
57
-
58
62
  end
59
63
 
60
64
  format :css do
61
- view :core do |args|
65
+ view :core do |_args|
62
66
  render_source
63
67
  end
64
68
 
65
- view :content do |args| #why is this necessary?
69
+ view :content do |_args| # why is this necessary?
66
70
  render_core
67
71
  end
68
72
  end
@@ -70,13 +74,16 @@ end
70
74
  format :file do
71
75
  include File::FileFormat
72
76
 
73
- view :style do |args| #should this be in model?
74
- ['', 'full'].member?( args[:style].to_s ) ? :original : args[:style]
77
+ view :style do |args| # should this be in model?
78
+ ['', 'full'].member?(args[:style].to_s) ? :original : args[:style]
75
79
  end
76
80
 
77
81
  def selected_file_version
78
82
  style = _render_style(style: params[:size]).to_sym
79
- (style && style != :original) ? card.attachment.versions[style] : card.attachment
83
+ if style && style != :original
84
+ card.attachment.versions[style]
85
+ else
86
+ card.attachment
87
+ end
80
88
  end
81
89
  end
82
-
@@ -8,9 +8,9 @@ end
8
8
  format :html do
9
9
  include Html::HtmlFormat
10
10
 
11
- view :core do |args|
12
- with_inclusion_mode :template do
13
- process_content ::CodeRay.scan( _render_raw, :html ).div
11
+ view :core do |_args|
12
+ with_nest_mode :template do
13
+ process_content ::CodeRay.scan(_render_raw, :html).div
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -1,34 +1,34 @@
1
- event :validate_list_name, before: :validate, on: :save, changed: :name do
1
+ event :validate_list_name, :validate, on: :save, changed: :name do
2
2
  if !junction? || !right || right.type_id != CardtypeID
3
3
  errors.add :name, 'must have a cardtype name as right part'
4
4
  end
5
5
  end
6
6
 
7
- event :validate_list_item_type_change,
8
- before: :validate, on: :save, changed: :name do
7
+ event :validate_list_item_type_change, :validate,
8
+ on: :save, changed: :name do
9
9
  item_cards.each do |item_card|
10
- if item_card.type_cardname.key != item_type_name.key
11
- errors.add :name,
12
- "name conflicts with list items' type; " \
13
- 'delete content first'
14
- end
10
+ next unless item_card.type_cardname.key != item_type_name.key
11
+ errors.add :name,
12
+ "name conflicts with list items' type; " \
13
+ 'delete content first'
15
14
  end
16
15
  end
17
16
 
18
- event :validate_list_content, before: :validate, on: :save, changed: :content do
17
+ event :validate_list_content, :validate,
18
+ on: :save, changed: :content do
19
19
  item_cards.each do |item_card|
20
- if item_card.type_cardname.key != item_type_name.key
21
- errors.add :content,
22
- "#{item_card.name} has wrong cardtype; " \
23
- "only cards of type #{cardname.right} are allowed"
24
- end
20
+ next unless item_card.type_cardname.key != item_type_name.key
21
+ errors.add :content,
22
+ "#{item_card.name} has wrong cardtype; " \
23
+ "only cards of type #{cardname.right} are allowed"
25
24
  end
26
25
  end
27
26
 
28
- event :create_listed_by_cards,
29
- before: :approve, on: :save, changed: :content do
27
+ event :create_listed_by_cards, :prepare_to_validate,
28
+ on: :save, changed: :content do
30
29
  item_names.each do |item_name|
31
30
  listed_by_name = "#{item_name}+#{left.type_name}"
31
+ next if director.main_director.card.key == listed_by_name.to_name.key
32
32
  if !Card[listed_by_name]
33
33
  add_subcard listed_by_name, type_id: ListedByID
34
34
  else
@@ -37,13 +37,13 @@ event :create_listed_by_cards,
37
37
  end
38
38
  end
39
39
 
40
- event :update_related_listed_by_card_on_create,
41
- after: :store, on: :create do
40
+ event :update_related_listed_by_card_on_create, :finalize,
41
+ on: :create do
42
42
  update_listed_by_cache_for item_keys
43
43
  end
44
44
 
45
- event :update_related_listed_by_card_on_content_update,
46
- after: :store, on: :update, changed: :content do
45
+ event :update_related_listed_by_card_on_content_update, :finalize,
46
+ on: :update, changed: :content do
47
47
  new_items = item_keys
48
48
  changed_items =
49
49
  if db_content_was
@@ -55,23 +55,18 @@ event :update_related_listed_by_card_on_content_update,
55
55
  update_listed_by_cache_for changed_items
56
56
  end
57
57
 
58
- event :update_related_listed_by_card_on_name_update,
59
- after: :store, on: :update, changed: :name do
60
- update_all_items
61
- end
62
-
63
- event :update_related_listed_by_card_on_type_update,
64
- after: :store, on: :update, changed: :type_id do
58
+ event :update_related_listed_by_card_on_name_and_type_changes, :finalize,
59
+ on: :update, changed: [:name, :type_id] do
65
60
  update_all_items
66
61
  end
67
62
 
68
- event :update_related_listed_by_card_on_delete,
69
- after: :store, on: :delete, when: proc { |c| c.junction? } do
63
+ event :update_related_listed_by_card_on_delete, :finalize,
64
+ on: :delete, when: proc { |c| c.junction? } do
70
65
  update_listed_by_cache_for item_keys, type_key: @left_type_key
71
66
  end
72
67
 
73
- event :cache_type_key,
74
- before: :store, on: :delete, when: proc { |c| c.junction? } do
68
+ event :cache_type_key, :store,
69
+ on: :delete, when: proc { |c| c.junction? } do
75
70
  @left_type_key = left.type_card.key
76
71
  end
77
72
 
@@ -89,13 +84,12 @@ def update_listed_by_cache_for item_keys, args={}
89
84
 
90
85
  item_keys.each do |item_key|
91
86
  key = "#{item_key}+#{type_key}"
92
- if Card::Cache[Card::Set::Type::ListedBy].exist? key
93
- if (card = Card.fetch(key))
94
- card.update_cached_list
95
- card.update_references_out
96
- else
97
- Card::Cache[Card::Set::Type::ListedBy].delete key
98
- end
87
+ next unless Card::Cache[Card::Set::Type::ListedBy].exist? key
88
+ if (card = Card.fetch(key))
89
+ card.update_cached_list
90
+ card.update_references_out
91
+ else
92
+ Card::Cache[Card::Set::Type::ListedBy].delete key
99
93
  end
100
94
  end
101
95
  end