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
@@ -3,12 +3,12 @@ describe Card::Set::All::Links do
3
3
  require 'card'
4
4
  describe '#web_link' do
5
5
  it 'opens external link in new tab' do
6
- link = Card['Home'].format.web_link("http://example.com")
6
+ link = Card['Home'].format.web_link('http://example.com')
7
7
  assert_view_select link, 'a[class="external-link"][target="_blank"][href="http://example.com"]'
8
8
  end
9
9
 
10
10
  it 'opens interal link in same tab' do
11
- link = Card['Home'].format.web_link("/Home")
11
+ link = Card['Home'].format.web_link('/Home')
12
12
  assert_view_select link, 'a[target="_blank"]', false
13
13
  end
14
14
  end
@@ -5,7 +5,6 @@ describe Card::Set::All::RichHtml::Editing do
5
5
  @mycard = Card['A'].format
6
6
  end
7
7
 
8
-
9
8
  def assert_active_toolbar_pill view, content, related_view=false
10
9
  view_selector = related_view ? 'related' : view
11
10
  assert_view_select @mycard.render(view), "div[class~='card-slot #{view_selector}-view']" do
@@ -1,43 +1,43 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::All::RichHtml::Form do
4
- describe "type_list" do
4
+ describe 'type_list' do
5
5
  before do
6
6
  @card = Card['UserForm'] # no cards with this type
7
7
  end
8
8
 
9
- it "should get type options from type_field renderer method" do
9
+ it 'should get type options from type_field renderer method' do
10
10
  expect(@card.format.type_field).to match(/<option [^>]*selected/)
11
- tf=@card.format.type_field(no_current_type: true)
11
+ tf = @card.format.type_field(no_current_type: true)
12
12
  expect(tf).not_to match(/<option [^>]*selected/)
13
13
  expect(tf.scan(/<option /).length).to eq(29)
14
- tf=@card.format.type_field
14
+ tf = @card.format.type_field
15
15
  expect(tf).to match(/<option [^>]*selected/)
16
16
  expect(tf.scan(/<option /).length).to eq(29)
17
17
  end
18
18
 
19
- it "should get type list" do
19
+ it 'should get type list' do
20
20
  Card::Auth.as :anonymous do
21
- tf=@card.format.type_field(no_current_type: true)
21
+ tf = @card.format.type_field(no_current_type: true)
22
22
  expect(tf).not_to match(/<option [^>]*selected/)
23
23
  expect(tf.scan(/<option /).length).to eq(1)
24
- tf=@card.format.type_field
24
+ tf = @card.format.type_field
25
25
  expect(tf).to match(/<option [^>]*selected/)
26
26
  expect(tf.scan(/<option /).length).to eq(2)
27
27
  end
28
28
  end
29
29
  end
30
30
 
31
- context "type and header" do
32
- it "should render type without no-edit class when no cards of type" do
31
+ context 'type and header' do
32
+ it 'should render type without no-edit class when no cards of type' do
33
33
  card = Card['UserForm'] # no cards with this type
34
34
  expect(card.format.render_type).to match(/<a[^>]* class="([^"]*)?\bcardtype\b[^"]*"/)
35
35
  expect(card.format.render_type).not_to match(/<a[^>]* class="([^"]*)?\bno-edit\b[^"]*"/)
36
36
  end
37
- it "should render type header with no-edit class when cards of type exist" do
37
+ it 'should render type header with no-edit class when cards of type exist' do
38
38
  no_edit_card = Card['cardtype a']
39
39
  expect(no_edit_card.format.render_type).to match(/<a[^>]* class="([^"]*)?\bcardtype\b[^"]*"/)
40
40
  expect(no_edit_card.format.render_type).to match(/<a[^>]* class="([^"]*)?\bno-edit\b[^"]*"/)
41
41
  end
42
42
  end
43
- end
43
+ end
@@ -1,12 +1,12 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::All::RichHtml::Wrapper do
4
- context "full wrapping" do
4
+ context 'full wrapping' do
5
5
  before do
6
6
  @ocslot = Card['A'].format
7
7
  end
8
8
 
9
- it "has the appropriate attributes on open" do
9
+ it 'has the appropriate attributes on open' do
10
10
  assert_view_select @ocslot.render(:open), 'div[class="card-slot open-view ALL TYPE-basic SELF-a"]' do
11
11
  assert_select 'div[class="card-frame panel panel-default"]' do
