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
@@ -75,7 +75,7 @@ end
|
|
75
75
|
|
76
76
|
# delete references from this card
|
77
77
|
def delete_references_out
|
78
|
-
|
78
|
+
raise 'id required to delete references' if id.nil?
|
79
79
|
Card::Reference.delete_all referer_id: id
|
80
80
|
end
|
81
81
|
|
@@ -124,32 +124,32 @@ end
|
|
124
124
|
protected
|
125
125
|
|
126
126
|
# test for updating referer content & preload referer list
|
127
|
-
event :prepare_referer_update,
|
127
|
+
event :prepare_referer_update, :validate, on: :update, changed: :name do
|
128
128
|
self.update_referers = ![nil, false, 'false'].member?(update_referers)
|
129
129
|
family_referers
|
130
130
|
end
|
131
131
|
|
132
132
|
# when name changes, update references to card
|
133
|
-
event :refresh_references_in,
|
133
|
+
event :refresh_references_in, :finalize, on: :save, changed: :name do
|
134
134
|
Card::Reference.unmap_referees id if @action == :update && !update_referers
|
135
135
|
Card::Reference.map_referees key, id
|
136
136
|
end
|
137
137
|
|
138
138
|
# when content changes, update references to other cards
|
139
|
-
event :refresh_references_out,
|
139
|
+
event :refresh_references_out, :finalize, on: :save, changed: :content do
|
140
140
|
update_references_out
|
141
141
|
end
|
142
142
|
|
143
143
|
# clean up reference table when card is deleted
|
144
|
-
event :clear_references,
|
144
|
+
event :clear_references, :finalize, on: :delete do
|
145
145
|
delete_references_out
|
146
146
|
Card::Reference.unmap_referees id
|
147
147
|
end
|
148
148
|
|
149
149
|
# on rename, update names in cards that refer to self by name (as directed)
|
150
|
-
event :update_referer_content,
|
151
|
-
|
152
|
-
when: proc { |
|
150
|
+
event :update_referer_content, :finalize,
|
151
|
+
on: :update, changed: :name,
|
152
|
+
when: proc { |card| card.update_referers } do
|
153
153
|
# FIXME: break into correct stages
|
154
154
|
Auth.as_bot do
|
155
155
|
family_referers.each do |card|
|
@@ -165,8 +165,8 @@ end
|
|
165
165
|
# that partial references are correctly tracked
|
166
166
|
# eg. A links to X+Y. if X+Y is renamed and we're not updating the link in A,
|
167
167
|
# then we need to be sure that A has a partial reference
|
168
|
-
event :update_referer_references_out,
|
169
|
-
|
168
|
+
event :update_referer_references_out, :finalize,
|
169
|
+
on: :update, changed: :name,
|
170
170
|
when: proc { |c| !c.update_referers } do
|
171
171
|
family_referers.map(&:update_references_out)
|
172
172
|
end
|
@@ -120,9 +120,7 @@ def related_sets with_self=false
|
|
120
120
|
if known? && type_id == Card::CardtypeID # FIXME: belongs in type/cardtype
|
121
121
|
sets << ["#{name}+*type", Card::TypeSet.label(name)]
|
122
122
|
end
|
123
|
-
if with_self
|
124
|
-
sets << ["#{name}+*self", Card::SelfSet.label(name)]
|
125
|
-
end
|
123
|
+
sets << ["#{name}+*self", Card::SelfSet.label(name)] if with_self
|
126
124
|
if known? && cardname.simple?
|
127
125
|
sets << ["#{name}+*right", Card::RightSet.label(name)]
|
128
126
|
end
|
@@ -240,7 +238,8 @@ module ClassMethods
|
|
240
238
|
|
241
239
|
# all users that have a user-specific rule for a given rule key
|
242
240
|
def user_ids_cache
|
243
|
-
Card.cache.read('USER_IDS') ||
|
241
|
+
Card.cache.read('USER_IDS') ||
|
242
|
+
begin
|
244
243
|
clear_rule_cache
|
245
244
|
rule_cache
|
246
245
|
@user_ids_hash
|
@@ -0,0 +1,24 @@
|
|
1
|
+
attr_writer :director
|
2
|
+
delegate :stage, to: :director
|
3
|
+
|
4
|
+
def director
|
5
|
+
@director ||= Card::DirectorRegister.fetch self
|
6
|
+
end
|
7
|
+
|
8
|
+
def identify_action
|
9
|
+
@action =
|
10
|
+
case
|
11
|
+
when trash then :delete
|
12
|
+
when new_card? then :create
|
13
|
+
else :update
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def current_act= act
|
18
|
+
raise Card::Error, 'not allowed to override current act' if Card.current_act
|
19
|
+
Card.current_act = act
|
20
|
+
end
|
21
|
+
|
22
|
+
def current_act
|
23
|
+
@current_act ||= Card.current_act
|
24
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
def new_card?
|
2
|
-
new_record? ||
|
3
|
-
|
2
|
+
new_record? || # not yet in db (from ActiveRecord)
|
3
|
+
!!@from_trash # in process of restoration from trash, not yet "re-created"
|
4
4
|
end
|
5
|
-
|
5
|
+
alias new? new_card?
|
6
6
|
|
7
7
|
def known?
|
8
8
|
real? || virtual?
|
@@ -18,5 +18,5 @@ end
|
|
18
18
|
|
19
19
|
def pristine?
|
20
20
|
# has not been edited directly by human users. bleep blorp.
|
21
|
-
new_card?
|
21
|
+
new_card? || !actions.joins(:act).where('card_acts.actor_id != ?', Card::WagnBotID).exists?
|
22
22
|
end
|
@@ -10,11 +10,14 @@ def subfield field_name
|
|
10
10
|
subcards.field field_name
|
11
11
|
end
|
12
12
|
|
13
|
-
phase_method :add_subcard, before: :
|
13
|
+
# phase_method :add_subcard, before: :store do |name_or_card, args=nil|
|
14
|
+
# TODO: handle differently in different stages
|
15
|
+
def add_subcard name_or_card, args=nil
|
14
16
|
subcards.add name_or_card, args
|
15
17
|
end
|
16
18
|
|
17
|
-
phase_method :add_subfield, before: :approve do |name_or_card, args=nil|
|
19
|
+
# phase_method :add_subfield, before: :approve do |name_or_card, args=nil|
|
20
|
+
def add_subfield name_or_card, args=nil
|
18
21
|
subcards.add_field name_or_card, args
|
19
22
|
end
|
20
23
|
|
@@ -30,43 +33,30 @@ def clear_subcards
|
|
30
33
|
subcards.clear
|
31
34
|
end
|
32
35
|
|
36
|
+
def deep_clear_subcards
|
37
|
+
subcards.deep_clear
|
38
|
+
end
|
39
|
+
|
33
40
|
def unfilled?
|
34
41
|
(content.empty? || content.strip.empty?) &&
|
35
42
|
(comment.blank? || comment.strip.blank?) &&
|
36
43
|
!subcards.present?
|
37
44
|
end
|
38
45
|
|
39
|
-
event :
|
46
|
+
event :handle_subcard_errors do
|
40
47
|
subcards.each do |subcard|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
errors.add subcard.relative_name.s, err
|
45
|
-
end
|
48
|
+
subcard.errors.each do |field, err|
|
49
|
+
err = "#{field} #{err}" unless [:content, :abort].member? field
|
50
|
+
errors.add subcard.relative_name.s, err
|
46
51
|
end
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
50
|
-
event :reject_empty_subcards,
|
55
|
+
event :reject_empty_subcards, :prepare_to_validate do
|
51
56
|
subcards.each_with_key do |subcard, key|
|
52
57
|
if subcard.new? && subcard.unfilled?
|
53
|
-
remove_subcard
|
58
|
+
remove_subcard(key)
|
59
|
+
director.subdirectors.delete(subcard)
|
54
60
|
end
|
55
61
|
end
|
56
62
|
end
|
57
|
-
|
58
|
-
# deprecated; left for compatibility reasons because other events refer to this
|
59
|
-
# especially wikirate
|
60
|
-
event :process_subcards, after: :reject_empty_subcards, on: :save do
|
61
|
-
end
|
62
|
-
|
63
|
-
event :store_subcards, after: :store do
|
64
|
-
subcards.each do |subcard|
|
65
|
-
subcard.save! validate: false if subcard != self # unless @draft
|
66
|
-
end
|
67
|
-
|
68
|
-
# ensures that a supercard can access subcards of self
|
69
|
-
# eg. <user> creates <user+*account> creates <user+*account+*status>
|
70
|
-
# <user> changes <user+*account+*status> in event activate_account
|
71
|
-
Card.write_to_soft_cache self
|
72
|
-
end
|
@@ -32,9 +32,7 @@ protected
|
|
32
32
|
def extract_subcard_args! args
|
33
33
|
subcards = args.delete('subcards') || {}
|
34
34
|
args.keys.each do |key|
|
35
|
-
if key =~ /^\+/
|
36
|
-
subcards[key] = args.delete(key)
|
37
|
-
end
|
35
|
+
subcards[key] = args.delete(key) if key =~ /^\+/
|
38
36
|
end
|
39
37
|
subcards
|
40
38
|
end
|
@@ -54,13 +52,13 @@ def extract_type_id! args={}
|
|
54
52
|
return nil
|
55
53
|
end
|
56
54
|
|
57
|
-
|
55
|
+
unless type_id
|
58
56
|
errors.add :type, "#{args[:type] || args[:type_code]} is not a known type."
|
59
57
|
end
|
60
58
|
type_id
|
61
59
|
end
|
62
60
|
|
63
|
-
event :set_content,
|
61
|
+
event :set_content, :store, on: :save do
|
64
62
|
self.db_content = content || '' # necessary?
|
65
63
|
self.db_content = Card::Content.clean!(db_content) if clean_html?
|
66
64
|
@selected_action_id = @selected_content = nil
|
@@ -71,7 +69,7 @@ end
|
|
71
69
|
# FIXME: the following don't really belong here, but they have to come after
|
72
70
|
# the reference stuff. we need to organize a bit!
|
73
71
|
|
74
|
-
event :update_ruled_cards,
|
72
|
+
event :update_ruled_cards, :finalize do
|
75
73
|
if is_rule?
|
76
74
|
# warn "updating ruled cards for #{name}"
|
77
75
|
self.class.clear_rule_cache
|
@@ -79,67 +77,68 @@ event :update_ruled_cards, after: :store do
|
|
79
77
|
set.reset_set_patterns
|
80
78
|
|
81
79
|
if right_id == Card::ReadID && (name_changed? || trash_changed?)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
# trash. could be related to other bugs?
|
87
|
-
in_set = {}
|
88
|
-
if !trash && set && (set_class = set.tag)
|
89
|
-
if (class_id = set_class.id)
|
90
|
-
rule_class_ids = set_patterns.map &:pattern_id
|
91
|
-
# warn "rule_class_id #{class_id}, #{rule_class_ids.inspect}"
|
92
|
-
|
93
|
-
# first update all cards in set that aren't governed by narrower rule
|
94
|
-
Auth.as_bot do
|
95
|
-
cur_index = rule_class_ids.index Card[read_rule_class].id
|
96
|
-
if (rule_class_index = rule_class_ids.index(class_id))
|
97
|
-
set.item_cards(limit: 0).each do |item_card|
|
98
|
-
in_set[item_card.key] = true
|
99
|
-
next if cur_index < rule_class_index
|
100
|
-
if cur_index >= rule_class_index
|
101
|
-
item_card.update_read_rule
|
102
|
-
end
|
103
|
-
end
|
104
|
-
else warn "No current rule index #{class_id}, " \
|
105
|
-
"#{rule_class_ids.inspect}"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
110
|
-
end
|
80
|
+
update_read_ruled_cards set
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
111
84
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
85
|
+
def update_read_rules_of_set_members_not_governed_by_narrower_rules set
|
86
|
+
return {} if trash || !set || !(set_class = set.tag) ||
|
87
|
+
!(class_id = set_class.id)
|
88
|
+
in_set = {}
|
89
|
+
rule_class_ids = set_patterns.map(&:pattern_id)
|
90
|
+
Auth.as_bot do
|
91
|
+
cur_index = rule_class_ids.index Card[read_rule_class].id
|
92
|
+
if (rule_class_index = rule_class_ids.index(class_id))
|
93
|
+
set.item_cards(limit: 0).each do |item_card|
|
94
|
+
in_set[item_card.key] = true
|
95
|
+
next if cur_index < rule_class_index
|
96
|
+
item_card.update_read_rule if cur_index >= rule_class_index
|
118
97
|
end
|
98
|
+
else
|
99
|
+
warn "No current rule index #{class_id}, #{rule_class_ids.inspect}"
|
119
100
|
end
|
120
101
|
end
|
102
|
+
in_set
|
121
103
|
end
|
122
104
|
|
123
|
-
|
105
|
+
def update_read_ruled_cards set
|
106
|
+
self.class.clear_read_rule_cache
|
107
|
+
Card.cache.reset # maybe be more surgical, just Auth.user related
|
108
|
+
expire # probably shouldn't be necessary,
|
109
|
+
# but was sometimes getting cached version when card should be in the
|
110
|
+
# trash. could be related to other bugs?
|
111
|
+
|
112
|
+
updated = update_read_rules_of_set_members_not_governed_by_narrower_rules set
|
113
|
+
|
114
|
+
# then find all cards with me as read_rule_id that were not just updated
|
115
|
+
# and regenerate their read_rules
|
116
|
+
return if new_card?
|
117
|
+
Card.search(read_rule_id: id) do |card|
|
118
|
+
card.update_read_rule unless updated[card.key]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
event :process_read_rule_update_queue, :finalize do
|
124
123
|
Array.wrap(@read_rule_update_queue).each(&:update_read_rule)
|
125
124
|
@read_rule_update_queue = []
|
126
125
|
end
|
127
126
|
|
128
|
-
event :expire_related,
|
127
|
+
event :expire_related, :finalize do
|
129
128
|
subcards.keys.each do |key|
|
130
129
|
Card.cache.soft.delete key
|
131
130
|
end
|
132
|
-
expire
|
133
|
-
|
131
|
+
expire # FIXME: where do we put this. Here it deletes @stage
|
132
|
+
reset_patterns
|
134
133
|
if is_structure?
|
135
134
|
structuree_names.each do |name|
|
136
|
-
Card.expire name
|
135
|
+
Card.expire name
|
137
136
|
end
|
138
137
|
end
|
139
138
|
end
|
140
139
|
|
141
140
|
event :expire_related_names, before: :expire_related, changed: :name do
|
142
141
|
# FIXME: look for opportunities to avoid instantiating the following
|
143
|
-
descendants.each
|
144
|
-
name_referers.each
|
142
|
+
descendants.each(&:expire)
|
143
|
+
name_referers.each(&:expire)
|
145
144
|
end
|
@@ -6,7 +6,7 @@ def delete!
|
|
6
6
|
update_attributes! trash: true unless new_card?
|
7
7
|
end
|
8
8
|
|
9
|
-
event :pull_from_trash,
|
9
|
+
event :pull_from_trash, :prepare_to_store, on: :create do
|
10
10
|
if (trashed_card = Card.find_by_key_and_trash(key, true))
|
11
11
|
# a. (Rails way) tried Card.where(key: 'wagn_bot').select(:id), but it
|
12
12
|
# wouldn't work. This #select generally breaks on cards. I think our
|
@@ -16,6 +16,7 @@ event :pull_from_trash, before: :store, on: :create do
|
|
16
16
|
# likely low ROI, but would be nice to have interface to retrieve cards
|
17
17
|
# from trash...m
|
18
18
|
self.id = trashed_card.id
|
19
|
+
# update instead of create
|
19
20
|
@from_trash = true
|
20
21
|
@new_record = false
|
21
22
|
end
|
@@ -23,13 +24,13 @@ event :pull_from_trash, before: :store, on: :create do
|
|
23
24
|
true
|
24
25
|
end
|
25
26
|
|
26
|
-
event :validate_delete,
|
27
|
-
|
27
|
+
event :validate_delete, :validate, on: :delete do
|
28
|
+
unless codename.blank?
|
28
29
|
errors.add :delete, "#{name} is is a system card. (#{codename})"
|
29
30
|
end
|
30
31
|
|
31
32
|
undeletable_all_rules_tags =
|
32
|
-
%w
|
33
|
+
%w( default style layout create read update delete )
|
33
34
|
# FIXME: HACK! should be configured in the rule
|
34
35
|
|
35
36
|
if junction? && (l = left) && l.codename == 'all' &&
|
@@ -37,20 +38,19 @@ event :validate_delete, before: :approve, on: :delete do
|
|
37
38
|
errors.add :delete, "#{name} is an indestructible rule"
|
38
39
|
end
|
39
40
|
|
40
|
-
if account &&
|
41
|
+
if account && has_edits?
|
41
42
|
errors.add :delete, "Edits have been made with #{name}'s user account.\n" \
|
42
43
|
'Deleting this card would mess up our history.'
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
46
|
-
event :validate_delete_children,
|
47
|
+
event :validate_delete_children, :validate, on: :delete do
|
47
48
|
children.each do |child|
|
48
49
|
child.trash = true
|
49
50
|
add_subcard child
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
end
|
51
|
+
next if child.valid?
|
52
|
+
child.errors.each do |field, message|
|
53
|
+
errors.add field, "can't delete #{child.name}: #{message}"
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
data/mod/01_core/set/all/type.rb
CHANGED
@@ -36,17 +36,15 @@ def get_type_id_from_structure
|
|
36
36
|
t.type_id
|
37
37
|
end
|
38
38
|
|
39
|
-
event :validate_type_change,
|
39
|
+
event :validate_type_change, :validate, on: :update, changed: :type_id do
|
40
40
|
if (c = dup) && c.action == :create && !c.valid?
|
41
|
-
errors.add :type, "of #{
|
42
|
-
"#{
|
41
|
+
errors.add :type, "of #{name} can't be changed; errors creating new " \
|
42
|
+
"#{type_id}: #{c.errors.full_messages * ', '}"
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
event :validate_type,
|
47
|
-
|
48
|
-
errors.add :type, 'No such type'
|
49
|
-
end
|
46
|
+
event :validate_type, :validate, changed: :type_id do
|
47
|
+
errors.add :type, 'No such type' unless type_name
|
50
48
|
|
51
49
|
if (rt = structure) && rt.assigns_type? && type_id != rt.type_id
|
52
50
|
errors.add :type, "can't be changed because #{name} is hard templated " \
|
@@ -54,7 +52,10 @@ event :validate_type, before: :approve, changed: :type_id do
|
|
54
52
|
end
|
55
53
|
end
|
56
54
|
|
57
|
-
event :reset_type_specific_fields,
|
55
|
+
event :reset_type_specific_fields, :finalize do
|
56
|
+
# Example: if you save a card of type Phrase
|
57
|
+
# then reset set patterns for update all
|
58
|
+
# "Phrase+Something+*type plus right" cards
|
58
59
|
wql = { left: { left_id: type_id },
|
59
60
|
right: { codename: 'type_plus_right' }
|
60
61
|
}
|