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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/card.gemspec +24 -25
- data/config/initializers/01_init_ruby_extensions.rb +0 -4
- data/config/initializers/inflections.rb +1 -1
- data/config/initializers/notification.rb +2 -2
- data/db/migrate/20110511221913_require_earlier_migrations.rb +3 -3
- data/db/migrate/20120105203350_require_1_8_migrations.rb +3 -3
- data/db/migrate/20121111025347_require_1_10_migrations.rb +3 -3
- data/db/migrate/20130106052640_table_cleanup.rb +4 -4
- data/db/migrate/20130411210957_update_codenames.rb +2 -2
- data/db/migrate/20141001105348_move_revisions_to_actions.rb +4 -4
- data/db/migrate/20141121172918_rename_card_migration_table.rb +2 -2
- data/db/migrate/20141208132159_remove_present_from_reference_table.rb +2 -2
- data/db/migrate/20141216053032_better_index_names.rb +9 -9
- data/db/migrate_core_cards/20120611203506_rails_inflection_updates.rb +29 -32
- data/db/migrate_core_cards/20130411191151_renaming_for_menu.rb +3 -4
- data/db/migrate_core_cards/20130411211600_delete_old_related_tab_cards.rb +1 -1
- data/db/migrate_core_cards/20130419215612_import_help_text.rb +1 -2
- data/db/migrate_core_cards/20130823192433_add_style_cards.rb +3 -3
- data/db/migrate_core_cards/20130910183318_move_styles_to_content.rb +2 -3
- data/db/migrate_core_cards/20130920214038_jsonize_tinymce.rb +2 -2
- data/db/migrate_core_cards/20130920291703_update_stylesheets.rb +1 -2
- data/db/migrate_core_cards/20130927191728_account_events.rb +5 -6
- data/db/migrate_core_cards/20131016172445_common_css_patch.rb +2 -3
- data/db/migrate_core_cards/20140110193325_reset_account_request_type.rb +0 -1
- data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +23 -32
- data/db/migrate_core_cards/20140317035504_account_requests_to_signups.rb +1 -7
- data/db/migrate_core_cards/20140512155840_add_script_cards.rb +21 -24
- data/db/migrate_core_cards/20140629222005_add_email_cards.rb +17 -22
- data/db/migrate_core_cards/20140725180118_config_card_updates.rb +2 -2
- data/db/migrate_core_cards/20141111083921_delete_machine_output.rb +1 -3
- data/db/migrate_core_cards/20141115034214_config_descriptions_etc.rb +2 -2
- data/db/migrate_core_cards/20141119001955_make_symlinks_relative.rb +3 -3
- data/db/migrate_core_cards/20141120120605_fix_notification_html_message.rb +1 -1
- data/db/migrate_core_cards/20141204061304_watchers_to_following.rb +8 -12
- data/db/migrate_core_cards/20141208162106_add_ace_script.rb +2 -3
- data/db/migrate_core_cards/20141216155251_add_more_following_cards.rb +10 -10
- data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +10 -12
- data/db/migrate_core_cards/20150220134731_following_to_follow_rule.rb +4 -4
- data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +3 -3
- data/db/migrate_core_cards/20150326205655_bootswatch_themes.rb +7 -7
- data/db/migrate_core_cards/20150429090551_search_card_context.rb +18 -20
- data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +3 -7
- data/db/migrate_core_cards/20150510031118_fix_skin_images.rb +2 -3
- data/db/migrate_core_cards/20150528084659_add_session_cardtype.rb +3 -3
- data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +4 -4
- data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +4 -4
- data/db/migrate_core_cards/20150610180019_add_recaptcha_key_and_admin_info_cards.rb +5 -11
- data/db/migrate_core_cards/20150724123438_update_file_and_image_cards.rb +29 -35
- data/db/migrate_core_cards/20150824135418_update_file_history.rb +10 -14
- data/db/migrate_core_cards/20150903130006_attachment_upload_cards.rb +1 -1
- data/db/schema.rb +92 -94
- data/db/seed/new/card_actions.yml +461 -469
- data/db/seed/new/card_acts.yml +154 -172
- data/db/seed/new/card_changes.yml +4076 -4031
- data/db/seed/new/card_references.yml +1584 -1927
- data/db/seed/new/cards.yml +2095 -2112
- data/db/seed/test/fixtures/card_actions.yml +1497 -1505
- data/db/seed/test/fixtures/card_acts.yml +454 -472
- data/db/seed/test/fixtures/card_changes.yml +7309 -7263
- data/db/seed/test/fixtures/card_references.yml +2263 -2613
- data/db/seed/test/fixtures/cards.yml +3298 -3316
- data/db/seed/test/seed.rb +3 -0
- data/lib/card.rb +17 -9
- data/lib/card/active_record_ext.rb +6 -8
- data/lib/card/active_record_helper.rb +42 -32
- data/lib/card/auth.rb +3 -3
- data/lib/card/cache.rb +4 -4
- data/lib/card/cache/persistent.rb +9 -5
- data/lib/card/cache/temporary.rb +5 -5
- data/lib/card/chunk.rb +1 -1
- data/lib/card/codename.rb +3 -2
- data/lib/card/content.rb +62 -57
- data/lib/card/core_ext.rb +20 -30
- data/lib/card/diff.rb +88 -76
- data/lib/card/director_register.rb +66 -0
- data/lib/card/env.rb +14 -17
- data/lib/card/exceptions.rb +7 -9
- data/lib/card/format.rb +18 -367
- data/lib/card/format/nest.rb +183 -0
- data/lib/card/format/permission.rb +63 -0
- data/lib/card/format/render.rb +140 -0
- data/lib/card/loader.rb +17 -26
- data/lib/card/location.rb +6 -6
- data/lib/card/mailer.rb +4 -7
- data/lib/card/migration.rb +1 -1
- data/lib/card/name.rb +3 -6
- data/lib/card/query.rb +8 -8
- data/lib/card/query/attributes.rb +6 -6
- data/lib/card/query/clause.rb +10 -10
- data/lib/card/query/join.rb +7 -9
- data/lib/card/query/reference.rb +17 -19
- data/lib/card/query/sql_statement.rb +2 -2
- data/lib/card/query/value.rb +15 -16
- data/lib/card/set.rb +106 -209
- data/lib/card/set/event.rb +126 -0
- data/lib/card/set_pattern.rb +42 -29
- data/lib/card/simplecov_helper.rb +19 -19
- data/lib/card/spec_helper.rb +40 -16
- data/lib/card/stage.rb +72 -0
- data/lib/card/stage_director.rb +231 -0
- data/lib/card/subcards.rb +56 -24
- data/lib/card/subdirector_array.rb +31 -0
- data/lib/card/success.rb +15 -18
- data/lib/card/version.rb +1 -2
- data/lib/card/view_cache.rb +4 -4
- data/lib/card/view_name.rb +10 -8
- data/lib/cardio.rb +1 -1
- data/lib/generators/card.rb +2 -4
- data/lib/generators/card/format/format_generator.rb +4 -4
- data/lib/generators/card/migration/migration_generator.rb +6 -6
- data/lib/generators/card/set/set_generator.rb +5 -6
- data/mod/01_core/chunk/include.rb +2 -1
- data/mod/01_core/chunk/link.rb +2 -2
- data/mod/01_core/chunk/literal.rb +6 -9
- data/mod/01_core/chunk/query_reference.rb +1 -1
- data/mod/01_core/chunk/reference.rb +2 -2
- data/mod/01_core/chunk/uri.rb +52 -63
- data/mod/01_core/format/html_format.rb +8 -12
- data/mod/01_core/format/text_format.rb +1 -1
- data/mod/01_core/set/all/actify.rb +96 -0
- data/mod/01_core/set/all/active_card.rb +7 -7
- data/mod/01_core/set/all/collection.rb +19 -20
- data/mod/01_core/set/all/content.rb +9 -7
- data/mod/01_core/set/all/erb.rb +5 -5
- data/mod/01_core/set/all/event.rb +60 -0
- data/mod/01_core/set/all/fetch.rb +13 -19
- data/mod/01_core/set/all/haml.rb +1 -1
- data/mod/01_core/set/all/initialize.rb +35 -41
- data/mod/01_core/set/all/location_history.rb +3 -5
- data/mod/01_core/set/all/name.rb +19 -68
- data/mod/01_core/set/all/name_validations.rb +56 -0
- data/mod/01_core/set/all/pattern.rb +2 -2
- data/mod/01_core/set/all/permissions.rb +14 -20
- data/mod/01_core/set/all/phases.rb +9 -200
- data/mod/01_core/set/all/references.rb +10 -10
- data/mod/01_core/set/all/rules.rb +3 -4
- data/mod/01_core/set/all/stages.rb +24 -0
- data/mod/01_core/set/all/states.rb +4 -4
- data/mod/01_core/set/all/subcards.rb +16 -26
- data/mod/01_core/set/all/templating.rb +1 -3
- data/mod/01_core/set/all/tracked_attributes.rb +47 -48
- data/mod/01_core/set/all/trash.rb +10 -10
- data/mod/01_core/set/all/type.rb +9 -8
- data/mod/01_core/set/all/utils.rb +10 -14
- data/mod/01_core/set/all/view_cache.rb +2 -2
- data/mod/01_core/set_pattern/01_all.rb +3 -3
- data/mod/01_core/set_pattern/02_all_plus.rb +3 -3
- data/mod/01_core/set_pattern/03_type.rb +2 -2
- data/mod/01_core/set_pattern/04_star.rb +3 -3
- data/mod/01_core/set_pattern/05_rstar.rb +3 -3
- data/mod/01_core/set_pattern/06_right.rb +2 -2
- data/mod/01_core/set_pattern/07_type_plus_right.rb +2 -2
- data/mod/01_core/set_pattern/08_self.rb +1 -1
- data/mod/01_core/spec/chunk/literal_spec.rb +7 -8
- data/mod/01_core/spec/chunk/uri_spec.rb +140 -142
- data/mod/01_core/spec/format/html_format_spec.rb +72 -57
- data/mod/01_core/spec/set/all/collection_spec.rb +63 -43
- data/mod/01_core/spec/set/all/content_spec.rb +4 -4
- data/mod/01_core/spec/set/all/fetch_spec.rb +12 -3
- data/mod/01_core/spec/set/all/name_spec.rb +3 -4
- data/mod/01_core/spec/set/all/pattern_spec.rb +32 -35
- data/mod/01_core/spec/set/all/permissions_spec.rb +17 -5
- data/mod/01_core/spec/set/all/phases_spec.rb +0 -1
- data/mod/01_core/spec/set/all/references_spec.rb +1 -1
- data/mod/01_core/spec/set/all/rules2_spec.rb +79 -91
- data/mod/01_core/spec/set/all/rules_spec.rb +63 -56
- data/mod/01_core/spec/set/all/templating_spec.rb +0 -1
- data/mod/01_core/spec/set/all/tracked_attributes_spec.rb +4 -5
- data/mod/01_core/spec/set/all/trash_spec.rb +23 -1
- data/mod/01_core/spec/set/all/type_spec.rb +2 -5
- data/mod/01_history/lib/card/action.rb +8 -10
- data/mod/01_history/set/all/actions.rb +2 -4
- data/mod/01_history/set/all/content_history.rb +38 -32
- data/mod/01_history/set/all/history.rb +20 -17
- data/mod/02_basic_types/format/rss_format.rb +0 -1
- data/mod/02_basic_types/set/all/all_css.rb +9 -13
- data/mod/02_basic_types/set/all/all_csv.rb +14 -17
- data/mod/02_basic_types/set/all/all_js.rb +3 -4
- data/mod/02_basic_types/set/all/base.rb +2 -2
- data/mod/02_basic_types/set/all/file.rb +2 -5
- data/mod/02_basic_types/set/all/json.rb +19 -18
- data/mod/02_basic_types/set/all/rss.rb +3 -3
- data/mod/02_basic_types/set/all/text.rb +1 -3
- data/mod/02_basic_types/set/type/html.rb +4 -8
- data/mod/02_basic_types/set/type/plain_text.rb +2 -3
- data/mod/02_basic_types/set/type/pointer.rb +82 -92
- data/mod/02_basic_types/spec/set/all/all_css_spec.rb +2 -2
- data/mod/02_basic_types/spec/set/all/all_csv_spec.rb +6 -4
- data/mod/02_basic_types/spec/set/all/base_spec.rb +6 -6
- data/mod/02_basic_types/spec/set/all/json_spec.rb +8 -8
- data/mod/02_basic_types/spec/set/type/plain_text_spec.rb +3 -3
- data/mod/02_basic_types/spec/set/type/pointer_spec.rb +29 -32
- data/mod/03_machines/lib/card/machine.rb +95 -81
- data/mod/03_machines/lib/card/machine_input.rb +35 -34
- data/mod/03_machines/set/right/machine_input.rb +1 -1
- data/mod/03_machines/set/self/script_ace.rb +2 -3
- data/mod/03_machines/set/self/script_card_menu.rb +2 -3
- data/mod/03_machines/set/self/script_jquery_helper.rb +2 -2
- data/mod/03_machines/set/self/script_slot.rb +2 -2
- data/mod/03_machines/set/self/style_bootstrap_compatible.rb +1 -1
- data/mod/03_machines/set/self/style_cards.rb +1 -1
- data/mod/03_machines/set/self/style_jquery_ui_smoothness.rb +0 -1
- data/mod/03_machines/set/type/coffee_script.rb +9 -13
- data/mod/03_machines/set/type/css.rb +12 -13
- data/mod/03_machines/set/type/java_script.rb +6 -8
- data/mod/03_machines/set/type/scss.rb +4 -5
- data/mod/03_machines/set/type/skin.rb +3 -6
- data/mod/03_machines/spec/lib/shared_machine_examples.rb +31 -38
- data/mod/03_machines/spec/lib/shared_machine_input_examples.rb +7 -8
- data/mod/03_machines/spec/set/type/coffeescript_spec.rb +19 -13
- data/mod/03_machines/spec/set/type/css_spec.rb +22 -16
- data/mod/03_machines/spec/set/type/scss_spec.rb +28 -21
- data/mod/03_machines/spec/set/type/skin_spec.rb +28 -30
- data/mod/04_settings/lib/card/setting.rb +4 -4
- data/mod/04_settings/set/abstract/permission.rb +30 -37
- data/mod/04_settings/set/right/add_help.rb +3 -3
- data/mod/04_settings/set/right/script.rb +4 -5
- data/mod/04_settings/set/right/structure.rb +3 -4
- data/mod/04_settings/set/right/style.rb +3 -3
- data/mod/04_settings/set/self/add_help.rb +1 -1
- data/mod/04_settings/set/self/input.rb +1 -1
- data/mod/04_settings/set/self/on_create.rb +1 -1
- data/mod/04_settings/set/self/options.rb +1 -1
- data/mod/04_settings/set/self/options_label.rb +1 -1
- data/mod/04_settings/set/type/setting.rb +29 -44
- data/mod/04_settings/spec/set/right/comment_spec.rb +9 -12
- data/mod/04_settings/spec/set/right/script_spec.rb +7 -7
- data/mod/04_settings/spec/set/right/structure_spec.rb +13 -12
- data/mod/04_settings/spec/set/right/style_spec.rb +13 -13
- data/mod/04_settings/spec/set/type/setting_spec.rb +1 -1
- data/mod/05_email/format/email_html_format.rb +1 -1
- data/mod/05_email/format/email_text_format.rb +2 -2
- data/mod/05_email/lib/card/follow_option.rb +12 -15
- data/mod/05_email/set/all/email_html.rb +2 -3
- data/mod/05_email/set/all/email_text.rb +3 -3
- data/mod/05_email/set/all/follow.rb +14 -22
- data/mod/05_email/set/all/notify.rb +11 -11
- data/mod/05_email/set/all/observer.rb +7 -8
- data/mod/05_email/set/right/bcc.rb +4 -9
- data/mod/05_email/set/right/follow.rb +26 -39
- data/mod/05_email/set/right/follow_fields.rb +2 -2
- data/mod/05_email/set/right/followers.rb +3 -1
- data/mod/05_email/set/right/following.rb +13 -16
- data/mod/05_email/set/self/always.rb +1 -2
- data/mod/05_email/set/self/created.rb +4 -6
- data/mod/05_email/set/self/edited.rb +3 -7
- data/mod/05_email/set/self/follow_defaults.rb +11 -12
- data/mod/05_email/set/self/never.rb +2 -4
- data/mod/05_email/set/type/email_template.rb +40 -27
- data/mod/05_email/set/type_plus_right/user/follow.rb +159 -157
- data/mod/05_email/spec/set/all/follow_spec.rb +28 -37
- data/mod/05_email/spec/set/all/notify_spec.rb +21 -26
- data/mod/05_email/spec/set/all/observer_spec.rb +58 -37
- data/mod/05_email/spec/set/right/followers_spec.rb +9 -14
- data/mod/05_email/spec/set/right/following_spec.rb +1 -1
- data/mod/05_email/spec/set/self/follow_defaults_spec.rb +1 -1
- data/mod/05_standard/lib/carrier_wave/cardmount.rb +9 -9
- data/mod/05_standard/lib/file_uploader.rb +8 -13
- data/mod/05_standard/lib/image_uploader.rb +8 -9
- data/mod/05_standard/set/abstract/attachment.rb +26 -43
- data/mod/05_standard/set/all/account.rb +2 -2
- data/mod/05_standard/set/all/comment.rb +11 -13
- data/mod/05_standard/set/all/error.rb +18 -18
- data/mod/05_standard/set/all/event_viz.rb +16 -29
- data/mod/05_standard/set/all/links.rb +35 -34
- data/mod/05_standard/set/all/list_changes.rb +10 -12
- data/mod/05_standard/set/all/rich_html/content.rb +13 -13
- data/mod/05_standard/set/all/rich_html/editing.rb +5 -5
- data/mod/05_standard/set/all/rich_html/form.rb +22 -26
- data/mod/05_standard/set/all/rich_html/header.rb +18 -25
- data/mod/05_standard/set/all/rich_html/menu.rb +20 -22
- data/mod/05_standard/set/all/rich_html/modal.rb +3 -3
- data/mod/05_standard/set/all/rich_html/toolbar.rb +49 -58
- data/mod/05_standard/set/all/rich_html/wrapper.rb +40 -41
- data/mod/05_standard/set/right/account.rb +26 -14
- data/mod/05_standard/set/right/email.rb +2 -2
- data/mod/05_standard/set/right/password.rb +6 -5
- data/mod/05_standard/set/right/salt.rb +2 -2
- data/mod/05_standard/set/right/stats.rb +17 -20
- data/mod/05_standard/set/right/token.rb +1 -1
- data/mod/05_standard/set/right/when_created.rb +1 -1
- data/mod/05_standard/set/right/when_last_edited.rb +1 -1
- data/mod/05_standard/set/rstar/rules.rb +3 -3
- data/mod/05_standard/set/rstar/rules_editor.rb +39 -39
- data/mod/05_standard/set/self/account_links.rb +21 -22
- data/mod/05_standard/set/self/admin_info.rb +5 -5
- data/mod/05_standard/set/self/alerts.rb +1 -1
- data/mod/05_standard/set/self/all.rb +1 -1
- data/mod/05_standard/set/self/foot.rb +1 -1
- data/mod/05_standard/set/self/head.rb +19 -22
- data/mod/05_standard/set/self/navbox.rb +3 -7
- data/mod/05_standard/set/self/now.rb +1 -1
- data/mod/05_standard/set/self/recent.rb +19 -25
- data/mod/05_standard/set/self/search.rb +2 -4
- data/mod/05_standard/set/self/signin.rb +6 -6
- data/mod/05_standard/set/self/stats.rb +31 -38
- data/mod/05_standard/set/self/version.rb +1 -2
- data/mod/05_standard/set/type/basic.rb +15 -17
- data/mod/05_standard/set/type/cardtype.rb +3 -3
- data/mod/05_standard/set/type/date.rb +1 -2
- data/mod/05_standard/set/type/file.rb +22 -33
- data/mod/05_standard/set/type/image.rb +30 -23
- data/mod/05_standard/set/type/layout_type.rb +4 -4
- data/mod/05_standard/set/type/list.rb +32 -38
- data/mod/05_standard/set/type/listed_by.rb +11 -13
- data/mod/05_standard/set/type/number.rb +5 -6
- data/mod/05_standard/set/type/phrase.rb +1 -1
- data/mod/05_standard/set/type/search_type.rb +25 -23
- data/mod/05_standard/set/type/session.rb +2 -3
- data/mod/05_standard/set/type/set.rb +46 -51
- data/mod/05_standard/set/type/signup.rb +18 -19
- data/mod/05_standard/set/type/toggle.rb +5 -5
- data/mod/05_standard/set/type/user.rb +6 -6
- data/mod/05_standard/spec/chunk/include_spec.rb +115 -98
- data/mod/05_standard/spec/chunk/link_spec.rb +58 -31
- data/mod/05_standard/spec/chunk/query_reference_spec.rb +12 -14
- data/mod/05_standard/spec/set/all/email_html_spec.rb +3 -3
- data/mod/05_standard/spec/set/all/error_spec.rb +3 -3
- data/mod/05_standard/spec/set/all/history_spec.rb +52 -38
- data/mod/05_standard/spec/set/all/links_spec.rb +2 -2
- data/mod/05_standard/spec/set/all/rich_html/editing_spec.rb +0 -1
- data/mod/05_standard/spec/set/all/rich_html/form_spec.rb +11 -11
- data/mod/05_standard/spec/set/all/rich_html/wrapper_spec.rb +4 -4
- data/mod/05_standard/spec/set/right/email_spec.rb +1 -4
- data/mod/05_standard/spec/set/right/password_spec.rb +4 -7
- data/mod/05_standard/spec/set/right/stats_spec.rb +2 -3
- data/mod/05_standard/spec/set/right/when_created_spec.rb +1 -1
- data/mod/05_standard/spec/set/right/when_last_edited_spec.rb +1 -1
- data/mod/05_standard/spec/set/rstar/rules_spec.rb +6 -6
- data/mod/05_standard/spec/set/self/all_spec.rb +11 -13
- data/mod/05_standard/spec/set/self/head_spec.rb +1 -3
- data/mod/05_standard/spec/set/self/navbox_spec.rb +1 -1
- data/mod/05_standard/spec/set/self/now_spec.rb +2 -2
- data/mod/05_standard/spec/set/self/signin_spec.rb +1 -1
- data/mod/05_standard/spec/set/self/stats_spec.rb +1 -1
- data/mod/05_standard/spec/set/self/version_spec.rb +2 -2
- data/mod/05_standard/spec/set/type/cardtype_spec.rb +3 -4
- data/mod/05_standard/spec/set/type/date_spec.rb +1 -1
- data/mod/05_standard/spec/set/type/email_template_spec.rb +5 -5
- data/mod/05_standard/spec/set/type/file_spec.rb +50 -28
- data/mod/05_standard/spec/set/type/html_spec.rb +12 -7
- data/mod/05_standard/spec/set/type/image_spec.rb +55 -45
- data/mod/05_standard/spec/set/type/layout_type_spec.rb +2 -2
- data/mod/05_standard/spec/set/type/listed_by_spec.rb +2 -2
- data/mod/05_standard/spec/set/type/number_spec.rb +1 -1
- data/mod/05_standard/spec/set/type/phrase_spec.rb +1 -1
- data/mod/05_standard/spec/set/type/search_type_spec.rb +15 -16
- data/mod/05_standard/spec/set/type/set_spec.rb +16 -17
- data/mod/05_standard/spec/set/type/signup_spec.rb +7 -5
- data/mod/05_standard/spec/set/type/toggle_spec.rb +4 -4
- data/mod/05_standard/spec/set/type/uri_spec.rb +11 -11
- data/mod/05_standard/spec/set/type/user_spec.rb +0 -1
- data/mod/06_bootstrap/set/all/bootstrap/form.rb +9 -10
- data/mod/06_bootstrap/set/all/bootstrap/helper.rb +22 -27
- data/mod/06_bootstrap/set/all/bootstrap/wrapper.rb +1 -2
- data/mod/06_bootstrap/set/all/rich_bootstrap.rb +1 -3
- data/mod/06_bootstrap/set/self/bootstrap_cards.rb +2 -2
- data/mod/06_bootstrap/set/self/bootstrap_js.rb +2 -2
- data/mod/06_bootstrap/set/self/bootswatch_shared.rb +19 -19
- data/mod/06_bootstrap/set/self/smartmenu_css.rb +2 -2
- data/mod/06_bootstrap/set/self/smartmenu_js.rb +3 -3
- data/mod/06_bootstrap/spec/set/all/bootstrap/form_spec.rb +5 -5
- data/spec/lib/card/action_spec.rb +4 -4
- data/spec/lib/card/cache_spec.rb +3 -5
- data/spec/lib/card/chunk_spec.rb +6 -8
- data/spec/lib/card/codename_spec.rb +4 -6
- data/spec/lib/card/content_spec.rb +12 -17
- data/spec/lib/card/diff_spec.rb +59 -61
- data/spec/lib/card/format_spec.rb +55 -34
- data/spec/lib/card/loader_spec.rb +35 -37
- data/spec/lib/card/name_spec.rb +159 -145
- data/spec/lib/card/query_spec.rb +4 -4
- data/spec/lib/card/reference_spec.rb +24 -24
- data/spec/lib/card/set_pattern_spec.rb +3 -3
- data/spec/lib/card/stage_director_spec.rb +218 -0
- data/spec/lib/card/subcards_spec.rb +12 -16
- data/spec/lib/card/success_spec.rb +16 -18
- data/spec/lib/card/view_cache_spec.rb +1 -1
- data/spec/mailers/mailer_spec.rb +3 -5
- data/spec/models/card/cardtype_spec.rb +40 -51
- data/spec/models/card/create_spec.rb +58 -39
- data/spec/models/card/trash_spec.rb +23 -32
- data/spec/models/card/type_transition_spec.rb +41 -32
- data/spec/models/card/validation_spec.rb +13 -15
- data/spec/models/card_spec.rb +48 -59
- data/spec/spec_helper.rb +26 -31
- metadata +16 -2
@@ -33,22 +33,22 @@ describe Card::Reference do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'in references should survive cardtype change' do
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
create! 'Banana', '[[Yellow]]'
|
37
|
+
create! 'Submarine', '[[Yellow]]'
|
38
|
+
create! 'Sun', '[[Yellow]]'
|
39
|
+
create! 'Yellow'
|
40
40
|
yellow_refs = Card['Yellow'].referers.map(&:name).sort
|
41
|
-
expect(yellow_refs).to eq(%w
|
41
|
+
expect(yellow_refs).to eq(%w( Banana Submarine Sun ))
|
42
42
|
|
43
43
|
y = Card['Yellow']
|
44
44
|
y.type_id = Card.fetch_id 'UserForm'
|
45
45
|
y.save!
|
46
46
|
|
47
47
|
yellow_refs = Card['Yellow'].referers.map(&:name).sort
|
48
|
-
expect(yellow_refs).to eq(%w
|
48
|
+
expect(yellow_refs).to eq(%w( Banana Submarine Sun ))
|
49
49
|
end
|
50
50
|
|
51
|
-
it 'container
|
51
|
+
it 'container nest' do
|
52
52
|
Card.create name: 'bob+city'
|
53
53
|
Card.create name: 'address+*right+*default', content: '{{_L+city}}'
|
54
54
|
Card.create name: 'bob+address'
|
@@ -57,17 +57,17 @@ describe Card::Reference do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'pickup new links on rename' do
|
60
|
-
@l =
|
61
|
-
@e =
|
60
|
+
@l = create!('L', '[[Ethan]]') # no Ethan card yet...
|
61
|
+
@e = create!('Earthman')
|
62
62
|
@e.update_attributes! name: 'Ethan' # NOW there is an Ethan card
|
63
63
|
# do we need the links to be caught before reloading the card?
|
64
64
|
expect(Card['Ethan'].referers.map(&:name).include?('L')).not_to eq(nil)
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'should update references on rename when requested' do
|
68
|
-
|
69
|
-
|
70
|
-
lew =
|
68
|
+
create! 'watermelon', 'mmmm'
|
69
|
+
create! 'watermelon+seeds', 'black'
|
70
|
+
lew = create!('Lew', 'likes [[watermelon]] and [[watermelon+seeds|seeds]]')
|
71
71
|
|
72
72
|
watermelon = Card['watermelon']
|
73
73
|
watermelon.update_referers = true
|
@@ -90,9 +90,9 @@ describe Card::Reference do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
it 'should not update references when not requested' do
|
93
|
-
watermelon =
|
94
|
-
watermelon_seeds =
|
95
|
-
lew =
|
93
|
+
watermelon = create! 'watermelon', 'mmmm'
|
94
|
+
watermelon_seeds = create! 'watermelon+seeds', 'black'
|
95
|
+
lew = create!('Lew', 'likes [[watermelon]] and [[watermelon+seeds|seeds]]')
|
96
96
|
|
97
97
|
assert_equal [watermelon.id, watermelon_seeds.id],
|
98
98
|
lew.references_out.order(:id).map(&:referee_id),
|
@@ -127,11 +127,11 @@ describe Card::Reference do
|
|
127
127
|
expect(@x.content).to eq('[[A]] [[A+B]] [[T]]')
|
128
128
|
end
|
129
129
|
|
130
|
-
it 'template
|
130
|
+
it 'template nest' do
|
131
131
|
Card.create! name: 'ColorType', type: 'Cardtype', content: ''
|
132
132
|
Card.create! name: 'ColorType+*type+*structure', content: '{{+rgb}}'
|
133
133
|
green = Card.create! name: 'green', type: 'ColorType'
|
134
|
-
|
134
|
+
create! 'rgb'
|
135
135
|
green_rgb = Card.create! name: 'green+rgb', content: '#00ff00'
|
136
136
|
|
137
137
|
expect(green.reload.includees.map(&:name)).to eq(['green+rgb'])
|
@@ -152,7 +152,7 @@ describe Card::Reference do
|
|
152
152
|
expect(Card['alpha card'].referers.map(&:name)).to eq(['beta card'])
|
153
153
|
end
|
154
154
|
|
155
|
-
it 'simple
|
155
|
+
it 'simple nest' do
|
156
156
|
Card.create name: 'alpha'
|
157
157
|
Card.create name: 'beta', content: 'I nest {{alpha}}'
|
158
158
|
expect(Card['beta'].includees.map(&:name)).to eq(['alpha'])
|
@@ -176,7 +176,7 @@ describe Card::Reference do
|
|
176
176
|
expect(y_referers).to include('search with references')
|
177
177
|
|
178
178
|
search_referees = Card['search with references'].referees.map(&:name).sort
|
179
|
-
expect(search_referees).to eq(%w
|
179
|
+
expect(search_referees).to eq(%w( A B X Y ))
|
180
180
|
end
|
181
181
|
|
182
182
|
it 'handles contextual names in Basic cards' do
|
@@ -191,19 +191,19 @@ describe Card::Reference do
|
|
191
191
|
expect(Card['search w refs'].content).to eq '{"name":"_+AAA"}'
|
192
192
|
end
|
193
193
|
|
194
|
-
it 'should handle commented
|
195
|
-
c = Card.create name: '
|
194
|
+
it 'should handle commented nest' do
|
195
|
+
c = Card.create name: 'nest comment test', content: '{{## hi mom }}'
|
196
196
|
expect(c.errors.any?).to be_falsey
|
197
197
|
end
|
198
198
|
|
199
199
|
it 'pickup new links on create' do
|
200
|
-
@l =
|
201
|
-
@e =
|
200
|
+
@l = create!('woof', '[[Lewdog]]') # no Lewdog card yet...
|
201
|
+
@e = create!('Lewdog') # now there is
|
202
202
|
# NOTE @e.referers does not work, you have to reload
|
203
203
|
expect(@e.reload.referers.map(&:name).include?('woof')).not_to eq(nil)
|
204
204
|
end
|
205
205
|
|
206
|
-
it 'pickup new
|
206
|
+
it 'pickup new nests on create' do
|
207
207
|
@l = Card.create! name: 'woof', content: '{{Lewdog}}'
|
208
208
|
# no Lewdog card yet...
|
209
209
|
@e = Card.new name: 'Lewdog', content: 'grrr'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
3
|
module SetPatternSpecHelper
|
4
|
-
def it_generates
|
4
|
+
def it_generates opts
|
5
5
|
name = opts[:name]
|
6
6
|
card = opts[:from]
|
7
7
|
it "generates name '#{name}' for card '#{card.name}'" do
|
@@ -15,7 +15,7 @@ include SetPatternSpecHelper
|
|
15
15
|
describe Card::SetPattern do
|
16
16
|
end
|
17
17
|
|
18
|
-
#FIXME - these should probably be in pattern-specific specs, though that may not leave much to test in the base class :)
|
18
|
+
# FIXME: - these should probably be in pattern-specific specs, though that may not leave much to test in the base class :)
|
19
19
|
|
20
20
|
describe Card::RightSet do
|
21
21
|
it_generates name: 'author+*right', from: Card.new(name: 'Iliad+author')
|
@@ -23,7 +23,7 @@ describe Card::RightSet do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
describe Card::TypeSet do
|
26
|
-
it_generates name: 'Book+*type', from: Card.new(type:
|
26
|
+
it_generates name: 'Book+*type', from: Card.new(type: 'Book')
|
27
27
|
end
|
28
28
|
|
29
29
|
describe Card::TypeSet do
|
@@ -0,0 +1,218 @@
|
|
1
|
+
describe Card::StageDirector do
|
2
|
+
describe 'abortion' do
|
3
|
+
let(:create_card) { Card.create name: 'a card' }
|
4
|
+
subject { Card.fetch 'a card' }
|
5
|
+
context 'when error added' do
|
6
|
+
it 'stops act in validation phase' do
|
7
|
+
in_stage :validate,
|
8
|
+
on: :save,
|
9
|
+
trigger: -> { create_card } do
|
10
|
+
errors.add :stop, "don't do this"
|
11
|
+
end
|
12
|
+
is_expected.to be_falsey
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'does not stop act in storage phase' do
|
16
|
+
in_stage :store, on: :save,
|
17
|
+
trigger: -> { create_card } do
|
18
|
+
errors.add :stop, "don't do this"
|
19
|
+
end
|
20
|
+
is_expected.to be_truthy
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when exception raised' do
|
25
|
+
it 'rollbacks in finalize stage' do
|
26
|
+
begin
|
27
|
+
in_stage :finalize,
|
28
|
+
on: :save,
|
29
|
+
trigger: -> { create_card } do
|
30
|
+
raise Card::Error, 'rollback'
|
31
|
+
end
|
32
|
+
rescue Card::Error => e
|
33
|
+
ensure
|
34
|
+
is_expected.to be_falsey
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'does not rollback in integrate stage' do
|
39
|
+
begin
|
40
|
+
Card::Auth.as_bot do
|
41
|
+
in_stage :integrate,
|
42
|
+
on: :save,
|
43
|
+
trigger: -> { create_card } do
|
44
|
+
raise Card::Abort, 'rollback'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
rescue Card::Abort => e
|
48
|
+
ensure
|
49
|
+
is_expected.to be_truthy
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when abort :success called' do
|
55
|
+
it 'aborts storage in validation stage' do
|
56
|
+
in_stage :validate,
|
57
|
+
on: :create,
|
58
|
+
trigger: -> { create_card } do
|
59
|
+
abort :success
|
60
|
+
end
|
61
|
+
is_expected.to be_falsey
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'aborts storage in store stage' do
|
65
|
+
in_stage :store,
|
66
|
+
on: :create,
|
67
|
+
trigger: -> { create_card } do
|
68
|
+
abort :success
|
69
|
+
end
|
70
|
+
is_expected.to be_falsey
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'aborts storage in finalize stage' do
|
74
|
+
in_stage :store,
|
75
|
+
on: :create,
|
76
|
+
trigger: -> { create_card } do
|
77
|
+
abort :success
|
78
|
+
end
|
79
|
+
is_expected.to be_falsey
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'does not abort storage in integrate stage' do
|
83
|
+
in_stage :integrate,
|
84
|
+
on: :create,
|
85
|
+
trigger: -> { create_card } do
|
86
|
+
abort :success
|
87
|
+
end
|
88
|
+
is_expected.to be_truthy
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe 'stage order' do
|
94
|
+
let(:create_card_with_subcards) do
|
95
|
+
Card.create name: '1',
|
96
|
+
subcards: {
|
97
|
+
'11' => { subcards: { '111' => 'A' } },
|
98
|
+
'12' => { subcards: { '121' => 'A' } }
|
99
|
+
}
|
100
|
+
end
|
101
|
+
let(:preorder) { %w(1 11 111 12 121) }
|
102
|
+
let(:postorder) { %w(111 11 121 12 1) }
|
103
|
+
describe 'validate' do
|
104
|
+
it 'is pre-order depth-first' do
|
105
|
+
order = []
|
106
|
+
in_stage :validate, on: :create,
|
107
|
+
trigger: -> { create_card_with_subcards } do
|
108
|
+
order << name
|
109
|
+
end
|
110
|
+
expect(order).to eq(preorder)
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'executes all validate stages before next stage' do
|
114
|
+
order = []
|
115
|
+
with_test_events do
|
116
|
+
test_event :validate, on: :create do
|
117
|
+
order << "v:#{name}"
|
118
|
+
end
|
119
|
+
test_event :prepare_to_store, on: :create do
|
120
|
+
order << "pts:#{name}"
|
121
|
+
end
|
122
|
+
create_card_with_subcards
|
123
|
+
end
|
124
|
+
expect(order).to eq(
|
125
|
+
%w(v:1 v:11 v:111 v:12 v:121 pts:1 pts:11 pts:111 pts:12 pts:121)
|
126
|
+
)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe 'finalize' do
|
131
|
+
it 'is post-order depth-first' do
|
132
|
+
order = []
|
133
|
+
in_stage :finalize, on: :create,
|
134
|
+
trigger: -> { create_card_with_subcards } do
|
135
|
+
order << name
|
136
|
+
end
|
137
|
+
expect(order).to eq(postorder)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe 'store' do
|
142
|
+
it 'is pre-order depth-first' do
|
143
|
+
order = []
|
144
|
+
in_stage :store, on: :create,
|
145
|
+
trigger: -> { create_card_with_subcards } do
|
146
|
+
order << name
|
147
|
+
end
|
148
|
+
expect(order).to eq(preorder)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe 'store and finalize' do
|
153
|
+
it 'executes finalize when all subcards are stored and finalized' do
|
154
|
+
order = []
|
155
|
+
with_test_events do
|
156
|
+
test_event :store, on: :create do
|
157
|
+
order << "store:#{name}"
|
158
|
+
end
|
159
|
+
test_event :finalize, on: :create do
|
160
|
+
order << "finalize:#{name}"
|
161
|
+
end
|
162
|
+
create_card_with_subcards
|
163
|
+
end
|
164
|
+
expect(order).to eq(
|
165
|
+
%w(store:1 store:11 store:111 finalize:111 finalize:11
|
166
|
+
store:12 store:121 finalize:121 finalize:12 finalize:1)
|
167
|
+
)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
describe 'complete run' do
|
172
|
+
it 'is in correct order' do
|
173
|
+
order = []
|
174
|
+
with_test_events do
|
175
|
+
test_event :initialize, on: :create do
|
176
|
+
order << "i:#{name}"
|
177
|
+
end
|
178
|
+
test_event :prepare_to_validate, on: :create do
|
179
|
+
order << "ptv:#{name}"
|
180
|
+
end
|
181
|
+
test_event :validate, on: :create do
|
182
|
+
order << "v:#{name}"
|
183
|
+
add_subcard '112v' if name == '11'
|
184
|
+
end
|
185
|
+
test_event :prepare_to_store, on: :create do
|
186
|
+
order << "pts:#{name}"
|
187
|
+
end
|
188
|
+
test_event :store, on: :create do
|
189
|
+
order << "s:#{name}"
|
190
|
+
end
|
191
|
+
test_event :finalize, on: :create do
|
192
|
+
order << "f:#{name}"
|
193
|
+
end
|
194
|
+
test_event :integrate, on: :create do
|
195
|
+
order << "ig:#{name}"
|
196
|
+
end
|
197
|
+
test_event :integrate_with_delay, on: :create do
|
198
|
+
order << "igwd:#{name}"
|
199
|
+
end
|
200
|
+
create_card_with_subcards
|
201
|
+
end
|
202
|
+
expect(order).to eq(
|
203
|
+
%w(
|
204
|
+
i:1 i:11 i:111 i:12 i:121
|
205
|
+
ptv:1 ptv:11 ptv:111 ptv:12 ptv:121
|
206
|
+
v:1 v:11 v:111
|
207
|
+
i:112v ptv:112v v:112v
|
208
|
+
v:12 v:121
|
209
|
+
pts:1 pts:11 pts:111 pts:112v pts:12 pts:121
|
210
|
+
s:1 s:11 s:111 f:111 s:112v f:112v f:11 s:12 s:121 f:121 f:12 f:1
|
211
|
+
ig:1 ig:11 ig:111 ig:112v ig:12 ig:121
|
212
|
+
igwd:1 igwd:11 igwd:111 igwd:112v igwd:12 igwd:121
|
213
|
+
)
|
214
|
+
)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
@@ -57,22 +57,22 @@ describe Card::Subcards do
|
|
57
57
|
expect(Card['supermen+pseudonym'].name).to eq 'supermen+pseudonym'
|
58
58
|
end
|
59
59
|
|
60
|
-
it
|
60
|
+
it 'cleans the cache for autonaming case' do
|
61
61
|
Card::Auth.as_bot do
|
62
62
|
Card.create!(
|
63
63
|
name: 'Book+*type+*autoname', content: 'Book_1',
|
64
64
|
type_id: Card::PhraseID
|
65
65
|
)
|
66
66
|
card = Card.create!(
|
67
|
-
type:
|
68
|
-
subcards: { '+editable' => 'yes'}
|
67
|
+
type: 'Book',
|
68
|
+
subcards: { '+editable' => 'yes' }
|
69
69
|
)
|
70
70
|
expect(card.errors).to be_empty
|
71
71
|
expect(Card["#{card.name}+editable"]).to be_truthy
|
72
72
|
|
73
73
|
@card = Card.create!(
|
74
|
-
type:
|
75
|
-
subcards: { '+editable' => 'sure'}
|
74
|
+
type: 'Book',
|
75
|
+
subcards: { '+editable' => 'sure' }
|
76
76
|
)
|
77
77
|
end
|
78
78
|
|
@@ -87,11 +87,11 @@ describe Card::Subcards do
|
|
87
87
|
end
|
88
88
|
subject { Card.fetch("#{@card.name}+sub", new: {}, local_only: true).content }
|
89
89
|
it 'works with string' do
|
90
|
-
@card.
|
90
|
+
@card.add_subfield 'sub', content: 'this is a sub'
|
91
91
|
is_expected.to eq 'this is a sub'
|
92
92
|
end
|
93
93
|
it 'works with codename' do
|
94
|
-
@card.
|
94
|
+
@card.add_subfield :phrase, content: 'this is a sub'
|
95
95
|
subcard = Card.fetch('A+phrase', new: {}, local_only: true)
|
96
96
|
expect(subcard.content).to eq 'this is a sub'
|
97
97
|
end
|
@@ -103,12 +103,12 @@ describe Card::Subcards do
|
|
103
103
|
end
|
104
104
|
subject { Card.fetch("#{@card.name}+sub", new: {}, local_only: true).content }
|
105
105
|
it 'works with string' do
|
106
|
-
@card.
|
106
|
+
@card.add_subfield 'sub', content: 'this is a sub'
|
107
107
|
expect(@card.subfield('sub').content).to eq 'this is a sub'
|
108
108
|
end
|
109
109
|
|
110
110
|
it 'works with codename' do
|
111
|
-
@card.
|
111
|
+
@card.add_subfield :phrase, content: 'this is a sub'
|
112
112
|
expect(@card.subfield(':phrase').content).to eq 'this is a sub'
|
113
113
|
end
|
114
114
|
|
@@ -128,7 +128,7 @@ describe Card::Subcards do
|
|
128
128
|
@card = Card['A']
|
129
129
|
end
|
130
130
|
it 'adds a subcard' do
|
131
|
-
@card.
|
131
|
+
@card.add_subcard 'sub', content: 'sub content'
|
132
132
|
@card.save!
|
133
133
|
expect(Card['sub'].content).to eq 'sub content'
|
134
134
|
end
|
@@ -136,9 +136,7 @@ describe Card::Subcards do
|
|
136
136
|
describe 'two levels of subcards' do
|
137
137
|
it 'creates cards with subcards with subcards' do
|
138
138
|
Card::Auth.as_bot do
|
139
|
-
|
140
|
-
Card.create! name: 'test'
|
141
|
-
} do
|
139
|
+
in_stage :validate, trigger: -> { Card.create!(name: 'test') } do
|
142
140
|
if name == 'test'
|
143
141
|
add_subfield('first-level')
|
144
142
|
subfield('first-level').add_subfield 'second-level', content: 'yeah'
|
@@ -149,9 +147,7 @@ describe Card::Subcards do
|
|
149
147
|
end
|
150
148
|
it 'creates cards with subcards with subcards using codenames' do
|
151
149
|
Card::Auth.as_bot do
|
152
|
-
|
153
|
-
Card.create! name: 'test'
|
154
|
-
} do
|
150
|
+
in_stage :validate, trigger: -> { Card.create!(name: 'test') } do
|
155
151
|
if name == 'test'
|
156
152
|
add_subfield :children
|
157
153
|
subfield(:children).add_subfield :title, content: 'yeah'
|