12
12
  assert_select 'div[class="card-header panel-heading"]' do
@@ -17,7 +17,7 @@ describe Card::Set::All::RichHtml::Wrapper do
17
17
  end
18
18
  end
19
19
 
20
- it "has the appropriate attributes on closed" do
20
+ it 'has the appropriate attributes on closed' do
21
21
  v = @ocslot.render(:closed)
22
22
  assert_view_select v, 'div[class="card-slot closed-view ALL TYPE-basic SELF-a"]' do
23
23
  assert_select 'div[class="card-frame panel panel-default"]' do
@@ -29,4 +29,4 @@ describe Card::Set::All::RichHtml::Wrapper do
29
29
  end
30
30
  end
31
31
  end
32
- end
32
+ end
@@ -1,7 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Right::Email do
4
-
5
4
  context '<User>+*email' do
6
5
  before do
7
6
  @card = Card.fetch 'u1+*email'
@@ -26,7 +25,7 @@ describe Card::Set::Right::Email do
26
25
  end
27
26
  end
28
27
 
29
- context "+*account+*email" do
28
+ context '+*account+*email' do
30
29
  context 'update' do
31
30
  before :each do
32
31
  @email_card = email_card = Card['u1'].account.email_card
@@ -48,8 +47,6 @@ describe Card::Set::Right::Email do
48
47
  @email_card.update_attributes content: 'joe@user.com'
49
48
  expect(@email_card.errors[:content].first).to match(/must be unique/)
50
49
  end
51
-
52
50
  end
53
51
  end
54
-
55
52
  end
@@ -1,9 +1,8 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Right::Password do
4
-
5
4
  before :each do
6
- @account = Card::Auth[ 'joe@user.com' ]
5
+ @account = Card::Auth['joe@user.com']
7
6
  end
8
7
 
9
8
  describe '#update_attributes' do
@@ -28,17 +27,15 @@ describe Card::Set::Right::Password do
28
27
  pw_card = acct.password_card
29
28
  pw_card.content = ''
30
29
  pw_card.save
31
- expect(original_pw).to eq(pw_card.refresh(force=true).content)
30
+ expect(original_pw).to eq(pw_card.refresh(_force = true).content)
32
31
  end
33
32
 
34
33
  it "shouldn't break email editing" do
35
- @account.update_attributes! subcards: {'+*password'=>'', '+*email'=>'joe2@user.com'}
34
+ @account.update_attributes! subcards: { '+*password' => '',
35
+ '+*email' => 'joe2@user.com' }
36
36
  expect(@account.email).to eq('joe2@user.com')
37
37
  expect(@account.password).not_to be_empty
38
38
  end
39
39
  end
40
40
  end
41
-
42
-
43
-
44
41
  end
@@ -1,11 +1,10 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Right::Stats do
4
-
5
- context "core view" do
4
+ context 'core view' do
6
5
  it 'should have a table' do
7
6
  Card::Auth.as_bot do
8
- @core = render_card :core, name: "A+*stats"
7
+ @core = render_card :core, name: 'A+*stats'
9
8
  assert_view_select @core, 'table'
10
9
  end
11
10
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  describe Card::Set::Right::WhenCreated do
4
4
  it 'should produce a text date' do
5
- expect(render_card( :core, name: 'A+*when created' )).to match(/\w+ \d+/)
5
+ expect(render_card(:core, name: 'A+*when created')).to match(/\w+ \d+/)
6
6
  end
7
7
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  describe Card::Set::Right::WhenLastEdited do
4
4
  it 'should produce a text date' do
5
- expect(render_card( :core, name: 'A+*when last edited' )).to match(/\w+ \d+/)
5
+ expect(render_card(:core, name: 'A+*when last edited')).to match(/\w+ \d+/)
6
6
  end
7
7
  end
@@ -1,22 +1,22 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Rstar::Rules do
4
- it "should render setting view for a right set" do
5
- r = Card['*read+*right'].format.render_open
4
+ it 'should render setting view for a right set' do
5
+ r = Card['*read+*right'].format.render_open
6
6
  expect(r).not_to match(/error/i)
7
7
  expect(r).not_to match('No Card!')
8
- #warn "r = #{r}"
8
+ # warn "r = #{r}"
9
9
  assert_view_select r, 'table[class="set-rules table"]' do
10
10
  assert_select 'a[href~="/*read+*right+*read?view=open_rule"]', text: 'read'
