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
@@ -13,52 +13,53 @@ class Card
13
13
  end
14
14
 
15
15
  def self.included host_class
16
- host_class.extend( ClassMethods )
16
+ host_class.extend(ClassMethods)
17
17
  host_class.machines_wql = {}
18
18
  host_class.machine_input do
19
19
  format._render_raw
20
20
  end
21
+ event_suffix = host_class.name.tr ':', '_'
22
+ define_update_event event_suffix, host_class
23
+ define_delete_events event_suffix, host_class
24
+ end
21
25
 
22
- event_suffix = host_class.name.gsub ':', '_'
23
-
24
- host_class.event(
25
- "after_machine_input_updated_#{ event_suffix }".to_sym,
26
- after: :extend, on: :save
27
- ) do
28
-
29
- wql_statement = { right_plus: [
30
- { codename: "machine_input" },
31
- { link_to: name}
32
- ]}.merge(host_class.machines_wql)
33
- machines = Card.search(wql_statement)
34
- machines.each do |item|
35
- item.reset_machine_output! if item.kind_of? Machine
36
- end
26
+ def self.define_delete_events event_suffix, host_class
27
+ event_name = "before_machine_input_deleted_#{event_suffix}".to_sym
28
+ host_class.event event_name, :store, on: :delete do
29
+ # exclude self because it's on the way to the trash
30
+ # otherwise it will be created again with the reset_machine_output
31
+ # call in the event below
32
+ @involved_machines =
33
+ Card::MachineInput.search_involved_machines(name, host_class)
34
+ .reject { |card| card == self }
37
35
  end
38
-
39
- host_class.event(
40
- "before_machine_input_deleted_#{ event_suffix }".to_sym,
41
- after: :approve, on: :delete
42
- ) do
43
-
44
- @involved_machines = Card.search(
45
- {right_plus: [
46
- {codename: "machine_input"},
47
- {link_to: name}
48
- ]}.merge(host_class.machines_wql)
49
- )
36
+ event_name = "after_machine_input_deleted_#{event_suffix}".to_sym
37
+ host_class.event event_name, :finalize, on: :delete do
38
+ @involved_machines.each do |item|
39
+ item.reset_machine_output! if item.is_a? Machine
40
+ end
50
41
  end
42
+ end
51
43
 
44
+ def self.define_update_event event_suffix, host_class
52
45
  host_class.event(
53
- "after_machine_input_deleted_#{ event_suffix }".to_sym,
54
- after: :store_subcards, on: :delete
46
+ "after_machine_input_updated_#{event_suffix}".to_sym, :integrate,
47
+ on: :save
55
48
  ) do
56
-
57
- @involved_machines.each do |item|
58
- item.reset_machine_output! if item.kind_of? Machine
49
+ Card::MachineInput.search_involved_machines(name, host_class)
50
+ .each do |item|
51
+ item.reset_machine_output! if item.is_a? Machine
59
52
  end
60
53
  end
61
54
  end
55
+
56
+ def self.search_involved_machines name, host_class
57
+ wql_statement =
58
+ { right_plus: [
59
+ { codename: 'machine_input' },
60
+ { link_to: name }
61
+ ] }.merge(host_class.machines_wql)
62
+ Card.search(wql_statement)
63
+ end
62
64
  end
63
65
  end
64
-
@@ -1,3 +1,3 @@
1
1
  def followable?
2
2
  false
3
- end
3
+ end
@@ -1,12 +1,11 @@
1
1
 
2
- view :raw do |args|
3
-
2
+ view :raw do |_args|
4
3
  Rails.logger.info "reading file: #{Cardio.gem_root}/mod/03_machines/lib/javascript/#{card.codename}.js"
5
4
  File.read "#{Cardio.gem_root}/mod/03_machines/lib/javascript/#{card.codename}.js"
6
5
  end
7
6
 
8
7
  format :html do
9
- view :editor do |args|
8
+ view :editor do |_args|
10
9
  "Content is stored in file and can't be edited."
11
10
  end
12
11
  end
@@ -1,11 +1,10 @@
1
- view :raw do |args|
2
-
1
+ view :raw do |_args|
3
2
  Rails.logger.info "reading file: #{Cardio.gem_root}/mod/03_machines/lib/javascript/#{card.codename}.js.coffee"
4
3
  File.read "#{Cardio.gem_root}/mod/03_machines/lib/javascript/#{card.codename}.js.coffee"
5
4
  end
6
5
 
7
6
  format :html do
8
- view :editor do |args|
7
+ view :editor do |_args|
9
8
  "Content is stored in file and can't be edited."
10
9
  end
11
10
  end
@@ -1,7 +1,7 @@
1
1
 
2
- view :raw do |args|
2
+ view :raw do |_args|
3
3
  # jquery.ui.all must be after jquery.mobile to override dialog weirdness *
