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
data/lib/card/core_ext.rb CHANGED
@@ -2,31 +2,31 @@ class Object
2
2
  # FIXME: move this, mixin, don't extend Object
3
3
  def deep_clone
4
4
  case self
5
- when Fixnum,Bignum,Float,NilClass,FalseClass,TrueClass,Symbol
5
+ when Fixnum, Bignum, Float, NilClass, FalseClass, TrueClass, Symbol
6
6
  klone = self
7
7
  when Hash
8
- klone = self.clone
9
- self.each{|k,v| klone[k] = v.deep_clone}
8
+ klone = clone
9
+ each { |k, v| klone[k] = v.deep_clone }
10
10
  when Array
11
- klone = self.clone
11
+ klone = clone
12
12
  klone.clear
13
- self.each{|v| klone << v.deep_clone}
13
+ each { |v| klone << v.deep_clone }
14
14
  else
15
- klone = self.clone
15
+ klone = clone
16
16
  end
17
- klone.instance_variables.each {|v|
17
+ klone.instance_variables.each do |v|
18
18
  klone.instance_variable_set(v,
19
- klone.instance_variable_get(v).deep_clone)
20
- }
19
+ klone.instance_variable_get(v).deep_clone)
20
+ end
21
21
  klone
22
22
  end
23
23
 
24
- def send_unless method, *args, &block
25
- ( block_given? ? yield : self ) or send method, *args
24
+ def send_unless method, *args, &_block
25
+ (block_given? ? yield : self) || send(method, *args)
26
26
  end
27
27
 
28
- def send_if method, *args, &block
29
- ( block_given? ? yield : self ) and send method, *args
28
+ def send_if method, *args, &_block
29
+ (block_given? ? yield : self) && send(method, *args)
30
30
  end
31
31
 
32
32
  def to_name
@@ -38,29 +38,23 @@ class Object
38
38
  end
39
39
  end
40
40
 
41
-
42
-
43
41
  class Module
44
42
  RUBY_VERSION_18 = !!(RUBY_VERSION =~ /^1\.8/)
45
43
 
46
44
  def const_get_if_defined const
47
- args = RUBY_VERSION_18 ? [ const ] : [ const, false ]
48
- if const_defined? *args
49
- const_get *args
50
- end
45
+ args = RUBY_VERSION_18 ? [const] : [const, false]
46
+ const_get *args if const_defined? *args
51
47
  end
52
48
 
53
49
  def const_get_or_set const
54
- const_get_if_defined const or const_set const, yield
50
+ const_get_if_defined(const) || const_set(const, yield)
55
51
  end
56
52
  end
57
53
 
58
-
59
-
60
54
  class Hash
61
55
  # FIXME: this is too ugly and narrow for a core extension.
62
56
  class << self
63
- def new_from_semicolon_attr_list(attr_string)
57
+ def new_from_semicolon_attr_list attr_string
64
58
  return {} if attr_string.blank?
65
59
  attr_string.strip.split(';').inject({}) do |result, pair|
66
60
  value, key = pair.split(':').reverse
@@ -71,22 +65,20 @@ class Hash
71
65
  end
72
66
  end
73
67
  end
74
-
75
68
  end
76
69
 
77
-
78
70
  class Kaminari::Helpers::Tag
79
71
  def page_url_for page
80
72
  p = params_for(page)
81
73
  p.delete :controller
82
74
  p.delete :action
83
75
  card = Card[p.delete('id')]
84
- card.format.path p
76
+ card.format.path p
85
77
  end
86
78
 
87
79
  private
88
80
 
89
- def params_for(page)
81
+ def params_for page
90
82
  page_params = Rack::Utils.parse_nested_query("#{@param_name}=#{page}")
91
83
  page_params = @params.with_indifferent_access.deep_merge(page_params)
92
84
 
@@ -99,11 +91,9 @@ class Kaminari::Helpers::Tag
99
91
  # from: {other: "params", user: {name: "yuki", page: 1}}
100
92
  # to: {other: "params", user: {name: "yuki", page: nil}}
101
93
  # (when @param_name == "user[page]")
102
- @param_name.to_s.scan(/\w+/)[0..-2].inject(page_params){|h, k| h[k] }[$&] = nil
94
+ @param_name.to_s.scan(/\w+/)[0..-2].inject(page_params) { |h, k| h[k] }[$&] = nil
103
95
  end
104
96
 
105
97
  page_params
106
98
  end
107
99
  end
108
-
109
-
data/lib/card/diff.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  module Card::Diff
4
-
5
4
  def self.complete a, b, opts={}
