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
data/mod/01_core/set/all/haml.rb
CHANGED
@@ -1,41 +1,35 @@
|
|
1
|
-
JUNK_INIT_ARGS = %w
|
2
|
-
|
3
|
-
module ClassMethods
|
4
|
-
def new args
|
5
|
-
args = (args || {}).stringify_keys
|
6
|
-
JUNK_INIT_ARGS.each { |a| args.delete(a) }
|
7
|
-
%w
|
8
|
-
args.delete('content') if args['attach'] # should not be handled here!
|
9
|
-
super args
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def initialize args
|
14
|
-
args['name'] = args['name'].to_s
|
15
|
-
args['db_content'] = args.delete('content') if args['content']
|
16
|
-
@supercard = args.delete 'supercard' # must come before name =
|
17
|
-
skip_modules = args.delete 'skip_modules'
|
18
|
-
skip_type_lookup = args['skip_type_lookup']
|
19
|
-
|
20
|
-
super args # ActiveRecord #initialize
|
21
|
-
if !type_id && !skip_type_lookup
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
self
|
37
|
-
end
|
38
|
-
|
39
|
-
event :initialize_success_object, before: :handle do
|
40
|
-
Env[:success] = Success.new(cardname, Env.params[:success])
|
41
|
-
end
|
1
|
+
JUNK_INIT_ARGS = %w( missing skip_virtual id ).freeze
|
2
|
+
|
3
|
+
module ClassMethods
|
4
|
+
def new args={}, _options={}
|
5
|
+
args = (args || {}).stringify_keys
|
6
|
+
JUNK_INIT_ARGS.each { |a| args.delete(a) }
|
7
|
+
%w( type type_code ).each { |k| args.delete(k) if args[k].blank? }
|
8
|
+
args.delete('content') if args['attach'] # should not be handled here!
|
9
|
+
super args
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize args={}
|
14
|
+
args['name'] = args['name'].to_s
|
15
|
+
args['db_content'] = args.delete('content') if args['content']
|
16
|
+
@supercard = args.delete 'supercard' # must come before name =
|
17
|
+
skip_modules = args.delete 'skip_modules'
|
18
|
+
skip_type_lookup = args['skip_type_lookup']
|
19
|
+
|
20
|
+
super args # ActiveRecord #initialize
|
21
|
+
self.type_id = get_type_id_from_structure if !type_id && !skip_type_lookup
|
22
|
+
include_set_modules unless skip_modules
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def include_set_modules
|
27
|
+
unless @set_mods_loaded
|
28
|
+
set_modules.each do |m|
|
29
|
+
singleton_class.send :include, m
|
30
|
+
end
|
31
|
+
assign_set_specific_attributes
|
32
|
+
@set_mods_loaded = true
|
33
|
+
end
|
34
|
+
self
|
35
|
+
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
event :discard_deleted_locations,
|
1
|
+
event :discard_deleted_locations, in: :finalize, on: :delete do
|
2
2
|
Env.discard_locations_for self
|
3
|
-
if success.target == self
|
4
|
-
success.target = :previous
|
5
|
-
end
|
3
|
+
success.target = :previous if success.target == self
|
6
4
|
end
|
7
5
|
|
8
|
-
event :save_current_location, before: :
|
6
|
+
event :save_current_location, before: :show_page, on: :read do
|
9
7
|
Env.save_location self
|
10
8
|
end
|
data/mod/01_core/set/all/name.rb
CHANGED
@@ -4,9 +4,7 @@ module ClassMethods
|
|
4
4
|
def uniquify_name name, rename=:new
|
5
5
|
return name unless Card.exists?(name)
|
6
6
|
uniq_name = "#{name} 1"
|
7
|
-
while Card.exists?(uniq_name)
|
8
|
-
uniq_name.next!
|
9
|
-
end
|
7
|
+
uniq_name.next! while Card.exists?(uniq_name)
|
10
8
|
if rename == :old
|
11
9
|
# name conflict resolved; original name can be used
|
12
10
|
Card[name].update_attributes! name: uniq_name,
|
@@ -38,8 +36,10 @@ def name= newname
|
|
38
36
|
reset_patterns_if_rule
|
39
37
|
reset_patterns
|
40
38
|
end
|
41
|
-
|
42
|
-
|
39
|
+
if @director
|
40
|
+
subcards.each do |subcard|
|
41
|
+
subcard.name = subcard.cardname.replace_part name, newname
|
42
|
+
end
|
43
43
|
end
|
44
44
|
|
45
45
|
write_attribute :name, cardname.s
|
@@ -166,8 +166,8 @@ def repair_key
|
|
166
166
|
key_blocker.save
|
167
167
|
end
|
168
168
|
|
169
|
-
saved = (self.key = correct_key) &&
|
170
|
-
saved ||= (self.cardname = current_key) &&
|
169
|
+
saved = (self.key = correct_key) && save!
|
170
|
+
saved ||= (self.cardname = current_key) && save!
|
171
171
|
|
172
172
|
if saved
|
173
173
|
descendants.each(&:repair_key)
|
@@ -182,50 +182,7 @@ rescue
|
|
182
182
|
self
|
183
183
|
end
|
184
184
|
|
185
|
-
event :
|
186
|
-
errors.add :codename, 'only admins can set codename' unless Auth.always_ok?
|
187
|
-
end
|
188
|
-
|
189
|
-
event :validate_unique_codename, after: :permit_codename do
|
190
|
-
if codename.present? && errors.empty? &&
|
191
|
-
Card.find_by_codename(codename).present?
|
192
|
-
errors.add :codename, "codename #{codename} already in use"
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
event :validate_name, before: :approve, on: :save do
|
197
|
-
cdname = name.to_name
|
198
|
-
if name.length > 255
|
199
|
-
errors.add :name, 'is too long (255 character maximum)'
|
200
|
-
elsif cdname.blank?
|
201
|
-
errors.add :name, "can't be blank"
|
202
|
-
elsif name_changed?
|
203
|
-
# Rails.logger.debug "valid name #{card.name.inspect} New #{name.inspect}"
|
204
|
-
|
205
|
-
unless cdname.valid?
|
206
|
-
errors.add :name, 'may not contain any of the following characters: ' \
|
207
|
-
"#{Card::Name.banned_array * ' '}"
|
208
|
-
end
|
209
|
-
# this is to protect against using a plus card as a tag
|
210
|
-
if cdname.junction? && simple? && id &&
|
211
|
-
Auth.as_bot { Card.count_by_wql right_id: id } > 0
|
212
|
-
errors.add :name, "#{name} in use as a tag"
|
213
|
-
end
|
214
|
-
|
215
|
-
# validate uniqueness of name
|
216
|
-
condition_sql = 'cards.key = ? and trash=?'
|
217
|
-
condition_params = [cdname.key, false]
|
218
|
-
unless new_record?
|
219
|
-
condition_sql << ' AND cards.id <> ?'
|
220
|
-
condition_params << id
|
221
|
-
end
|
222
|
-
if (c = Card.find_by(condition_sql, *condition_params))
|
223
|
-
errors.add :name, "must be unique; '#{c.name}' already exists."
|
224
|
-
end
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
event :set_autoname, before: :validate_name, on: :create do
|
185
|
+
event :set_autoname, :prepare_to_validate, on: :create do
|
229
186
|
if name.blank? && (autoname_card = rule_card(:autoname))
|
230
187
|
self.name = autoname autoname_card.content
|
231
188
|
# FIXME: should give placeholder in approve phase
|
@@ -234,34 +191,28 @@ event :set_autoname, before: :validate_name, on: :create do
|
|
234
191
|
end
|
235
192
|
end
|
236
193
|
|
237
|
-
event :
|
238
|
-
if key.empty?
|
239
|
-
errors.add :key, 'cannot be blank' if errors.empty?
|
240
|
-
elsif key != cardname.key
|
241
|
-
errors.add :key, "wrong key '#{key}' for name #{name}"
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
event :set_name, before: :store, changed: :name do
|
194
|
+
event :set_name, :store, changed: :name do
|
246
195
|
Card.expire name
|
247
196
|
Card.expire name_was
|
197
|
+
end
|
198
|
+
|
199
|
+
event :set_left_and_right, :store,
|
200
|
+
changed: :name, on: :save do
|
248
201
|
if cardname.junction?
|
249
202
|
[:left, :right].each do |side|
|
250
203
|
sidename = cardname.send "#{side}_name"
|
251
|
-
# warn "sidename #{name} / #{name_was} / #{cardname},
|
252
|
-
# #{side}: #{sidename}"
|
253
204
|
sidecard = Card[sidename]
|
254
205
|
|
255
206
|
# eg, renaming A to A+B
|
256
207
|
old_name_in_way = (sidecard && sidecard.id == id)
|
257
208
|
suspend_name(sidename) if old_name_in_way
|
258
|
-
|
209
|
+
side_id_or_card =
|
259
210
|
if !sidecard || old_name_in_way
|
260
|
-
|
211
|
+
add_subcard(sidename.s)
|
261
212
|
else
|
262
|
-
sidecard
|
263
|
-
end
|
264
|
-
|
213
|
+
sidecard.id
|
214
|
+
end
|
215
|
+
send "#{side}_id=", side_id_or_card
|
265
216
|
end
|
266
217
|
else
|
267
218
|
self.left_id = self.right_id = nil
|
@@ -285,7 +236,7 @@ def suspend_name name
|
|
285
236
|
Card.where(id: id).update_all(name: tmp_name, key: tmp_name)
|
286
237
|
end
|
287
238
|
|
288
|
-
event :cascade_name_changes,
|
239
|
+
event :cascade_name_changes, :finalize, on: :update, changed: :name do
|
289
240
|
des = descendants
|
290
241
|
@descendants = nil # reset
|
291
242
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
event :permit_codename, :validate,
|
2
|
+
on: :update, changed: :codename do
|
3
|
+
errors.add :codename, 'only admins can set codename' unless Auth.always_ok?
|
4
|
+
validate_uniqueness_of_codename
|
5
|
+
end
|
6
|
+
|
7
|
+
event :validate_uniqueness_of_codename do
|
8
|
+
return unless codename.present? && errors.empty? &&
|
9
|
+
Card.find_by_codename(codename).present?
|
10
|
+
errors.add :codename, "codename #{codename} already in use"
|
11
|
+
end
|
12
|
+
|
13
|
+
event :validate_name, :validate,
|
14
|
+
on: :save, changed: :name do
|
15
|
+
validate_legality_of_name
|
16
|
+
return if errors.any?
|
17
|
+
validate_uniqueness_of_name
|
18
|
+
end
|
19
|
+
|
20
|
+
event :validate_uniqueness_of_name do
|
21
|
+
# validate uniqueness of name
|
22
|
+
condition_sql = 'cards.key = ? and trash=?'
|
23
|
+
condition_params = [cardname.key, false]
|
24
|
+
unless new_record?
|
25
|
+
condition_sql << ' AND cards.id <> ?'
|
26
|
+
condition_params << id
|
27
|
+
end
|
28
|
+
if (c = Card.find_by(condition_sql, *condition_params))
|
29
|
+
errors.add :name, "must be unique; '#{c.name}' already exists."
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
event :validate_legality_of_name do
|
34
|
+
if name.length > 255
|
35
|
+
errors.add :name, 'is too long (255 character maximum)'
|
36
|
+
elsif cardname.blank?
|
37
|
+
errors.add :name, "can't be blank"
|
38
|
+
else
|
39
|
+
unless cardname.valid?
|
40
|
+
errors.add :name, 'may not contain any of the following characters: ' \
|
41
|
+
"#{Card::Name.banned_array * ' '}"
|
42
|
+
end
|
43
|
+
# this is to protect against using a plus card as a tag
|
44
|
+
return unless cardname.junction? && simple? && id &&
|
45
|
+
Auth.as_bot { Card.count_by_wql right_id: id } > 0
|
46
|
+
errors.add :name, "#{name} in use as a tag"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
event :validate_key, after: :validate_name, on: :save do
|
51
|
+
if key.empty?
|
52
|
+
errors.add :key, 'cannot be blank' if errors.empty?
|
53
|
+
elsif key != cardname.key
|
54
|
+
errors.add :key, "wrong key '#{key}' for name #{name}"
|
55
|
+
end
|
56
|
+
end
|
@@ -24,13 +24,13 @@ def reset_patterns_if_rule saving=false
|
|
24
24
|
|
25
25
|
# FIXME: should be in right/read.rb
|
26
26
|
if saving && right.id == Card::ReadID
|
27
|
-
|
27
|
+
add_to_read_rule_update_queue(set.item_cards limit: 0)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
def safe_set_keys
|
33
|
-
patterns.map(&:safe_key).reverse *
|
33
|
+
patterns.map(&:safe_key).reverse * ' '
|
34
34
|
end
|
35
35
|
|
36
36
|
def set_modules
|
@@ -98,7 +98,7 @@ end
|
|
98
98
|
|
99
99
|
def permitted? action
|
100
100
|
return if Card.config.read_only
|
101
|
-
return true if action != :comment
|
101
|
+
return true if action != :comment && Auth.always_ok?
|
102
102
|
|
103
103
|
permitted_ids = who_can action
|
104
104
|
if action == :comment && Auth.always_ok?
|
@@ -110,9 +110,7 @@ def permitted? action
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def permit action, verb=nil
|
113
|
-
if Card.config.read_only # not called by ok_to_read
|
114
|
-
deny_because 'Currently in read-only mode'
|
115
|
-
end
|
113
|
+
deny_because 'Currently in read-only mode' if Card.config.read_only # not called by ok_to_read
|
116
114
|
|
117
115
|
return if permitted? action
|
118
116
|
verb ||= action.to_s
|
@@ -127,10 +125,9 @@ def ok_to_create
|
|
127
125
|
# left is supercard; create permissions will get checked there.
|
128
126
|
next if side == :left && @superleft
|
129
127
|
part_card = send side, new: {}
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
128
|
+
next unless part_card && part_card.new_card? # if no card, there must be other errors
|
129
|
+
unless part_card.ok? :create
|
130
|
+
deny_because you_cant("create #{part_card.name}")
|
134
131
|
end
|
135
132
|
end
|
136
133
|
end
|
@@ -161,12 +158,12 @@ def ok_to_comment
|
|
161
158
|
deny_because 'No comments allowed on structured content' if structure
|
162
159
|
end
|
163
160
|
|
164
|
-
event :clear_read_rule,
|
161
|
+
event :clear_read_rule, :store, on: :delete do
|
165
162
|
self.read_rule_id = self.read_rule_class = nil
|
166
163
|
end
|
167
164
|
|
168
|
-
event :set_read_rule,
|
169
|
-
|
165
|
+
event :set_read_rule, :store,
|
166
|
+
on: :save, changed: [:type_id, :name] do
|
170
167
|
read_rule_id, read_rule_class = permission_rule_id_and_class(:read)
|
171
168
|
self.read_rule_id = read_rule_id
|
172
169
|
self.read_rule_class = read_rule_class
|
@@ -188,20 +185,18 @@ end
|
|
188
185
|
def update_read_rule
|
189
186
|
Card.record_timestamps = false
|
190
187
|
reset_patterns # why is this needed?
|
191
|
-
|
188
|
+
rcard_id, rclass = permission_rule_id_and_class :read
|
192
189
|
# these two are just to make sure vals are correct on current object
|
193
|
-
self.read_rule_id =
|
190
|
+
self.read_rule_id = rcard_id
|
194
191
|
self.read_rule_class = rclass
|
195
|
-
Card.where(id: id).update_all read_rule_id:
|
192
|
+
Card.where(id: id).update_all read_rule_id: rcard_id, read_rule_class: rclass
|
196
193
|
expire_hard
|
197
194
|
|
198
195
|
# currently doing a brute force search for every card that may be impacted.
|
199
196
|
# may want to optimize(?)
|
200
197
|
Auth.as_bot do
|
201
198
|
fields.each do |field|
|
202
|
-
if field.rule(:read) == '_left'
|
203
|
-
field.update_read_rule
|
204
|
-
end
|
199
|
+
field.update_read_rule if field.rule(:read) == '_left'
|
205
200
|
end
|
206
201
|
end
|
207
202
|
|
@@ -209,12 +204,11 @@ ensure
|
|
209
204
|
Card.record_timestamps = true
|
210
205
|
end
|
211
206
|
|
212
|
-
|
213
207
|
def add_to_read_rule_update_queue updates
|
214
208
|
@read_rule_update_queue = Array.wrap(@read_rule_update_queue).concat updates
|
215
209
|
end
|
216
210
|
|
217
|
-
event :check_permissions,
|
211
|
+
event :check_permissions, :validate do
|
218
212
|
task =
|
219
213
|
if @action != :delete && comment # will be obviated by new comment handling
|
220
214
|
:comment
|
@@ -256,7 +250,7 @@ def have_recaptcha_keys?
|
|
256
250
|
end
|
257
251
|
end
|
258
252
|
|
259
|
-
event :recaptcha,
|
253
|
+
event :recaptcha, :validate do
|
260
254
|
if !@supercard && !Env[:recaptcha_used] && recaptcha_on?
|
261
255
|
Env[:recaptcha_used] = true
|
262
256
|
Env[:controller].verify_recaptcha model: self, attribute: :captcha
|
@@ -1,208 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# to process any further events.
|
4
|
-
#
|
5
|
-
# Three statuses are supported:
|
6
|
-
#
|
7
|
-
# failure: adds an error, returns false on save
|
8
|
-
# success: no error, returns true on save
|
9
|
-
# triumph: similar to success, but if called on a subcard
|
10
|
-
# it causes the entire action to abort (not just the subcard)
|
11
|
-
|
12
|
-
def abort status, msg = 'action canceled'
|
13
|
-
if status == :failure && errors.empty?
|
14
|
-
errors.add :abort, msg
|
15
|
-
elsif Hash === status && status[:success]
|
16
|
-
success << status[:success]
|
17
|
-
status = :success
|
18
|
-
end
|
19
|
-
raise Card::Abort.new(status, msg)
|
20
|
-
end
|
21
|
-
|
22
|
-
def abortable
|
23
|
-
yield
|
24
|
-
rescue Card::Abort => e
|
25
|
-
if e.status == :triumph
|
26
|
-
@supercard ? raise(e) : true
|
27
|
-
elsif e.status == :success
|
28
|
-
if @supercard
|
29
|
-
@supercard.subcards.delete(key)
|
30
|
-
end
|
31
|
-
true
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def valid_subcard?
|
36
|
-
abortable { valid? }
|
37
|
-
end
|
38
|
-
|
39
|
-
# this is an override of standard rails behavior that rescues abort
|
40
|
-
# makes it so that :success abortions do not rollback
|
41
|
-
def with_transaction_returning_status
|
42
|
-
status = nil
|
43
|
-
self.class.transaction do
|
44
|
-
add_to_transaction
|
45
|
-
status = abortable { yield }
|
46
|
-
raise ActiveRecord::Rollback unless status
|
47
|
-
end
|
48
|
-
status
|
49
|
-
end
|
50
|
-
|
51
|
-
# perhaps above should be in separate module?
|
52
|
-
# ~~~~~~
|
53
|
-
|
54
|
-
PHASES = {}
|
55
|
-
[:prepare, :approve, :store, :stored, :extend, :subsequent]
|
56
|
-
.each_with_index do |phase, i|
|
57
|
-
PHASES[phase] = i
|
58
|
-
end
|
59
|
-
|
60
|
-
def run_phase phase, &block
|
61
|
-
@phase = phase
|
62
|
-
@subphase = :before
|
63
|
-
if block_given?
|
64
|
-
block.call
|
65
|
-
else
|
66
|
-
run_callbacks phase
|
67
|
-
end
|
68
|
-
@subphase = :after
|
69
|
-
end
|
70
|
-
|
71
|
-
def simulate_phase opts, &block
|
72
|
-
@phase
|
73
|
-
end
|
74
|
-
|
75
|
-
def phase
|
76
|
-
@phase || (@supercard && @supercard.phase)
|
77
|
-
end
|
78
|
-
|
79
|
-
def subphase
|
80
|
-
@subphase || (@supercard && @supercard.subphase)
|
81
|
-
end
|
82
|
-
|
83
|
-
def prepare
|
84
|
-
@action = identify_action
|
85
|
-
# the following should really happen when type, name etc are changed
|
1
|
+
def prepare_for_phases
|
2
|
+
identify_action
|
86
3
|
reset_patterns
|
87
4
|
include_set_modules
|
88
|
-
run_phase :prepare
|
89
|
-
rescue => e
|
90
|
-
rescue_event e
|
91
5
|
end
|
92
6
|
|
93
|
-
def
|
94
|
-
|
95
|
-
run_phase :approve
|
96
|
-
expire_pieces if errors.any?
|
97
|
-
errors.empty?
|
98
|
-
rescue => e
|
99
|
-
rescue_event e
|
7
|
+
def run_phases?
|
8
|
+
director.main? && !skip_phases
|
100
9
|
end
|
101
10
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
when new_card? then :create
|
106
|
-
else :update
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def store
|
111
|
-
run_phase :store do
|
112
|
-
run_callbacks :store do
|
113
|
-
yield # unless @draft
|
114
|
-
@virtual = false
|
115
|
-
end
|
116
|
-
end
|
117
|
-
run_phase :stored
|
118
|
-
rescue => e
|
119
|
-
rescue_event e
|
120
|
-
ensure
|
121
|
-
@from_trash = @last_content_action_id = nil
|
122
|
-
end
|
123
|
-
|
124
|
-
def extend
|
125
|
-
run_phase :extend
|
126
|
-
run_phase :subsequent
|
127
|
-
rescue => e
|
128
|
-
rescue_event e
|
129
|
-
ensure
|
130
|
-
@action = nil
|
131
|
-
end
|
132
|
-
|
133
|
-
def rescue_event e
|
134
|
-
@action = nil
|
135
|
-
expire_pieces
|
136
|
-
subcards.each(&:expire_pieces)
|
137
|
-
raise e
|
138
|
-
# rescue Card::Cancel
|
139
|
-
# false
|
140
|
-
end
|
141
|
-
|
142
|
-
def phase_ok? opts
|
143
|
-
phase && (
|
144
|
-
(opts[:during] && in?(opts[:during])) ||
|
145
|
-
(opts[:before] && before?(opts[:before])) ||
|
146
|
-
(opts[:after] && after?(opts[:after])) ||
|
147
|
-
true # no phase restriction in opts
|
148
|
-
)
|
149
|
-
end
|
150
|
-
|
151
|
-
def before? allowed_phase
|
152
|
-
PHASES[allowed_phase] > PHASES[phase] ||
|
153
|
-
(PHASES[allowed_phase] == PHASES[phase] && subphase == :before)
|
154
|
-
end
|
155
|
-
|
156
|
-
def after? allowed_phase
|
157
|
-
PHASES[allowed_phase] < PHASES[phase] ||
|
158
|
-
(PHASES[allowed_phase] == PHASES[phase] && subphase == :after)
|
159
|
-
end
|
160
|
-
|
161
|
-
def in? allowed_phase
|
162
|
-
(allowed_phase.is_a?(Array) && allowed_phase.include?(phase)) ||
|
163
|
-
allowed_phase == phase
|
164
|
-
end
|
165
|
-
|
166
|
-
event :notable_exception_raised do
|
167
|
-
Rails.logger.debug "BT: #{Card::Error.current.backtrace * "\n "}"
|
168
|
-
end
|
169
|
-
|
170
|
-
def event_applies? opts
|
171
|
-
on_condition_applies?(opts[:on]) &&
|
172
|
-
changed_condition_applies?(opts[:changed]) &&
|
173
|
-
when_condition_applies?(opts[:when])
|
174
|
-
end
|
175
|
-
|
176
|
-
def on_condition_applies? action
|
177
|
-
if action
|
178
|
-
Array.wrap(action).member? @action
|
179
|
-
else
|
180
|
-
true
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
def changed_condition_applies? db_column
|
185
|
-
if db_column
|
186
|
-
db_column =
|
187
|
-
case db_column.to_sym
|
188
|
-
when :content then 'db_content'
|
189
|
-
when :type then 'type_id'
|
190
|
-
else db_column.to_s
|
191
|
-
end
|
192
|
-
@action != :delete && changes[db_column]
|
193
|
-
else
|
194
|
-
true
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
def when_condition_applies? block
|
199
|
-
if block
|
200
|
-
block.call self
|
201
|
-
else
|
202
|
-
true
|
203
|
-
end
|
204
|
-
end
|
11
|
+
delegate :validation_phase, to: :director
|
12
|
+
delegate :storage_phase, to: :director
|
13
|
+
delegate :integration_phase, to: :director
|
205
14
|
|
206
|
-
def
|
207
|
-
|
15
|
+
def clean_up
|
16
|
+
Card::DirectorRegister.clear
|
208
17
|
end
|