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,25 +1,23 @@
1
- event :validate_listed_by_name, before: :validate, on: :save, changed: :name do
1
+ event :validate_listed_by_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_listed_by_content,
8
- before: :validate, on: :save,
9
- changed: :content do
7
+ event :validate_listed_by_content, :validate,
8
+ on: :save, changed: :content do
10
9
  item_cards(content: content).each do |item_card|
11
- if item_card.type_id != right.id
12
- errors.add(
13
- :content,
14
- "#{item_card.name} has wrong cardtype; " \
15
- "only cards of type #{cardname.right} are allowed"
16
- )
17
- end
10
+ next unless item_card.type_id != right.id
11
+ errors.add(
12
+ :content,
13
+ "#{item_card.name} has wrong cardtype; " \
14
+ "only cards of type #{cardname.right} are allowed"
15
+ )
18
16
  end
19
17
  end
20
18
 
21
- event :update_content_in_list_cards,
22
- before: :approve_subcards, on: :save, changed: :content do
19
+ event :update_content_in_list_cards, :prepare_to_validate,
20
+ on: :save, changed: :content do
23
21
  if content.present?
24
22
  new_items = item_keys(content: content)
25
23
  old_items = item_keys
@@ -1,19 +1,18 @@
1
1
 
2
- view :editor do |args|
2
+ view :editor do |_args|
3
3
  text_field :content, class: 'card-content'
4
4
  end
5
5
 
6
- event :validate_number, after: :approve do
7
- errors.add :content, "'#{content}' is not numeric" unless valid_number?( content )
6
+ event :validate_number, :validate do
7
+ errors.add :content, "'#{content}' is not numeric" unless valid_number?(content)
8
8
  end
9
9
 
10
- def valid_number?( string )
10
+ def valid_number? string
11
11
  valid = true
12
12
  begin
13
- Kernel.Float( string )
13
+ Kernel.Float(string)
14
14
  rescue ArgumentError, TypeError
15
15
  valid = false
16
16
  end
17
17
  valid
18
18
  end
19
-
@@ -1,3 +1,3 @@
1
- view :editor do |args|
1
+ view :editor do |_args|
2
2
  text_field :content, class: 'card-content'
3
3
  end
@@ -67,7 +67,7 @@ format do
67
67
 
68
68
  view :search_error do |_args|
69
69
  sr_class = search_results.class.to_s