11
11
  end
12
12
  end
13
13
 
14
- it "should render setting view for a *input rule" do
14
+ it 'should render setting view for a *input rule' do
15
15
  Card::Auth.as_bot do
16
- r = Card.fetch('*read+*right+*input',new: {}).format.render_open_rule
16
+ r = Card.fetch('*read+*right+*input', new: {}).format.render_open_rule
17
17
  expect(r).not_to match(/error/i)
18
18
  expect(r).not_to match('No Card!')
19
- #warn "r = #{r}"
19
+ # warn "r = #{r}"
20
20
  assert_view_select r, 'tr[class="card-slot open-rule edit-rule"]' do
21
21
  assert_select 'input[id="success_id"][name=?][type="hidden"][value="*read+*right+*input"]', 'success[id]'
22
22
  end
@@ -28,18 +28,16 @@ describe Card::Set::Self::All do
28
28
  end
29
29
  end
30
30
 
31
- =begin
32
- it 'should be trigger reference repair' do
33
- Card::Auth.as_bot do
34
- a = Card['A']
35
- puts a.references_out.count
36
- Card::Env.params[:task] = :repair_references
37
- puts a.references_out.count
38
- @all.update_attributes({})
39
- puts a.references_out.count
40
-
41
- end
42
- end
43
- =end
31
+ # it 'should be trigger reference repair' do
32
+ # Card::Auth.as_bot do
33
+ # a = Card['A']
34
+ # puts a.references_out.count
35
+ # Card::Env.params[:task] = :repair_references
36
+ # puts a.references_out.count
37
+ # @all.update_attributes({})
38
+ # puts a.references_out.count
39
+ #
40
+ # end
41
+ # end
44
42
  end
45
43
  end
@@ -1,7 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Self::Head do
4
- it "should have a javascript tag" do
4
+ it 'should have a javascript tag' do
5
5
  assert_view_select render_card(:raw, name: '*head'), 'script[type="text/javascript"]'
6
6
  end
7
7
 
@@ -10,8 +10,6 @@ describe Card::Set::Self::Head do
10
10
  @tinyMCE = Card[:tiny_mce]
11
11
  end
12
12
  it 'should handle tinyMCE configuration errors' do
13
-
14
13
  end
15
14
  end
16
-
17
15
  end
@@ -1,7 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Self::Navbox do
4
- it "should have a form" do
4
+ it 'should have a form' do
5
5
  assert_view_select render_card(:core, name: '*navbox'), 'form.navbox-form input.navbox'
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Self::Now do
4
- it "should have a date" do
5
- expect(render_card(:raw, name: '*now').match(/\w+day, \w+ \d+, \d{4}/ )).not_to be_nil
4
+ it 'should have a date' do
5
+ expect(render_card(:raw, name: '*now').match(/\w+day, \w+ \d+, \d{4}/)).not_to be_nil
6
6
  end
7
7
  end
@@ -31,7 +31,7 @@ describe Card::Set::Self::Signin do
31
31
  end
32
32
 
33
33
  context '#update' do
34
- it 'triggerk signin with valid credentials' do
34
+ it 'triggers signin with valid credentials' do
35
35
  @card.update_attributes! '+*email' => 'joe@admin.com',
36
36
  '+*password' => 'joe_pass'
37
37
  expect(Card::Auth.current).to eq(Card['joe admin'])
@@ -6,7 +6,7 @@ describe Card::Set::Self::Stats do
6
6
  @core = render_card :core, name: :stats
7
7
  end
8
8
  end
9
- it "should render a table" do
9
+ it 'should render a table' do
10
10
  assert_view_select @core, 'table'
11
11
  end
12
12
  end
@@ -1,7 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Self::Version do
4
- it "should have an X.X.X version" do
5
- expect(render_card(:raw, name: '*version') =~ (/\d\.\d+\.\w+/ )).to be_truthy
4
+ it 'should have an X.X.X version' do
5
+ expect(render_card(:raw, name: '*version') =~ /\d\.\d+\.\w+/).to be_truthy
6
6
  end
7
7
  end
@@ -3,17 +3,16 @@
3
3
  describe Card::Set::Type::Cardtype do
4
4
  describe 'add_button view' do
5
5
  it 'creates link with correct path' do