4
- # jquery.ui.autocomplete must be after jquery.ui stuff
4
+ # jquery.ui.autocomplete must be after jquery.ui stuff
5
5
  # FIXME removed jquerymobile.js. Doesn't work with the new jquery version
6
6
  js_files = %w( jquery-ui.js jquery.ui.autocomplete.html.js jquery.autosize.js jquery.fileupload.js jquery.iframe-transport.js jquery_ujs.js )
7
7
  js_files.map do |filename|
@@ -1,5 +1,5 @@
1
- view :raw do |args|
2
- [ "wagn_mod.js.coffee", "wagn.js.coffee" ].map do |name|
1
+ view :raw do |_args|
2
+ ['wagn_mod.js.coffee', 'wagn.js.coffee'].map do |name|
3
3
  File.read "#{Cardio.gem_root}/mod/03_machines/lib/javascript/#{name}"
4
4
  end.join("\n")
5
5
  end
@@ -1,4 +1,4 @@
1
- view :raw do |args|
1
+ view :raw do |_args|
2
2
  File.read "#{Cardio.gem_root}/mod/03_machines/lib/stylesheets/#{card.codename}.css"
3
3
  end
4
4
 
@@ -1,5 +1,5 @@
1
1
 
2
- view :raw do |args|
2
+ view :raw do |_args|
3
3
  File.read "#{Cardio.gem_root}/mod/03_machines/lib/stylesheets/style_cards.scss"
4
4
  end
5
5
 
@@ -1,3 +1,2 @@
1
1
  format { include StyleBootstrapCompatible::Format }
2
2
  format(:html) { include ScriptAce::HtmlFormat }
3
-
@@ -10,12 +10,12 @@ include MachineInput
10
10
 
11
11
  def compile_coffee script
12
12
  ::CoffeeScript.compile script
13
- rescue =>e
13
+ rescue => e
14
14
  e
15
15
  end
16
16
 
17
17
  machine_input do
18
- Uglifier.compile( compile_coffee format(:js)._render_raw )
18
+ Uglifier.compile(compile_coffee format(:js)._render_raw)
19
19
  end
20
20
 
21
21
  store_machine_output filetype: 'js'
@@ -24,34 +24,30 @@ def clean_html?
24
24
  false
25
25
  end
26
26
 
27
-
28
27
  format do
29
- def chunk_list #turn off autodetection of uri's
30
- :inclusion_only
28
+ def chunk_list # turn off autodetection of uri's
29
+ :nest_only
31
30
  end
32
31
  end
33
32
 
34
-
35
33
  format :html do
36
34
  view :editor, mod: Html::HtmlFormat
37
35
 
38
36
  view :content_changes do |args|
39
- %{
37
+ %(
40
38
  <pre>#{super(args)}</pre>
41
- }
39
+ )
42
40
  end
43
41
 
44
- view :core do |args|
42
+ view :core do |_args|
45
43
  js = card.compile_coffee _render_raw
46
- highlighted_js = ::CodeRay.scan( js, :js ).div
44
+ highlighted_js = ::CodeRay.scan(js, :js).div
47
45
  process_content highlighted_js
48
46
  end
49
-
50
47
  end
51
48
 
52
-
53
49
  format do
54
- view :core do |args|
50
+ view :core do |_args|
55
51
  process_content card.compile_coffee(_render_raw)
56
52
  end
57
53
  end
@@ -3,18 +3,16 @@ require 'sass'
3
3
  include Machine
4
4
  include MachineInput
5
5
 
6
- store_machine_output filetype: "css"
6
+ store_machine_output filetype: 'css'
7
7
 
8
8
  machine_input do
9
9
  compress_css format(format: :css)._render_core
10
10
  end
11
11
 
12
12
  def compress_css input
13
- begin
14
- Sass.compile input, style: :compressed
15
- rescue => e
16
- raise Card::Oops, "Stylesheet Error:\n#{ e.message }"
17
- end
13
+ Sass.compile input, style: :compressed
14
+ rescue => e
15
+ raise Card::Oops, "Stylesheet Error:\n#{e.message}"
18
16
  end
19
17
 
20
18
  def clean_html?
@@ -22,28 +20,29 @@ def clean_html?
22
20
  end
23
21
 
24
22
  format do
25
- def chunk_list #turn off autodetection of uri's
23
+ def chunk_list # turn off autodetection of uri's
26
24
  :references
27
25
  end
28
26
  end
29
27
 
30
-
31
28
  format :html do
32
- def get_inclusion_defaults nested_card
29
+ def get_nest_defaults _nested_card
33
30
  { view: :closed }
34
31
  end
35
32
 
36
33
  view :editor, mod: Html::HtmlFormat