70
- %{#{sr_class} :: #{search_results.message} :: #{card.raw_content}}
70
+ %(#{sr_class} :: #{search_results.message} :: #{card.raw_content})
71
71
  end
72
72
 
73
73
  view :card_list do |_args|
@@ -85,7 +85,7 @@ format do
85
85
  begin
86
86
  v = {}
87
87
  v[:query] = card.query(search_params)
88
- v[:item] = set_inclusion_opts args.merge(query_view: v[:query][:view])
88
+ v[:item] = set_nest_opts args.merge(query_view: v[:query][:view])
89
89
  v
90
90
  rescue JSON::ParserError => e
91
91
  { error: e }
@@ -124,17 +124,18 @@ format do
124
124
  end
125
125
  end
126
126
 
127
- def set_inclusion_opts args
128
- @inclusion_defaults = nil
129
- @inclusion_opts ||= {}
130
- @inclusion_opts[:view] = args[:item] || inclusion_opts[:view] ||
131
- args[:query_view] || default_item_view
132
- # explicit > inclusion syntax > WQL > inclusion defaults
127
+ def set_nest_opts args
128
+ @nest_defaults = nil
129
+ @nest_opts ||= {}
130
+ @nest_opts[:view] = args[:item] || nest_opts[:view] ||
131
+ args[:query_view] || default_item_view
132
+ # explicit > nest syntax > WQL > nest defaults
133
133
  end
134
134
 
135
135
  def page_link text, page, _current=false, options={}
136
136
  @paging_path_args[:offset] = page * @paging_limit
137
- options.merge!(class: 'card-paging-link slotter', remote: true)
137
+ options[:class] = 'card-paging-link slotter'
138
+ options[:remote] = true
138
139
  link_to raw(text), path(@paging_path_args), options
139
140
  end
140
141
 
@@ -205,7 +206,7 @@ format :rss do
205
206
 
206
207
  def raw_feed_items _args
207
208
  @raw_feed_items ||= begin
208
- search_params.merge!(default_limit: 25)
209
+ search_params[:default_limit] = 25
209
210
  search_results
210
211
  end
211
212
  end
@@ -220,21 +221,21 @@ format :html do
220
221
  else
221
222
  results =
222
223
  search_results.map do |c|
223
- item_view = inclusion_defaults(c)[:view]
224
- %{
225
- <div class="search-result-item item-#{ item_view }">
224
+ item_view = nest_defaults(c)[:view]
225
+ %(
226
+ <div class="search-result-item item-#{item_view}">
226
227
  #{nest(c, size: args[:size], view: item_view)}
227
228
  </div>
228
- }
229
+ )
229
230
  end.join "\n"
230
231
 
231
- %{
232
- #{ paging }
232
+ %(
233
+ #{paging}
233
234
  <div class="search-result-list">
234
- #{ results }
235
+ #{results}
235
236
  </div>
236
- #{ paging if search_results.length > 10 }
237
- }
237
+ #{paging if search_results.length > 10}
238
+ )
238
239
  end
239
240
  end
240
241
 
@@ -254,12 +255,13 @@ format :html do
254
255
  view :editor, mod: Html::HtmlFormat
255
256
 
256
257
  view :no_search_results do |_args|
257
- %{<div class="search-no-results"></div>}
258
+ %(<div class="search-no-results"></div>)
258
259
  end
259
260
 
260
261
  view :paging do |_args|
261
262
  s = card.query search_params
262
- offset, limit = s[:offset].to_i, s[:limit].to_i
263
+ offset = s[:offset].to_i
264
+ limit = s[:limit].to_i
263
265
  return '' if limit < 1
264
266
  # avoid query if we know there aren't enough results to warrant paging
265
267
  return '' if offset == 0 && limit > offset + search_results.length
@@ -267,7 +269,7 @@ format :html do
267
269
  # should only happen if limit exactly equals the total
268
270
  return '' if limit >= total
269
271
 
270
- @paging_path_args = { limit: limit, item: inclusion_defaults(card)[:view] }
272
+ @paging_path_args = { limit: limit, item: nest_defaults(card)[:view] }
271
273
  @paging_limit = limit
272
274
 
273
275
  s[:vars].each { |key, value| @paging_path_args["_#{key}"] = value }
@@ -301,7 +303,7 @@ format :html do
301
303
  next_page = current_page < total_pages ? current_page + 1 : false
302
304
  out << next_page_link(next_page)
303
305
 
304
- out << %{</ul></nav>}
306
+ out << %(</ul></nav>)
305
307
  out.join
306
308
  end
307
309
 
@@ -8,12 +8,12 @@ def followable?
8
8
  false
9
9
  end
10
10
 
11
- event :store_in_session, before: :approve, on: :save, changed: :content do
11
+ event :store_in_session, :prepare_to_validate, on: :save, changed: :content do
12
12
  Env.session[key] = db_content
13
13
  self.db_content = ''
14
14
  end
15
15
 
16
- event :delete_in_session, after: :approve, on: :delete do
16
+ event :delete_in_session, :validate, on: :delete do
17
17
  Env.session[key] = nil
18
18
  abort :success
19
19
  end
@@ -33,4 +33,3 @@ format :html do
33
33
  args[:item] = :name
34
34
  end
35
35
  end
36
-
@@ -58,12 +58,12 @@ format :html do
58
58
  view :field_related_rules do |args|
59
59
  with_label_and_navbars args.merge(selected_view: :field_related_rules) do
60
60
  field_settings = [:default, :help, :structure]
61
- field_settings += [:input, :options, :options_label] if card.type_id == PointerID
61
+ field_settings += [:input, :options, :options_label] if card.type_id == PointerID
62
62
  rules_table (card.visible_setting_codenames & field_settings), args
63
63
  end
64
64
  end
65
65
 
66
- view :set_label do |args|
66
+ view :set_label do |_args|
67
67
  content_tag :h3, card.label, class: 'set-label'
68
68
  end
69
69
 
@@ -71,18 +71,18 @@ format :html do
71
71
  view group_key.to_sym do |args|
72
72
  settings = card.visible_settings group_key
73
73
  if settings.present?
74
- group_name = Card::Setting.group_names[group_key] || group.to_s
74
+ group_name = Card::Setting.group_names[group_key] || group.to_s
75
75
  heading_id = "heading-#{group_key}"
76
76
  collapse_id = "collapse-#{card.cardname.safe_key}-#{group_key}"
77
77
  output [
78
78
  (content_tag :div, class: 'panel panel-default' do
79
79
  content_tag :div, class: 'panel-heading', role: 'tab', id: heading_id do
80
80
  content_tag :h4, class: 'panel-title' do
81
- content_tag :a, group_name, 'data-toggle'=>'collapse', 'data-parent'=>'#accordion', href: "##{collapse_id}", 'aria-expanded'=>'false', 'aria-controls'=>collapse_id
81
+ content_tag :a, group_name, 'data-toggle' => 'collapse', 'data-parent' => '#accordion', href: "##{collapse_id}", 'aria-expanded' => 'false', 'aria-controls' => collapse_id
82
82
  end
83
83
  end
84
84
  end),
85
- (content_tag :div, id: collapse_id, class: 'panel-collapse collapse', role: 'tabpanel', 'aria-labelledby'=>heading_id do
85
+ (content_tag :div, id: collapse_id, class: 'panel-collapse collapse', role: 'tabpanel', 'aria-labelledby' => heading_id do
86
86
  rules_table settings.map(&:codename), args
87
87
  end)
88
88
  ]
@@ -93,7 +93,7 @@ format :html do
93
93
  def rules_table settings, args={}
94
94
  wrap_with :table, class: 'set-rules table' do
95
95
  [
96
- (content_tag(:tr, class: "rule-group") do
96
+ (content_tag(:tr, class: 'rule-group') do
97
97
  wrap_each_with :th, %w(Trait Content Set), class: 'rule-heading'
98
98
  end),
99
99
  (settings.map do |setting|
@@ -106,31 +106,31 @@ format :html do
106
106
  end
107
107
  end
108
108
 
109
- view :editor do |args|
110
- 'Cannot currently edit Sets' #ENGLISH
109
+ view :editor do |_args|
110
+ 'Cannot currently edit Sets' # ENGLISH
111
111
  end
112
112
 
113
113
  view :template_link do |args|
114
114
  args.delete :style
115
115
  wrap args do
116
- link = view_link args[:inc_syntax], :template_editor, class: 'slotter' #, 'slot-include'=>include_syntax
116
+ link = view_link args[:inc_syntax], :template_editor, class: 'slotter' # , 'slot-include'=>include_syntax
117
117
  "{{#{link}}}"
118
118
  end
119
119
  end
120
120
 
121
- view :template_closer do |args|
121
+ view :template_closer do |_args|
122
122
  view_link '', :template_link, class: 'slotter glyphicon glyphicon-remove template-editor-close'
123
123
  end
124
124
 
125
125
  view :template_editor do |args|
126
126
  wrap args do
127
- %{
127
+ %(
128
128
  <div class="template-editor-left">{{</div>
129
129
  <div class="template-editor-main">
130
- #{ render_template_editor_frame args }
130
+ #{render_template_editor_frame args}
131
131
  </div>
132
132
  <div class="template-editor-right">}}</div>
133
- }
133
+ )
134
134
  end
135
135
  end
136
136
 
@@ -140,29 +140,28 @@ format :html do
140
140
  end
141
141
  end
142
142
 
143
- view :closed_content do |args|
143
+ view :closed_content do |_args|
144
144
  ''
145
145
  end
146
146
 
147
-
148
147
  view :set_navbar do |args|
149
148
  id = "rule-navbar-#{card.cardname.safe_key}-#{args[:home_view]}"
150
- related_sets = card.related_sets(true)
149
+ related_sets = card.related_sets(true)
151
150
  return '' if related_sets.size <= 1
152
151
  navbar id, toggle: 'Rules<span class="caret"></span>', toggle_align: :left,
153
152
  class: 'slotter toolbar', navbar_type: 'inverse', collapsed_content: close_link(class: 'pull-right visible-xs') do
154
153
  [
155
- content_tag(:span, 'Set:', class: "navbar-text hidden-xs"),
154
+ content_tag(:span, 'Set:', class: 'navbar-text hidden-xs'),
156
155
  (wrap_with :ul, class: 'nav navbar-nav nav-pills' do
157
156
  related_sets.map do |name, label|
158
157
  link = card_link name, text: label, remote: true,
159
- path_opts: {
160
- view: @slot_view,
161
- slot: {subheader: showname(name), subframe: true, hide: 'header set_label rule_navbar', show: 'subheader set_navbar'}
162
- }
158
+ path_opts: {
159
+ view: @slot_view,
160
+ slot: { subheader: showname(name), subframe: true, hide: 'header set_label rule_navbar', show: 'subheader set_navbar' }
161
+ }
163
162
  li_pill link, name == card.name
164
163
  end
165
- end),
164
+ end)
166
165
  ]
167
166
  end
168
167
  end
@@ -173,35 +172,34 @@ format :html do
173
172
 
174
173
  view :rule_navbar do |args|
175
174
  id = "rule-navbar-#{card.cardname.safe_key}-#{args[:home_view]}"
176
- args.merge!(path_opts: {slot: {show: :rule_navbar}})
175
+ args[:path_opts] = { slot: { show: :rule_navbar } }
177
176
  navbar id, toggle: 'Rules<span class="caret"></span>', toggle_align: :left,
178
177
  class: 'slotter toolbar', navbar_type: 'inverse', collapsed_content: close_link(class: 'pull-right visible-xs') do
179
178
  [
180
- content_tag(:span, 'Rules:', class: "navbar-text hidden-xs"),
179
+ content_tag(:span, 'Rules:', class: 'navbar-text hidden-xs'),
181
180
  (wrap_with :ul, class: 'nav navbar-nav nav-pills' do
182
181
  [
183
- (view_link_pill( 'field', :field_related_rules, args) if card.junction?),
184
- view_link_pill( 'common', :common_rules, args),
185
- view_link_pill( 'by group', :grouped_rules, args),
186
- view_link_pill( 'by name', :all_rules, args),
187
- (view_link_pill( 'recent', :recent_rules, args) if recently_edited_settings?),
182
+ (view_link_pill('field', :field_related_rules, args) if card.junction?),
183
+ view_link_pill('common', :common_rules, args),
184
+ view_link_pill('by group', :grouped_rules, args),
185
+ view_link_pill('by name', :all_rules, args),
186
+ (view_link_pill('recent', :recent_rules, args) if recently_edited_settings?)
188
187
  ]
189
- end),
188
+ end)
190
189
  ]
191
190
  end
192
191
  end
193
192
 
194
193
  def view_link_pill name, view, args
195
194
  selected_view = args[:selected_view] || @slot_view || args[:home_view]
196
- opts = {class: 'slotter', role: 'pill', path_opts: args[:path_opts]}
195
+ opts = { class: 'slotter', role: 'pill', path_opts: args[:path_opts] }
197
196
  li_pill view_link(name, view, opts), selected_view == view
198
197
  end
199
198
  end
200
199
 
201
-
202
200
  include Card::Set::Type::SearchType
203
201
 
204
- def followed_by? user_id = nil
202
+ def followed_by? user_id=nil
205
203
  all_members_followed_by? user_id
206
204
  end
207
205
 
@@ -217,12 +215,12 @@ end
217
215
 
218
216
  def subclass_for_set
219
217
  current_set_pattern_code = tag.codename
220
- Card.set_patterns.detect do |set|
218
+ Card.set_patterns.find do |set|
221
219
  current_set_pattern_code == set.pattern_code
222
220
  end
223
221
  end
224
222
 
225
- def junction_only?()
223
+ def junction_only?
226
224
  if @junction_only.nil?
227
225
  @junction_only = subclass_for_set.junction_only
228
226
  else
@@ -254,7 +252,7 @@ end
254
252
 
255
253
  def follow_rule_name user=nil
256
254
  if user
257
- if user.kind_of? String
255
+ if user.is_a? String
258
256
  "#{name}+#{user}+#{Card[:follow].name}"
259
257
  else
260
258
  "#{name}+#{user.name}+#{Card[:follow].name}"
@@ -279,13 +277,12 @@ def all_user_ids_with_rule_for setting_code
279
277
  Card.all_user_ids_with_rule_for self, setting_code
280
278
  end
281
279
 
282
-
283
280
  def setting_codenames_by_group
284
281
  result = {}
285
282
  Card::Setting.groups.each do |group, settings|
286
- visible_settings = settings.reject { |s| !s or !s.applies_to_cardtype(prototype.type_id) }
283
+ visible_settings = settings.reject { |s| !s || !s.applies_to_cardtype(prototype.type_id) }
287
284
  unless visible_settings.empty?
288
- result[group] = visible_settings.map { |s| s.codename }
285
+ result[group] = visible_settings.map(&:codename)
289
286
  end
290
287
  end
291
288
  result
@@ -300,7 +297,7 @@ end
300
297
 
301
298
  def visible_settings group
302
299
  Card::Setting.groups[group].reject do |setting|
303
- !setting or !setting.applies_to_cardtype(prototype.type_id)
300
+ !setting || !setting.applies_to_cardtype(prototype.type_id)
304
301
  end
305
302
  end
306
303
 
@@ -308,45 +305,43 @@ def all_members_followed?
308
305
  all_members_followed_by? Auth.current_id
309
306
  end
310
307
 
311
- def all_members_followed_by? user_id = nil
308
+ def all_members_followed_by? user_id=nil
312
309
  if !prototype.followed_by? user_id
313
310
  return false
314
311
  elsif set_followed_by? user_id
315
312
  return true
316
313
  else
317
314
  broader_sets.each do |b_s|
318
- if (set_card = Card.fetch(b_s)) && set_card.set_followed_by?(user_id)
319
- return true
315
+ if (set_card = Card.fetch(b_s)) && set_card.set_followed_by?(user_id)
316
+ return true
320
317
  end
321
318
  end
322
319
  end
323
- return false
320
+ false
324
321
  end
325
322
 
326
323
  def set_followed?
327
324
  set_followed_by? Auth.current_id
328
325
  end
329
326
 
330
- def set_followed_by? user_id = nil
331
- return ( user_id && (user = Card.find(user_id)) && Card.fetch(follow_rule_name(user.name)) ) ||
332
- Card.fetch(follow_rule_name)
327
+ def set_followed_by? user_id=nil
328
+ (user_id && (user = Card.find(user_id)) && Card.fetch(follow_rule_name(user.name))) ||
329
+ Card.fetch(follow_rule_name)
333
330
  end
334
331
 
335
332
  def broader_sets
336
333
  prototype.set_names[1..-1]
337
334
  end
338
335
 
339
-
340
336
  def prototype
341
- opts = subclass_for_set.prototype_args self.cardname.trunk_name
337
+ opts = subclass_for_set.prototype_args cardname.trunk_name
342
338
  Card.fetch opts[:name], new: opts
343
339
  end
344
340
 
345
- def related_sets with_self = false
341
+ def related_sets with_self=false
346
342
  if subclass_for_set.anchorless?
347
343
  prototype.related_sets with_self
348
344
  else
349
345
  left(new: {}).related_sets with_self
350
346
  end
351
347
  end
352
-