6
- add_link = render_content "{{Basic|add_button}}"
6
+ add_link = render_content '{{Basic|add_button}}'
7
7
  assert_view_select add_link, 'a[href="/new/Basic"]', 'Add Basic'
8
8
  end
9
9
  it 'handles title argument' do
10
- add_link = render_content "{{Basic|add_button;title: custom link text}}"
10
+ add_link = render_content '{{Basic|add_button;title: custom link text}}'
11
11
  assert_view_select add_link, 'a[href="/new/Basic"]', 'custom link text'
12
12
  end
13
13
  it 'handles params' do
14
- add_link = render_content "{{Basic|add_button;params:_project=_self}}"
14
+ add_link = render_content '{{Basic|add_button;params:_project=_self}}'
15
15
  assert_view_select add_link, 'a[href="/new/Basic?_project=Tempo+Rary+2"]'
16
16
  end
17
17
  end
18
18
  end
19
-
@@ -1,7 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Type::Date do
4
- it "should have special editor" do
4
+ it 'should have special editor' do
5
5
  assert_view_select render_editor('Date'), 'input[class~="date-editor"]'
6
6
  end
7
7
  end
@@ -44,7 +44,7 @@ describe Card::Set::Type::EmailTemplate do
44
44
  end
45
45
 
46
46
  it 'renders html email if html message given' do
47
- @fields = { '+*html_message' => 'text' }
47
+ @fields = { '+*html_message' => 'text' }
48
48
  expect(content_type).to include 'text/html'
49
49
  end
50
50
 
@@ -111,7 +111,7 @@ describe Card::Set::Type::EmailTemplate do
111
111
  it 'does not render link' do
112
112
  is_expected.to include 'Link([[http://wagn.org|Wagn]])'
113
113
  end
114
- it 'renders inclusion' do
114
+ it 'renders nest' do
115
115
  is_expected.to include 'Inclusion(B)'
116
116
  end
117
117
  end
@@ -128,7 +128,7 @@ describe Card::Set::Type::EmailTemplate do
128
128
  it 'renders link' do
129
129
  is_expected.to include 'Link(Wagn[http://wagn.org])'
130
130
  end
131
- it 'renders inclusion' do
131
+ it 'renders nest' do
132
132
  is_expected.to include 'Inclusion(B)'
133
133
  end
134
134
  end
@@ -147,7 +147,7 @@ describe Card::Set::Type::EmailTemplate do
147
147
  is_expected.to include 'Link(<a target="_blank" class="external-link" '\
148
148
  'href="http://wagn.org">Wagn</a>)'
149
149
  end
150
- it 'renders inclusion' do
150
+ it 'renders nest' do
151
151
  is_expected.to include 'Inclusion(B)'
152
152
  end
153
153
  it 'renders absolute urls' do
@@ -183,7 +183,7 @@ describe Card::Set::Type::EmailTemplate do
183
183
  Card.create! name: 'default subject', content: 'a very nutty thang',
184
184
  type: 'Phrase'
185
185
  Card.create! name: 'subject search+*right+*structure',
186
- content: %{{"referred_to_by":"_left+subject"}},
186
+ content: %({"referred_to_by":"_left+subject"}),
187
187
  type: 'Search'
188
188
  update_field '*subject', content: '{{+subject search|core;item:core}}'
189
189
  expect(subject[:subject]).to eq('a very nutty thang')
@@ -1,32 +1,35 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Type::File do
4
-
5
- context "new file card" do
4
+ context 'new file card' do
6
5
  before do
7
6
  Card::Auth.as_bot do
8
- Card.create name: "file card", type_code: 'file', file: File.new( File.join FIXTURES_PATH, 'file1.txt' )
7
+ Card.create name: 'file card', type_code: 'file',
8
+ file: File.new(File.join(FIXTURES_PATH, 'file1.txt'))
9
9
  end
10
10
  end
11
11
  subject { Card['file card'] }
12
- it "stores correct identifier (<card id>/<action id>.<ext>)" do
13
- expect(subject.content).to eq "~#{subject.id}/#{subject.last_action_id}.txt"
12
+ it 'stores correct identifier (<card id>/<action id>.<ext>)' do
13
+ expect(subject.content)
14
+ .to eq "~#{subject.id}/#{subject.last_action_id}.txt"
14
15
  end
15
16
 
16
- it "stores file" do
17
- expect(subject.file.read.strip).to eq "file1"
17
+ it 'stores file' do
18
+ expect(subject.file.read.strip).to eq 'file1'
18
19
  end