6
5
  DiffBuilder.new(a, b, opts).complete
7
6
  end
@@ -14,7 +13,7 @@ module Card::Diff
14
13
  "<ins class='diffins diff-green'>#{text}</ins>"
15
14
  end
16
15
 
17
- def self.render_deleted_chunk text, count=true
16
+ def self.render_deleted_chunk text, _count=true
18
17
  "<del class='diffdel diff-red'>#{text}</del>"
19
18
  end
20
19
 
@@ -40,7 +39,7 @@ module Card::Diff
40
39
  #
41
40
  # summary: {length: <number> , joint: <string> }
42
41
 
43
- def initialize(old_version, new_version, opts={})
42
+ def initialize old_version, new_version, opts={}
44
43
  @new_version = new_version
45
44
  @old_version = old_version
46
45
  @lcs_opts = lcs_opts_for_format opts[:format]
@@ -48,7 +47,7 @@ module Card::Diff
48
47
  @dels_cnt = 0
49
48
  @adds_cnt = 0
50
49
 
51
- if not @new_version
50
+ if !@new_version
52
51
  @complete = ''
53
52
  @summary = ''
54
53
  else
@@ -71,17 +70,11 @@ module Card::Diff
71
70
  opts[:exclude] = /^</
72
71
  when :text
73
72
  opts[:reject] = /^</
74
- opts[:postprocess] = Proc.new do |word|
75
- word.gsub("\n",'<br>')
76
- end
73
+ opts[:postprocess] = proc { |word| word.gsub("\n", '<br>') }
77
74
  when :pointer
78
- opts[:preprocess] = Proc.new do |word|
79
- word.gsub('[[','').gsub(']]','')
80
- end
81
- else #:raw
82
- opts[:preprocess] = Proc.new do |word|
83
- CGI::escapeHTML(word)
84
- end
75
+ opts[:preprocess] = proc { |word| word.gsub('[[', '').gsub(']]', '') }
76
+ else # :raw
77
+ opts[:preprocess] = proc { |word| CGI.escapeHTML(word) }
85
78
  end
86
79
  opts
87
80
  end
@@ -94,14 +87,17 @@ module Card::Diff
94
87
  @adds_cnt = @lcs.adds_cnt
95
88
  end
96
89
 
97
-
98
90
  class LCS
99
91
  attr_reader :adds_cnt, :dels_cnt
100
- def initialize old_text, new_text, opts, summary=nil
101
- @reject_pattern = opts[:reject] # regex; remove match completely from diff
102
- @exclude_pattern = opts[:exclude] # regex; put back to the result after diff
103
- @preprocess = opts[:preprocess] # block; called with every word
104
- @postprocess = opts[:postprocess] # block; called with complete diff
92
+ def initialize old_text, new_text, opts, _summary=nil
93
+ # regex; remove match completely from diff
94
+ @reject_pattern = opts[:reject]
95
+
96
+ # regex; put back to the result after diff
97
+ @exclude_pattern = opts[:exclude]
98
+
99
+ @preprocess = opts[:preprocess] # block; called with every word
100
+ @postprocess = opts[:postprocess] # block; called with complete diff
105
101
 
106
102
  @adds_cnt = 0
107
103
  @dels_cnt = 0
@@ -109,10 +105,10 @@ module Card::Diff
109
105
  @splitters = %w( <[^>]+> \[\[[^\]]+\]\] \{\{[^}]+\}\} \s+ )
110
106
  @disjunction_pattern = /^\s/
111
107
  @summary ||= Summary.new opts[:summary]
112
- if not old_text
108
+ if !old_text
113
109
  list = split_and_preprocess(new_text)
114
110
  if @exclude_pattern
115
- list = list.reject{ |word| word.match @exclude_pattern }
111
+ list = list.reject { |word| word.match @exclude_pattern }
116
112
  end
117
113
  text = postprocess list.join
118
114
  @result = added_chunk text
@@ -153,17 +149,18 @@ module Card::Diff
153
149
  def run_diff
154
150
  prev_action = nil
155
151
  ::Diff::LCS.traverse_balanced(@words[:old], @words[:new]) do |word|
156
-
157
152
  if prev_action
158
- if prev_action != word.action and
159
- !(prev_action == '-' and word.action == '!') and
160
- !(prev_action == '!' and word.action == '+')
153
+ if prev_action != word.action &&
154
+ !(prev_action == '-' && word.action == '!') &&
155
+ !(prev_action == '!' && word.action == '+')
161
156
 