37
34
 
38
- view :core do |args|
39
- # FIXME: scan must happen before process for inclusion interactions to work, but this will likely cause
35
+ view :core do |_args|
36
+ # FIXME: scan must happen before process for inclusion interactions to
37
+ # work, but this will likely cause
40
38
  # problems with including other css?
41
- process_content ::CodeRay.scan( _render_raw, :css ).div, content_opts: {size: :icon}
39
+ process_content ::CodeRay.scan(_render_raw, :css).div,
40
+ content_opts: { size: :icon }
42
41
  end
43
42
 
44
43
  view :content_changes, mod: CoffeeScript::HtmlFormat
45
44
  end
46
45
 
47
46
  def diff_args
48
- {format: :text}
47
+ { format: :text }
49
48
  end
@@ -4,7 +4,7 @@ require 'uglifier'
4
4
  include Machine
5
5
  include MachineInput
6
6
 
7
- store_machine_output filetype: "js"
7
+ store_machine_output filetype: 'js'
8
8
 
9
9
  machine_input do
10
10
  Uglifier.compile(format(:js)._render_core)
@@ -14,10 +14,9 @@ def clean_html?
14
14
  false
15
15
  end
16
16
 
17
-
18
17
  format do
19
- def chunk_list #turn off autodetection of uri's
20
- :inclusion_only
18
+ def chunk_list # turn off autodetection of uri's
19
+ :nest_only
21
20
  end
22
21
  end
23
22
 
@@ -25,13 +24,12 @@ format :html do
25
24
  view :editor, mod: Html::HtmlFormat
26
25
  view :content_changes, mod: CoffeeScript::HtmlFormat
27
26
 
28
- view :core do |args|
29
- highlighted_js = ::CodeRay.scan( _render_raw, :js ).div
27
+ view :core do |_args|
28
+ highlighted_js = ::CodeRay.scan(_render_raw, :js).div
30
29
  process_content highlighted_js
31
30
  end
32
-
33
31
  end
34
32
 
35
33
  def diff_args
36
- {format: :text}
34
+ { format: :text }
37
35
  end
@@ -1,22 +1,21 @@
1
1
  include Type::Css
2
2
 
3
3
  def diff_args
4
- {format: :text}
4
+ { format: :text }
5
5
  end
6
6
 
7
7
  format do
8
8
  include Css::Format
9
9
 
10
- view :core do |args|
10
+ view :core do |_args|
11
11
  compile_scss(process_content _render_raw)
12
12
  end
13
13
 
14
14
  def compile_scss scss, style=:expanded
15
15
  Sass.compile scss, style: style
16
- rescue =>e
16
+ rescue => e
17
17
  e
18
18
  end
19
-
20
19
  end
21
20
 
22
- format( :html ) { include Css::HtmlFormat }
21
+ format(:html) { include Css::HtmlFormat }
@@ -1,12 +1,9 @@
1
1
  include Machine
2
2
  include MachineInput
3
3
 
4
- store_machine_output filetype: "css"
4
+ store_machine_output filetype: 'css'
5
5
 
6
6
  include Pointer
7
- format() { include Pointer::Format }
7
+ format { include Pointer::Format }
8
8
  format(:html) { include Pointer::HtmlFormat }
9
- format(:css ) { include Pointer::CssFormat }
10
-
11
-
12
-
9
+ format(:css) { include Pointer::CssFormat }
@@ -7,15 +7,14 @@ end
7
7
  def method_missing m, *args, &block
8
8
  case m
9
9
  when /that_produces_(.+)/
10
- return $1
10
+ return Regexp.last_match(1)
11
11
  else
12
12
  super
13
13
  end
14
14
  end
15
15
 
16
-
17
16
  shared_examples_for 'machine' do |filetype|
18
- context "machine is run" do
17
+ context 'machine is run' do
19
18
  before do
20
19
  machine.update_machine_output
21
20
  end
@@ -33,15 +32,12 @@ shared_examples_for 'machine' do |filetype|
33
32
  end
34
33
 
35
34
  shared_examples_for 'content machine' do |filetype|
36
-
37
35
  it_should_behave_like 'machine', that_produces(filetype) do
38
36
  let(:machine) { machine_card }
39
37
  end
40
38
 
41
39
  context '+machine_input card' do
42
-
43
-
44
- it "points to self" do
40
+ it 'points to self' do
45
41
  Card::Auth.as_bot do
46
42
  machine_card.update_input_card
47
43
  end
@@ -63,24 +59,21 @@ shared_examples_for 'content machine' do |filetype|
63
59
  end
64
60
  end
65
61
 
66
-
67
62
  shared_examples_for 'pointer machine' do |filetype|
68
63
  subject do