19
20
 
20
- it "saves original file name as action comment" do
21
- expect(subject.last_action.comment).to eq "file1.txt"
21
+ it 'saves original file name as action comment' do
22
+ expect(subject.last_action.comment).to eq 'file1.txt'
22
23
  end
23
24
 
24
- it "has correct original filename" do
25
- expect(subject.original_filename).to eq "file1.txt"
25
+ it 'has correct original filename' do
26
+ expect(subject.original_filename).to eq 'file1.txt'
26
27
  end
27
28
 
28
- it "has correct url" do
29
- expect(subject.file.url).to eq "/files/~#{subject.id}/#{subject.last_action_id}.txt"
29
+ it 'has correct url' do
30
+ expect(subject.file.url).to(
31
+ eq "/files/~#{subject.id}/#{subject.last_action_id}.txt"
32
+ )
30
33
  end
31
34
 
32
35
  describe '#mod_file?' do
@@ -37,41 +40,60 @@ describe Card::Set::Type::File do
37
40
 
38
41
  describe 'view: source' do
39
42
  it 'renders url' do
40
- expect(subject.format.render(:source)).to eq("/files/~#{subject.id}/#{subject.last_action_id}.txt")
43
+ expect(subject.format.render(:source)).to(
44
+ eq "/files/~#{subject.id}/#{subject.last_action_id}.txt"
45
+ )
41
46
  end
42
47
  end
43
48
 
44
- context "updated file card" do
49
+ context 'updated file card' do
45
50
  before do
46
- subject.update_attributes! file: File.new( File.join FIXTURES_PATH, 'file2.txt' )
51
+ file = File.new File.join(FIXTURES_PATH, 'file2.txt')
52
+ subject.update_attributes! file: file
47
53
  end
48
- it "updates file" do
49
- expect(subject.file.read.strip).to eq "file2"
54
+ it 'updates file' do
55
+ expect(subject.file.read.strip).to eq 'file2'
50
56
  end
51
57
 
52
- it "updates original file name" do
53
- expect(subject.original_filename).to eq "file2.txt"
58
+ it 'updates original file name' do
59
+ expect(subject.original_filename).to eq 'file2.txt'
54
60
  end
55
61
 
56
- it "updates url" do
57
- expect(subject.file.url).to eq "/files/~#{subject.id}/#{subject.last_action_id}.txt"
62
+ it 'updates url' do
63
+ expect(subject.file.url)
64
+ .to eq "/files/~#{subject.id}/#{subject.last_action_id}.txt"
58
65
  end
59
66
  end
60
67
 
61
68
  context 'subcards' do
62
69
  it 'handles file subcards' do
63
- Card.create! name: 'new card with file', subcards: {'+my file'=>{content: 'ignore content', type_id: Card::FileID, file: File.open(File.join(FIXTURES_PATH, 'file1.txt'))}}
64
- expect(Card['new card with file+my file'].file.file.read.strip).to eq 'file1'
70
+ file = File.open(File.join(FIXTURES_PATH, 'file1.txt'))
71
+ Card.create! name: 'new card with file',
72
+ subcards: {
73
+ '+my file' => {
74
+ content: 'ignore content',
75
+ type_id: Card::FileID,
76
+ file: file
77
+ }
78
+ }
79
+ expect(Card['new card with file+my file'].file.file.read.strip)
80
+ .to eq 'file1'
65
81
  end
66
-
67
82
  end
68
83
  end
69
84
 
85
+ it 'creates empty file card without content' do
86
+ card = Card.create name: 'hide and seek', type_id: Card::FileID
87
+ expect(card.content).to eq('')
88
+ end
89
+
70
90
  it 'handles urls' do
71
- url = 'http://wagn.org/files/bruce_logo-large-122798.png'
91
+ # wagn.org is down so we need another url
92
+ # url = 'http://wagn.org/files/bruce_logo-large-122798.png'
93
+ url = 'http://www.lcdmedia.de/UserFiles/Image/pages/reparatur/beamer_test.jpg'
94
+
72
95
  Card.create! name: 'url test', type_id: Card::FileID, remote_file_url: url
73
96
  expect(Card['url test'].file.size).to be > 0
74
- expect(Card['url test'].file.url).to match /\.png$/
97
+ expect(Card['url test'].file.url).to match(/\.jpg$/)
75
98
  end
76
-
77
99
  end