162
157
  # delete and/or add section stops here; write changes to result
163
158
  write_dels
164
159
  write_adds
165
160
 
166
- write_excludees # new neutral section starts, we can just write excludees to result
161
+ # new neutral section starts
162
+ # we can just write excludees to result
163
+ write_excludees
167
164
 
168
165
  else # current word belongs to edit of previous word
169
166
  case word.action
@@ -192,7 +189,6 @@ module Card::Diff
192
189
  @result = postprocess @result
193
190
  end
194
191
 
195
-
196
192
  def added_chunk text, count=true
197
193
  @adds_cnt += 1 if count
198
194
  Card::Diff.render_added_chunk text
@@ -203,14 +199,13 @@ module Card::Diff
203
199
  Card::Diff.render_deleted_chunk text
204
200
  end
205
201
 
206
-
207
202
  def write_unchanged text
208
203
  @result << text
209
204
  @summary.omit
210
205
  end
211
206
 
212
207
  def write_dels
213
- if !@dels.empty?
208
+ unless @dels.empty?
214
209
  @result << deleted_chunk(@dels.join)
215
210
  @summary.delete @dels.join
216
211
  @dels = []
@@ -218,7 +213,7 @@ module Card::Diff
218
213
  end
219
214
 
220
215
  def write_adds
221
- if !@adds.empty?
216
+ unless @adds.empty?
222
217
  @result << added_chunk(@adds.join)
223
218
  @summary.add @adds.join
224
219
  @adds = []
@@ -226,13 +221,13 @@ module Card::Diff
226
221
  end
227
222
 
228
223
  def write_excludees
229
- while ex = @excludees[:new].next
224
+ while (ex = @excludees[:new].next)
230
225
  @result << ex[:element]
231
226
  end
232
227
  end
233
228
 
234
229
  def del_old_excludees
235
- while ex = @excludees[:old].next
230
+ while (ex = @excludees[:old].next)
236
231
  if ex[:type] == :disjunction
237
232
  @dels << ex[:element]
238
233
  else
@@ -243,7 +238,7 @@ module Card::Diff
243
238
  end
244
239
 
245
240
  def add_new_excludees
246
- while ex = @excludees[:new].next
241
+ while (ex = @excludees[:new].next)
247
242
  if ex[:type] == :disjunction
248
243
  @adds << ex[:element]
249
244
  else
@@ -260,47 +255,59 @@ module Card::Diff
260
255
  def process_element old_element, new_element, action
261
256
  case action
262
257
  when '-'
263
- @dels << old_element
264
- @excludees[:old].word_step
258
+ minus old_element
265
259
  when '+'
266
- @adds << new_element
267
- @excludees[:new].word_step
260
+ plus new_element
268
261
  when '!'
269
- @dels << old_element
270
- @adds << new_element
271
- @excludees[:old].word_step
272
- @excludees[:new].word_step
262
+ minus old_element
263
+ plus new_element
273
264
  else
274
265
  write_unchanged new_element
275
266
  @excludees[:new].word_step
276
267
  end
277
268
  end
278
269
 
270
+ def plus new_element
271
+ @adds << new_element
272
+ @excludees[:new].word_step
273
+ end
274
+
275
+ def minus old_element
276
+ @dels << old_element
277
+ @excludees[:old].word_step
278
+ end
279
+
279
280
  def separate_comparables_from_excludees text
280
- # return two arrays, one with all words, one with pairs (index in word list, html_tag)
281
+ # return two arrays, one with all words, one with pairs
282
+ # (index in word list, html_tag)
281
283
  list = split_and_preprocess text
282
284
  if @exclude_pattern
283
- list.each_with_index.inject([[],[]]) do |res, pair|
284
- element, index = pair
285
- if element.match @disjunction_pattern
286
- res[1] << {chunk_index: index, element: element, type: :disjunction}
287
- elsif element.match @exclude_pattern
288
- res[1] << {chunk_index: index, element: element, type: :excludee}
289
- else
290
- res[0] << element
291
- end
292
- res
293
- end
285
+ check_exclude_and_disjunction_pattern list
294
286
  else
295
287
  [list, []]
296
288
  end
297
289
  end
298
290
 
291
+ def check_exclude_and_disjunction_pattern list
292
+ list.each_with_index.each_with_object([[], []]) do |pair, res|
293
+ element, index = pair
294
+ if element.match @disjunction_pattern
295
+ res[1] << { chunk_index: index, element: element,
296
+ type: :disjunction }
297
+ elsif element.match @exclude_pattern
298
+ res[1] << { chunk_index: index, element: element, type:
299
+ :excludee }
300
+ else
301
+ res[0] << element
302
+ end
303
+ end
304
+ end
305
+
299
306
  def split_and_preprocess text