69
- =begin
70
- We build the following structure:
71
-
72
- #{machine_card}
73
- |- expected_input_items (passed by the calling test if it prepopulates the machine_card with some additional items)
74
- |_ level 0 #{filetype}
75
- |- level 1 basic 1
76
- |- level 1 #{filetype}
77
- | |- level 2 basic 1
78
- | |- level 2 #{filetype}
79
- | | |_ ....
80
- | |_ level 2 basic 2
81
- |_ level 1 basic 2
82
-
83
- =end
64
+ # We build the following structure:
65
+ #
66
+ # #{machine_card}
67
+ # |- expected_input_items (passed by the calling test if it prepopulates the machine_card with some additional items)
68
+ # |_ level 0 #{filetype}
69
+ # |- level 1 basic 1
70
+ # |- level 1 #{filetype}
71
+ # | |- level 2 basic 1
72
+ # | |- level 2 #{filetype}
73
+ # | | |_ ....
74
+ # | |_ level 2 basic 2
75
+ # |_ level 1 basic 2
76
+ #
84
77
 
85
78
  change_machine = machine_card
86
79
  @depth = 2
@@ -89,24 +82,24 @@ We build the following structure:
89
82
  start = @expected_items.size
90
83
  Card::Auth.as_bot do
91
84
  @depth.times do |i|
92
- @leaf_items << Card.fetch( "level #{i} basic 1", new: {type: Card::BasicID } )
85
+ @leaf_items << Card.fetch("level #{i} basic 1", new: { type: Card::BasicID })
93
86
  @leaf_items.last.save
94
- @leaf_items << Card.fetch( "level #{i} basic 2", new: {type: Card::BasicID } )
87
+ @leaf_items << Card.fetch("level #{i} basic 2", new: { type: Card::BasicID })
95
88
  @leaf_items.last.save
96
89
  end
97
90
 
98
91
  # we build the tree from bottom up
99
92
  last_level = false
100
- (@depth-1).downto(0) do |i|
101
- next_level = Card.fetch( "level #{i} #{filetype} ", new: {type: :pointer } )
102
- next_level.content = ""
103
- next_level << @leaf_items[i*2]
93
+ (@depth - 1).downto(0) do |i|
94
+ next_level = Card.fetch("level #{i} #{filetype} ", new: { type: :pointer })
95
+ next_level.content = ''
96
+ next_level << @leaf_items[i * 2]
104
97
  next_level << last_level if last_level
105
- next_level << @leaf_items[i*2+1]
98
+ next_level << @leaf_items[i * 2 + 1]
106
99
  next_level.save!
107
- @expected_items.insert(start, @leaf_items[i*2])
108
- @expected_items.insert(start+1, last_level) if last_level
109
- @expected_items << @leaf_items[i*2+1]
100
+ @expected_items.insert(start, @leaf_items[i * 2])
101
+ @expected_items.insert(start + 1, last_level) if last_level
102
+ @expected_items << @leaf_items[i * 2 + 1]
110
103
  last_level = next_level
111
104
  end
112
105
  change_machine << last_level
@@ -129,11 +122,11 @@ We build the following structure:
129
122
  end
130
123
  end
131
124
 
132
- it "contains items of all levels" do
125
+ it 'contains items of all levels' do
133
126
  expect(subject.machine_input_card.item_cards.map(&:id).sort).to eq(@expected_items.map(&:id).sort)
134
127
  end
135
128
 
136
- it "preserves order of items" do
129
+ it 'preserves order of items' do
137
130
  expect(subject.machine_input_card.item_cards.map(&:id)).to eq(@expected_items.map(&:id))
138
131
  end
139
132
  end
@@ -152,7 +145,7 @@ We build the following structure:
152
145
 
153
146
  it 'updates #{filetype} file if item is added' do
154
147
  Card::Auth.as_bot do
155
- ca = Card.gimme! "pointer item", type: Card::SkinID, content: ''
148
+ ca = Card.gimme! 'pointer item', type: Card::SkinID, content: ''
156
149
  subject.items = [ca]
157
150
  ca << another_machine_input_card
158
151
  ca.save!
@@ -164,9 +157,9 @@ We build the following structure:
164
157
  context 'a non-existent card was added as item and now created' do
165
158
  it 'updates #{filetype} file' do
166
159
  Card::Auth.as_bot do
167
- subject.content = "[[non-existent input]]"
160
+ subject.content = '[[non-existent input]]'
168
161
  subject.save!
169
- ca = Card.gimme! "non-existent input", type: input_type, content: card_content[:changed_in]
162
+ ca = Card.gimme! 'non-existent input', type: input_type, content: card_content[:changed_in]
170
163
  ca.save!
171
164
  changed_path = subject.machine_output_path
172
165
  expect(File.read(changed_path)).to eq(card_content[:changed_out])