300
307
  splitted = split_to_list_of_words(text).select do |s|
301
- s.size > 0 and (!@reject_pattern or !s.match @reject_pattern)
308
+ !s.empty? && (!@reject_pattern || !s.match(@reject_pattern))
302
309
  end
303
- @preprocess ? splitted.map {|s| @preprocess.call(s) } : splitted
310
+ @preprocess ? splitted.map { |s| @preprocess.call(s) } : splitted
304
311
  end
305
312
 
306
313
  def split_to_list_of_words text
@@ -324,7 +331,6 @@ module Card::Diff
324
331
  end
325
332
  end
326
333
 
327
-
328
334
  class Summary
329
335
  def initialize opts
330
336
  opts ||= {}
@@ -348,7 +354,7 @@ module Card::Diff
348
354
  end
349
355
 
350
356
  def omit
351
- if @chunks.empty? or @chunks.last[:action] != :ellipsis
357
+ if @chunks.empty? || @chunks.last[:action] != :ellipsis
352
358
  add_chunk @joint, :ellipsis
353
359
  end
354
360
  end
@@ -357,7 +363,7 @@ module Card::Diff
357
363
 
358
364
  def add_chunk text, action
359
365
  if @remaining_chars > 0
360
- @chunks << {action: action, text: text}
366
+ @chunks << { action: action, text: text }
361
367
  @remaining_chars -= text.size
362
368
  end
363
369
  end
@@ -365,7 +371,7 @@ module Card::Diff
365
371
  def render_chunks
366
372
  truncate_overlap
367
373
  @chunks.map do |chunk|
368
- Card::Diff.render_chunk chunk[:action], chunk[:text]
374
+ Card::Diff.render_chunk chunk[:action], chunk[:text]
369
375
  end.join
370
376
  end
371
377
 
@@ -377,20 +383,12 @@ module Card::Diff
377
383
  end
378
384
 
379
385
  index = @chunks.size - 1
380
- while @remaining_chars < @joint.size and index >= 0
381
- if @remaining_chars + @chunks[index][:text].size == @joint.size # d
382
- @chunks.pop
383
- if index-1 >= 0
384
- if @chunks[index-1][:action] == :added
385
- @chunks << {action: :ellipsis, text: @joint}
386
- elsif @chunks[index-1][:action] == :deleted
387
- @chunks << {action: :added, text: @joint}
388
- end
389
- end
386
+ while @remaining_chars < @joint.size && index >= 0
387
+ if @remaining_chars + @chunks[index][:text].size == @joint.size
388
+ replace_with_joint index
390
389
  break
391
390
  elsif @remaining_chars + @chunks[index][:text].size > @joint.size
392
- @chunks[index][:text] = @chunks[index][:text][0..(@remaining_chars-@joint.size-1)]
393
- @chunks[index][:text] += @joint
391
+ cut_with_joint index
394
392
  break
395
393
  else
396
394
  @remaining_chars += @chunks[index][:text].size
@@ -401,6 +399,22 @@ module Card::Diff
401
399
  end
402
400
  end
403
401
 
402
+ def cut_with_joint index
403
+ @chunks[index][:text] =
404
+ @chunks[index][:text][0..(@remaining_chars - @joint.size - 1)]
405
+ @chunks[index][:text] += @joint
406
+ end
407
+
408
+ def replace_with_joint index
409
+ @chunks.pop
410
+ if index - 1 >= 0
411
+ if @chunks[index - 1][:action] == :added
412
+ @chunks << { action: :ellipsis, text: @joint }
413
+ elsif @chunks[index - 1][:action] == :deleted
414
+ @chunks << { action: :added, text: @joint }
415
+ end
416
+ end
417
+ end
404
418
  end
405
419
 
406
420
  class ExcludeeIterator
@@ -415,16 +429,14 @@ module Card::Diff
415
429
  end
416
430
 
417
431
  def next
418
- if @index < @list.size and @list[@index][:chunk_index] == @chunk_index
432
+ if @index < @list.size && @list[@index][:chunk_index] == @chunk_index
419
433
  res = @list[@index]
420
434
  @index += 1
421
- @chunk_index +=1
435
+ @chunk_index += 1
422
436
  res
423
437
  end
424
438
  end
425
439
  end
426
-
427
440
  end
428
441
  end
429
442
  end
430
-