card 1.104.2 → 1.105.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/README.md +5 -6
- data/VERSION +1 -1
- data/config/environments/development.rb +1 -1
- data/config/environments/test.rb +1 -0
- data/config/initializers/01_core_extensions/object.rb +10 -0
- data/config/initializers/01_core_extensions/string.rb +9 -0
- data/config/initializers/core_extensions.rb +1 -0
- data/db/migrate/{20160122153608_new_indeces.rb → 20160122153608_new_indices.rb} +2 -2
- data/db/migrate/{20200805200729_add_unique_pair_indeces.rb → 20200805200729_add_unique_pair_indices.rb} +1 -1
- data/db/migrate/20221031182227_remove_referee_key_requirement.rb +11 -0
- data/db/migrate_core_cards/20130920291703_update_stylesheets.rb +1 -9
- data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +1 -38
- data/db/migrate_core_cards/20161103154836_update_keys.rb +1 -1
- data/db/migrate_core_cards/20180905061537_migrate_layouts.rb +1 -1
- data/db/migrate_core_cards/20190125125150_add_script_rules_card.rb +1 -1
- data/db/migrate_core_cards/20190320091257_upgrade_recaptcha_to_v3.rb +1 -1
- data/db/migrate_core_cards/20190502130029_add_shark_and_help_desk_role.rb +2 -20
- data/db/migrate_core_cards/20190528131330_enabled_roles.rb +0 -3
- data/db/migrate_core_cards/20190625153616_pointer_overhaul.rb +0 -2
- data/db/migrate_core_cards/20190718140126_add_guides.rb +1 -1
- data/db/migrate_core_cards/20190822093633_move_help_text_to_code.rb +1 -1
- data/db/migrate_core_cards/20190829205148_remove_add_help.rb +1 -1
- data/db/migrate_core_cards/20190902193208_input_type.rb +1 -1
- data/db/migrate_core_cards/20190909104250_add_cardtype_input_types.rb +2 -2
- data/db/schema.rb +2 -2
- data/db/seeds.rb +14 -1
- data/db/version.txt +1 -1
- data/lib/card/auth/current.rb +4 -2
- data/lib/card/auth/permissions.rb +1 -1
- data/lib/card/auth/setup.rb +1 -1
- data/lib/card/auth/token.rb +1 -1
- data/lib/card/cache/persistent.rb +4 -1
- data/lib/card/codename.rb +2 -6
- data/lib/card/content/all.rb +2 -2
- data/lib/card/content/clean.rb +1 -1
- data/lib/card/content/parser.rb +0 -2
- data/lib/card/content.rb +1 -8
- data/lib/card/director/all.rb +67 -0
- data/lib/card/director/card_class.rb +158 -2
- data/lib/card/director/{act_direction.rb → class_methods.rb} +13 -3
- data/lib/card/director/phases.rb +7 -4
- data/lib/card/director/run.rb +51 -50
- data/lib/card/director/stages.rb +18 -16
- data/lib/card/director/store.rb +1 -1
- data/lib/card/director.rb +6 -7
- data/lib/card/env/location.rb +1 -1
- data/lib/card/env/serializable.rb +2 -0
- data/lib/card/env/serialization.rb +2 -3
- data/lib/card/env.rb +2 -2
- data/lib/card/error.rb +9 -5
- data/lib/card/format/error.rb +6 -12
- data/lib/card/format/nest.rb +1 -1
- data/lib/card/format/wrapper.rb +1 -1
- data/lib/card/format.rb +4 -0
- data/lib/card/model/save_helper/save_arguments.rb +0 -44
- data/lib/card/model/save_helper/save_helper_helper.rb +0 -37
- data/lib/card/model/save_helper.rb +0 -82
- data/lib/card/name/all.rb +1 -4
- data/lib/card/name/card_class.rb +0 -2
- data/lib/card/name/name_variants.rb +4 -0
- data/lib/card/name.rb +0 -5
- data/lib/card/query/abstract_query/query_helper.rb +3 -5
- data/lib/card/query/abstract_query/tie.rb +1 -1
- data/lib/card/query/abstract_query.rb +36 -17
- data/lib/card/query/card_class.rb +36 -0
- data/lib/card/query/card_query/custom.rb +12 -0
- data/lib/card/query/card_query/interpretation.rb +1 -0
- data/lib/card/query/card_query/normalization.rb +11 -3
- data/lib/card/query/card_query/reference_attributes.rb +3 -2
- data/lib/card/query/card_query/sorting.rb +5 -4
- data/lib/card/query/card_query.rb +1 -0
- data/lib/card/query/sql_statement/order.rb +12 -10
- data/lib/card/query/sql_statement/where.rb +2 -2
- data/lib/card/query.rb +5 -1
- data/lib/card/reference/all.rb +10 -10
- data/lib/card/set/advanced_api.rb +1 -1
- data/lib/card/set/event/all.rb +9 -1
- data/lib/card/set/event/delayed_event.rb +4 -2
- data/lib/card/set/event/options.rb +1 -1
- data/lib/card/set/event/skip_and_trigger.rb +34 -10
- data/lib/card/set/format/abstract_format/haml_views.rb +3 -3
- data/lib/card/set/format/abstract_format.rb +1 -1
- data/lib/card/set/format/haml_paths.rb +5 -21
- data/lib/card/set/inheritance.rb +4 -4
- data/lib/card/set/pattern/all.rb +1 -1
- data/lib/card/set/pattern/base.rb +1 -1
- data/lib/card/set/pattern/class_methods.rb +4 -4
- data/lib/card/set/trait.rb +1 -1
- data/lib/card/set/type.rb +0 -41
- data/lib/card/setting.rb +0 -1
- data/lib/card/subcards/all.rb +6 -8
- data/lib/card/subcards/args.rb +9 -9
- data/lib/card/view/cache/cache_action.rb +1 -1
- data/lib/card/view/options/visibility.rb +4 -0
- data/lib/card/view/options.rb +1 -0
- data/lib/card/view/permission.rb +12 -4
- data/lib/card/view.rb +4 -0
- data/lib/card.rb +18 -27
- data/lib/cardio/cli.rb +3 -1
- data/lib/cardio/command/application.rb +5 -0
- data/lib/cardio/{commands/command.rb → command/command_base.rb} +2 -2
- data/lib/cardio/{commands → command}/custom.rb +16 -13
- data/lib/cardio/{commands → command}/rake_command/parser.rb +3 -3
- data/lib/cardio/{commands → command}/rake_command.rb +4 -4
- data/lib/cardio/{commands → command}/rspec_command/parser.rb +2 -2
- data/lib/cardio/{commands → command}/rspec_command.rb +7 -9
- data/lib/cardio/command.rb +129 -0
- data/lib/cardio/commands.rb +17 -116
- data/lib/cardio/generators/deck_generator_loader.rb +1 -0
- data/lib/cardio/generators.rb +2 -2
- data/lib/cardio/migration.rb +3 -53
- data/lib/cardio/mod/class_methods.rb +26 -22
- data/lib/cardio/mod/dirs.rb +29 -22
- data/lib/cardio/mod/eat/edibles.rb +22 -15
- data/lib/cardio/mod/eat.rb +18 -14
- data/lib/cardio/mod/load_strategy/set_tmp_files.rb +1 -1
- data/lib/cardio/mod/load_strategy.rb +12 -2
- data/lib/cardio/mod/modfile_api.rb +18 -18
- data/lib/cardio/mod/{poop.rb → sow.rb} +10 -18
- data/lib/cardio/mod.rb +21 -30
- data/lib/cardio/railtie.rb +19 -56
- data/lib/cardio/schema.rb +2 -1
- data/lib/cardio/script_loader.rb +3 -1
- data/lib/cardio/seed.rb +101 -8
- data/lib/cardio/utils.rb +39 -1
- data/lib/generators/deck/deck_generator.rb +5 -2
- data/lib/generators/deck/templates/config/puma.rb +1 -1
- data/lib/generators/deck/templates/script/decko_rspec +1 -1
- data/lib/generators/deck/templates/simplecov.rb.erb +10 -8
- data/lib/generators/mod/USAGE +1 -1
- data/lib/generators/set/USAGE +2 -2
- data/mod/core/data/fixtures/real/card_actions.yml +78 -0
- data/{db/seed/new → mod/core/data/fixtures/real}/card_acts.yml +2 -2
- data/{db/seed/new → mod/core/data/fixtures/real}/card_changes.yml +0 -0
- data/mod/core/data/fixtures/real/card_references.yml +8 -0
- data/mod/core/data/fixtures/real/cards.yml +135 -0
- data/{db/seed/new → mod/core/data/fixtures/real}/schema_migrations.yml +0 -0
- data/{db/seed/new → mod/core/data/fixtures/real}/schema_migrations_core_cards.yml +0 -0
- data/{db/seed/new → mod/core/data/fixtures/real}/schema_migrations_deck.yml +0 -0
- data/{db/seed/new → mod/core/data/fixtures/real}/schema_migrations_deck_cards.yml +0 -0
- data/mod/core/data/real.yml +79 -0
- data/mod/core/data/test/cardtype.yml +38 -0
- data/mod/core/data/test/sample.yml +50 -0
- data/mod/core/data/test/user.yml +41 -0
- data/mod/core/data/test.yml +79 -28
- data/mod/core/lib/tasks/card/assets.rake +17 -0
- data/{lib → mod/core/lib}/tasks/card/create.rake +0 -0
- data/{lib → mod/core/lib}/tasks/card/migrate.rake +4 -0
- data/{lib → mod/core/lib}/tasks/card/mod.rake +4 -3
- data/mod/core/lib/tasks/card/seed.rake +58 -0
- data/mod/core/lib/tasks/card.rake +115 -0
- data/mod/core/locales/de.yml +4 -0
- data/mod/core/locales/en.yml +13 -0
- data/mod/core/set/all/admin.rb +14 -0
- data/mod/core/set/all/codename.rb +4 -0
- data/mod/core/set/all/content.rb +8 -4
- data/mod/core/set/all/{abort.rb → result.rb} +11 -15
- data/mod/core/set/all/states.rb +15 -1
- data/mod/core/set/all/trash.rb +25 -73
- data/mod/core/set/all/type.rb +2 -2
- data/mod/core/set/all/utils.rb +3 -87
- data/mod/core/set/right/autoname.rb +2 -0
- data/mod/core/set/self/admin/warning_alert.haml +3 -0
- data/mod/core/set/self/admin.rb +173 -0
- data/mod/core/set/type/cardtype.rb +2 -0
- data/mod/core/set_pattern/02_all_plus.rb +1 -1
- data/mod/core/set_pattern/05_rstar.rb +1 -1
- data/mod/core/set_pattern/06_rule.rb +1 -1
- data/mod/core/set_pattern/07_right.rb +1 -1
- data/mod/core/set_pattern/08_type_plus_right.rb +1 -1
- data/mod/core/spec/set/all/assign_attributes_spec.rb +3 -3
- data/mod/core/spec/set/all/autoname_spec.rb +25 -0
- data/mod/core/spec/set/all/codename_spec.rb +1 -1
- data/mod/core/spec/set/all/name_events_spec.rb +43 -66
- data/mod/core/spec/set/all/trash_spec.rb +149 -68
- data/mod/{admin → core}/spec/set/self/admin_spec.rb +25 -22
- data/mod/core/spec/set/self/trash_spec.rb +5 -0
- metadata +88 -251
- data/db/migrate_core_cards/20130411211600_delete_old_related_tab_cards.rb +0 -18
- data/db/migrate_core_cards/20130419215612_import_help_text.rb +0 -13
- data/db/migrate_core_cards/20130823192433_add_style_cards.rb +0 -100
- data/db/migrate_core_cards/20130910183318_move_styles_to_content.rb +0 -11
- data/db/migrate_core_cards/20130927191728_account_events.rb +0 -20
- data/db/migrate_core_cards/20131016172445_common_css_patch.rb +0 -9
- data/db/migrate_core_cards/20140110193325_reset_account_request_type.rb +0 -8
- data/db/migrate_core_cards/20140512155840_add_script_cards.rb +0 -86
- data/db/migrate_core_cards/20140629222005_add_email_cards.rb +0 -132
- data/db/migrate_core_cards/20140725180118_config_card_updates.rb +0 -9
- data/db/migrate_core_cards/20141111083921_delete_machine_output.rb +0 -7
- data/db/migrate_core_cards/20141115034214_config_descriptions_etc.rb +0 -14
- data/db/migrate_core_cards/20141119001955_make_symlinks_relative.rb +0 -15
- data/db/migrate_core_cards/20141120120605_fix_notification_html_message.rb +0 -10
- data/db/migrate_core_cards/20141216155251_add_more_following_cards.rb +0 -26
- data/db/migrate_core_cards/20141230204340_uri_codename.rb +0 -13
- data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +0 -76
- data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +0 -41
- data/db/migrate_core_cards/20150326205655_bootswatch_themes.rb +0 -36
- data/db/migrate_core_cards/20150331135745_new_card_menu.rb +0 -8
- data/db/migrate_core_cards/20150501010515_responsive_sidebar.rb +0 -11
- data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +0 -24
- data/db/migrate_core_cards/20150528084659_add_session_cardtype.rb +0 -18
- data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +0 -18
- data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +0 -12
- data/db/migrate_core_cards/20150610180019_add_recaptcha_key_and_admin_info_cards.rb +0 -58
- data/db/migrate_core_cards/20150627205133_fix_script_bootstrap_card_type.rb +0 -7
- data/db/migrate_core_cards/20150702130543_remove_edit_toolbar_pinned.rb +0 -9
- data/db/migrate_core_cards/20150708224756_add_list_cards.rb +0 -29
- data/db/migrate_core_cards/20150903130006_attachment_upload_cards.rb +0 -15
- data/db/migrate_core_cards/20150910085603_remove_performance_log_card.rb +0 -10
- data/db/migrate_core_cards/20151120180631_add_token_expiration.rb +0 -7
- data/db/migrate_core_cards/20160801143221_change_bootstrap_card_type_to_scss.rb +0 -10
- data/db/migrate_core_cards/20160804112510_reorganize_scripts.rb +0 -27
- data/db/migrate_core_cards/20160908154210_add_trash_card.rb +0 -7
- data/db/migrate_core_cards/20161102202156_tweak_recaptcha_setting_cards.rb +0 -17
- data/db/migrate_core_cards/20170209132834_email_test_context.rb +0 -49
- data/db/migrate_core_cards/20170314175313_add_notification_event_card.rb +0 -20
- data/db/migrate_core_cards/20170515101262_add_advanced_edit_cards.rb +0 -20
- data/db/migrate_core_cards/20170608083819_add_full_width_layout_card.rb +0 -23
- data/db/migrate_core_cards/20170608200649_add_input_options_codename.rb +0 -8
- data/db/migrate_core_cards/20180423120222_add_mod_styles_card.rb +0 -20
- data/db/migrate_core_cards/20180508210903_add_json_type.rb +0 -10
- data/db/migrate_core_cards/20180515175726_add_codenames.rb +0 -8
- data/db/migrate_core_cards/20180712042655_head_rule.rb +0 -13
- data/db/migrate_core_cards/20181120200937_update_layout.rb +0 -7
- data/db/migrate_core_cards/20190204195039_add_rule_card.rb +0 -10
- data/db/migrate_core_cards/20190321085735_wagn_to_decko_logo.rb +0 -11
- data/db/migrate_core_cards/20190417142612_reorganize_scripts_2.rb +0 -17
- data/db/migrate_core_cards/20190424100531_update_credit_image.rb +0 -76
- data/db/migrate_core_cards/20190424101004_add_read_anyone_rules.rb +0 -13
- data/db/migrate_core_cards/20190503122739_update_pristine_data.rb +0 -18
- data/db/migrate_core_cards/20190605133556_tweak_config_cards.rb +0 -10
- data/db/migrate_core_cards/20190618110446_add_dropdown_divider.rb +0 -8
- data/db/migrate_core_cards/20190621143156_add_role_assign_permissions.rb +0 -9
- data/db/migrate_core_cards/20190710090209_homepage_tweaks.rb +0 -13
- data/db/migrate_core_cards/20190820155833_update_cardtype_type_structure.rb +0 -7
- data/db/migrate_core_cards/20190823220018_cleanup_for_decko_1_0.rb +0 -19
- data/db/migrate_core_cards/20190826132738_add_more_guides.rb +0 -7
- data/db/migrate_core_cards/20190829093961_cardtype_grouping.rb +0 -16
- data/db/migrate_core_cards/20190830131820_setting_settings_aside.rb +0 -17
- data/db/migrate_core_cards/20190902161223_add_style_media.rb +0 -7
- data/db/migrate_core_cards/20190918200115_ensure_description_card.rb +0 -13
- data/db/migrate_core_cards/20191008201046_fixture_fix.rb +0 -11
- data/db/migrate_core_cards/20191028135243_add_link_editor_to_tiny_mce_config.rb +0 -9
- data/db/migrate_core_cards/20191118145629_codename_fixes.rb +0 -5
- data/db/migrate_core_cards/20200821231558_add_nest_list_type.rb +0 -9
- data/db/migrate_core_cards/data/1.11_help_text.json +0 -410
- data/db/migrate_core_cards/data/1.12_stylesheets/classic_cards.scss +0 -104
- data/db/migrate_core_cards/data/1.12_stylesheets/common.scss +0 -228
- data/db/migrate_core_cards/data/1.12_stylesheets/right_sidebar.scss +0 -27
- data/db/migrate_core_cards/data/1.12_stylesheets/traditional.scss +0 -143
- data/db/migrate_core_cards/data/1.13_config_text.json +0 -32
- data/db/migrate_core_cards/data/1.14_config_descriptions_etc.json +0 -77
- data/db/migrate_core_cards/data/bootstrap_layout.json +0 -96
- data/db/migrate_core_cards/data/cards/Xaccount +0 -22
- data/db/migrate_core_cards/data/cards/Xaccount_setting-Xright-Xstructure +0 -12
- data/db/migrate_core_cards/data/cards/Xall-Xlayout +0 -1
- data/db/migrate_core_cards/data/cards/Xcredit +0 -2
- data/db/migrate_core_cards/data/cards/Xfooter +0 -3
- data/db/migrate_core_cards/data/cards/Xgetting_started +0 -31
- data/db/migrate_core_cards/data/cards/Xgetting_started-shark +0 -66
- data/db/migrate_core_cards/data/cards/Xgetting_started_link +0 -6
- data/db/migrate_core_cards/data/cards/Xheader +0 -19
- data/db/migrate_core_cards/data/cards/Xhome +0 -1
- data/db/migrate_core_cards/data/cards/Xlogo +0 -1
- data/db/migrate_core_cards/data/cards/Xmain_menu +0 -2
- data/db/migrate_core_cards/data/cards/Xrecaptcha_setting-Xself-Xstructure +0 -1
- data/db/migrate_core_cards/data/cards/Xsidebar +0 -7
- data/db/migrate_core_cards/data/cards/Xstructure-Xright-Xguide +0 -12
- data/db/migrate_core_cards/data/cards/Xtitle +0 -1
- data/db/migrate_core_cards/data/cards/administrator-dashboard +0 -23
- data/db/migrate_core_cards/data/cards/administrator-description +0 -1
- data/db/migrate_core_cards/data/cards/anyone_signed_in-dashboard +0 -0
- data/db/migrate_core_cards/data/cards/cardtype-Xtype-Xguide +0 -24
- data/db/migrate_core_cards/data/cards/cardtype-Xtype-Xstructure +0 -3
- data/db/migrate_core_cards/data/cards/default_layout +0 -6
- data/db/migrate_core_cards/data/cards/full_width_layout +0 -5
- data/db/migrate_core_cards/data/cards/help_desk-dashboard +0 -7
- data/db/migrate_core_cards/data/cards/help_desk-description +0 -1
- data/db/migrate_core_cards/data/cards/home +0 -2
- data/db/migrate_core_cards/data/cards/home-Xself-Xlayout +0 -1
- data/db/migrate_core_cards/data/cards/home-original +0 -22
- data/db/migrate_core_cards/data/cards/home_layout +0 -6
- data/db/migrate_core_cards/data/cards/left_sidebar_layout +0 -6
- data/db/migrate_core_cards/data/cards/menu +0 -1
- data/db/migrate_core_cards/data/cards/right_thin_sidebar_layout +0 -8
- data/db/migrate_core_cards/data/cards/role-Xtype-Xstructure +0 -2
- data/db/migrate_core_cards/data/cards/shark-dashboard +0 -19
- data/db/migrate_core_cards/data/cards/shark-description +0 -1
- data/db/migrate_core_cards/data/cards/shark_menu +0 -2
- data/db/migrate_core_cards/data/cards.yml +0 -138
- data/db/migrate_core_cards/data/decko_logo.svg +0 -1
- data/db/migrate_core_cards/data/mailer/follower_notification_email.html +0 -9
- data/db/migrate_core_cards/data/mailer/follower_notification_email.txt +0 -11
- data/db/migrate_core_cards/data/mailer/mail_config.json +0 -22
- data/db/migrate_core_cards/data/mailer/password_reset_email.html +0 -13
- data/db/migrate_core_cards/data/mailer/password_reset_email.txt +0 -11
- data/db/migrate_core_cards/data/mailer/signup_alert_email.html +0 -7
- data/db/migrate_core_cards/data/mailer/signup_alert_email.txt +0 -5
- data/db/migrate_core_cards/data/mailer/verification_email.html +0 -12
- data/db/migrate_core_cards/data/mailer/verification_email.txt +0 -9
- data/db/migrate_core_cards/data/skin_images.json +0 -91
- data/db/migrate_core_cards/data/themes/bootstrap_default/_bootswatch.scss +0 -0
- data/db/migrate_core_cards/data/themes/bootstrap_default/_variables.scss +0 -867
- data/db/migrate_core_cards/data/themes/cerulean/_bootswatch.scss +0 -125
- data/db/migrate_core_cards/data/themes/cerulean/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/cosmo/_bootswatch.scss +0 -237
- data/db/migrate_core_cards/data/themes/cosmo/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/cyborg/_bootswatch.scss +0 -210
- data/db/migrate_core_cards/data/themes/cyborg/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/darkly/_bootswatch.scss +0 -330
- data/db/migrate_core_cards/data/themes/darkly/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/flatly/_bootswatch.scss +0 -313
- data/db/migrate_core_cards/data/themes/flatly/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/journal/_bootswatch.scss +0 -120
- data/db/migrate_core_cards/data/themes/journal/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/lumen/_bootswatch.scss +0 -496
- data/db/migrate_core_cards/data/themes/lumen/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/paper/_bootswatch.scss +0 -607
- data/db/migrate_core_cards/data/themes/paper/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/readable/_bootswatch.scss +0 -174
- data/db/migrate_core_cards/data/themes/readable/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/sandstone/_bootswatch.scss +0 -194
- data/db/migrate_core_cards/data/themes/sandstone/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/simplex/_bootswatch.scss +0 -142
- data/db/migrate_core_cards/data/themes/simplex/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/slate/_bootswatch.scss +0 -417
- data/db/migrate_core_cards/data/themes/slate/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/spacelab/_bootswatch.scss +0 -137
- data/db/migrate_core_cards/data/themes/spacelab/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/superhero/_bootswatch.scss +0 -332
- data/db/migrate_core_cards/data/themes/superhero/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/united/_bootswatch.scss +0 -42
- data/db/migrate_core_cards/data/themes/united/_variables.scss +0 -861
- data/db/migrate_core_cards/data/themes/yeti/_bootswatch.scss +0 -437
- data/db/migrate_core_cards/data/themes/yeti/_variables.scss +0 -861
- data/db/seed/README.md +0 -2
- data/db/seed/new/card_actions.yml +0 -5913
- data/db/seed/new/card_references.yml +0 -6532
- data/db/seed/new/cards.yml +0 -14595
- data/db/seed/test/fixtures/card_actions.yml +0 -8153
- data/db/seed/test/fixtures/card_acts.yml +0 -1039
- data/db/seed/test/fixtures/card_changes.yml +0 -230
- data/db/seed/test/fixtures/card_references.yml +0 -8471
- data/db/seed/test/fixtures/cards.yml +0 -20171
- data/db/seed/test/fixtures/file1.txt +0 -1
- data/db/seed/test/fixtures/file2.txt +0 -1
- data/db/seed/test/fixtures/mao2.jpg +0 -0
- data/db/seed/test/fixtures/rails.gif +0 -0
- data/db/seed/test/fixtures/schema_migrations.yml +0 -67
- data/db/seed/test/fixtures/schema_migrations_core_cards.yml +0 -347
- data/db/seed/test/fixtures/schema_migrations_deck.yml +0 -1
- data/db/seed/test/fixtures/schema_migrations_deck_cards.yml +0 -5
- data/db/test_seed.rb +0 -322
- data/lib/card/content/truncate.rb +0 -67
- data/lib/card/director/card_methods.rb +0 -45
- data/lib/card/file_card_creator/abstract_file_card/migration_file.rb +0 -50
- data/lib/card/file_card_creator/abstract_file_card/ruby_file.rb +0 -30
- data/lib/card/file_card_creator/abstract_file_card/source_file.rb +0 -36
- data/lib/card/file_card_creator/abstract_file_card.rb +0 -44
- data/lib/card/file_card_creator/haml_card.rb +0 -42
- data/lib/card/file_card_creator/output_helper.rb +0 -53
- data/lib/card/file_card_creator/script_card.rb +0 -35
- data/lib/card/file_card_creator/style_card.rb +0 -25
- data/lib/card/file_card_creator.rb +0 -25
- data/lib/card/name/fields_and_traits.rb +0 -42
- data/lib/cardio/commands/application.rb +0 -10
- data/lib/cardio/migration/import/import_data/card_attributes.rb +0 -64
- data/lib/cardio/migration/import/import_data/card_content.rb +0 -30
- data/lib/cardio/migration/import/import_data.rb +0 -119
- data/lib/cardio/migration/import/merger.rb +0 -46
- data/lib/cardio/migration/import.rb +0 -125
- data/lib/tasks/card.rake +0 -65
- data/mod/admin/locales/de.yml +0 -4
- data/mod/admin/locales/en.yml +0 -4
- data/mod/admin/set/all/admin.rb +0 -16
- data/mod/admin/set/self/admin.rb +0 -144
- data/mod/admin/set/self/admin_info.rb +0 -40
- data/mod/admin/set/self/debugger.rb +0 -3
- data/mod/admin/spec/set/self/admin_info_spec.rb +0 -9
- data/mod/core/data/production.yml +0 -7
- data/mod/core/set/all/collection.rb +0 -53
- data/mod/core/spec/set/all/collection_spec.rb +0 -170
- data/mod/core/spec/set/all/utils_spec.rb +0 -5
- data/mod/standard/data/files/favicon/image-icon.png +0 -0
- data/mod/standard/data/files/favicon/image-large.png +0 -0
- data/mod/standard/data/files/favicon/image-medium.png +0 -0
- data/mod/standard/data/files/favicon/image-original.png +0 -0
- data/mod/standard/data/files/favicon/image-small.png +0 -0
- data/mod/standard/data/files/logo/image-original.svg +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c27e643a91315f8bfd6fc3fba7c744848203ba221637e03808a35f7d21869bec
|
|
4
|
+
data.tar.gz: 6792846d1b8853ab5681db115b60a5fdb0753771b90af28572b00208ef1a147d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 736423e17a671d1cdd5281fea9ba90ceaf6f37ab55bcbe52ac5ef8f0c91649a93d9e6e38d24fd841dba3966379162fdd55e0a3b71be7bab9fb7697c40fafef1b
|
|
7
|
+
data.tar.gz: 4e6de86094dfad8e899383d005bb78fa8d9a21d0e73f4d2799c49db683b8a08a37d711fb45be7325240fb77d0a284f9539206f35ccb107e29bdc6766fc1470d6
|
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
# @title README - Card
|
|
3
3
|
-->
|
|
4
|
-
#
|
|
4
|
+
# An intro to Decko Monkeying
|
|
5
5
|
|
|
6
6
|
New folks should start here after playing with Decko but before digging into
|
|
7
7
|
code.
|
|
@@ -42,11 +42,10 @@ want.
|
|
|
42
42
|
|
|
43
43
|
Ruby-on-Rails developers reading this will find lots of familiar patterns in
|
|
44
44
|
Decko, which indeed depends upon rails gems. **Although Decko is a Rails
|
|
45
|
-
descendant and owes a ton to the Rails community, it is not Rails.**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Decko's core pattern is subdividing existing things into new Sets.
|
|
45
|
+
descendant and owes a ton to the Rails community, it is not Rails.** Rails developers'
|
|
46
|
+
primary activities are adding and editing core MVC (Model-View-Controller) structures.
|
|
47
|
+
Decko Monkeys, by contrast, mostly work by code associated with *subsets* of the
|
|
48
|
+
Card model called *Sets*.
|
|
50
49
|
|
|
51
50
|
Deck-coders do create lots of card views (though they're quite different from
|
|
52
51
|
Rails views), but we rarely if ever create new controllers or ActiveRecord
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.15.0
|
|
@@ -71,7 +71,7 @@ Cardio.application.class.configure do
|
|
|
71
71
|
# with SQLite, MySQL, and PostgreSQL)
|
|
72
72
|
# config.active_record.auto_explain_threshold_in_seconds = 0.5
|
|
73
73
|
|
|
74
|
-
# if File.
|
|
74
|
+
# if File.exist?(File.join(Rails.root,'tmp', 'debug.txt'))
|
|
75
75
|
# require 'ruby-debug'
|
|
76
76
|
# Debugger.wait_connection = true
|
|
77
77
|
# Debugger.start_remote
|
data/config/environments/test.rb
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
module CoreExtensions
|
|
2
2
|
module Object
|
|
3
|
+
def number?
|
|
4
|
+
true if Float(self)
|
|
5
|
+
rescue StandardError
|
|
6
|
+
false
|
|
7
|
+
end
|
|
8
|
+
|
|
3
9
|
def deep_clone
|
|
4
10
|
case self
|
|
5
11
|
when Integer, Float, NilClass, FalseClass, TrueClass, Symbol
|
|
@@ -34,6 +40,10 @@ module CoreExtensions
|
|
|
34
40
|
Card.id self
|
|
35
41
|
end
|
|
36
42
|
|
|
43
|
+
def codename
|
|
44
|
+
Card::Codename[card_id]
|
|
45
|
+
end
|
|
46
|
+
|
|
37
47
|
def name?
|
|
38
48
|
# Although we want to check for instances of class Card::Name we can't use that
|
|
39
49
|
# class because it is renewed with every request
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# add new
|
|
2
|
-
class
|
|
1
|
+
# add new indices for datetime and ref_type fields
|
|
2
|
+
class NewIndices < ActiveRecord::Migration[4.2]
|
|
3
3
|
def change
|
|
4
4
|
add_index "card_references", ["ref_type"],
|
|
5
5
|
name: "card_references_ref_type_index" # using: :btree
|
|
@@ -2,14 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
class UpdateStylesheets < Cardio::Migration::Core
|
|
4
4
|
def up
|
|
5
|
-
|
|
6
|
-
%w[common traditional].each do |sheetname|
|
|
7
|
-
card = Card["style: #{sheetname}"]
|
|
8
|
-
card.update! content: File.read("#{dir}/#{sheetname}.scss") if card&.pristine?
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
if (c = Card["*all+*style+file"])
|
|
12
|
-
c.delete!
|
|
13
|
-
end
|
|
5
|
+
Card["*all+*style+file"]&.delete!
|
|
14
6
|
end
|
|
15
7
|
end
|
|
@@ -5,38 +5,6 @@ end
|
|
|
5
5
|
|
|
6
6
|
class UserDataToCards < Cardio::Migration::Core
|
|
7
7
|
def up
|
|
8
|
-
puts "adding new codename cards"
|
|
9
|
-
%i[password token salt status signin stats].each do |codename|
|
|
10
|
-
Card.create! name: "*#{codename}", codename: codename
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
puts "setting read permissions for account cards (Administrator)"
|
|
14
|
-
%i[password token salt status email account].each do |codename|
|
|
15
|
-
rule_name = [codename, :right, :read].map { |code| Card[code].name } * "+"
|
|
16
|
-
rule_card = Card.fetch rule_name, new: {}
|
|
17
|
-
rule_card.content = "[[Administrator]]"
|
|
18
|
-
rule_card.save!
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
puts "making email and password fields default to Phrase cards"
|
|
22
|
-
%i[email password].each do |field|
|
|
23
|
-
rulename = [field, :right, :default].map { |code| Card[code].name } * "+"
|
|
24
|
-
Card.create! name: rulename, type_id: Card::PhraseID
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
puts "signin permissions"
|
|
28
|
-
%i[read update].each do |setting|
|
|
29
|
-
rulename = [:signin, :self, setting].map { |code| Card[code].name } * "+"
|
|
30
|
-
Card.create! name: rulename, content: "[[#{Card[:anyone].name}]]"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
puts "supporting legacy handling of +*email on User cards"
|
|
34
|
-
oldname = %i[email right structure].map { |code| Card[code].name } * "+"
|
|
35
|
-
newname = %i[user email type_plus_right structure].map do |code|
|
|
36
|
-
Card[code].name
|
|
37
|
-
end * "+"
|
|
38
|
-
Card[oldname].update! name: newname
|
|
39
|
-
|
|
40
8
|
puts "importing all user details (for those not in trash) into +*account attributes"
|
|
41
9
|
User.all.each do |user|
|
|
42
10
|
base = Card[user.card_id]
|
|
@@ -45,7 +13,7 @@ class UserDataToCards < Cardio::Migration::Core
|
|
|
45
13
|
puts "~ importing details for #{base.name}"
|
|
46
14
|
date_args = { created_at: user.created_at, updated_at: user.updated_at }
|
|
47
15
|
%i[email salt password status].each do |field|
|
|
48
|
-
cardname =
|
|
16
|
+
cardname = [base.name, :account, field].cardname
|
|
49
17
|
user_field = (field == :password ? :crypted_password : field)
|
|
50
18
|
next unless (content = user.send(user_field))
|
|
51
19
|
|
|
@@ -58,8 +26,3 @@ class UserDataToCards < Cardio::Migration::Core
|
|
|
58
26
|
end
|
|
59
27
|
end
|
|
60
28
|
end
|
|
61
|
-
|
|
62
|
-
# FIXME
|
|
63
|
-
# before 1.13!
|
|
64
|
-
# but add read permission migration for *stats and
|
|
65
|
-
# structure for *stats+*right
|
|
@@ -39,7 +39,7 @@ class MigrateLayouts < Cardio::Migration::Core
|
|
|
39
39
|
|
|
40
40
|
each_layout_set layout_card do |set_name|
|
|
41
41
|
puts "creating head rule for '#{set_name}'"
|
|
42
|
-
|
|
42
|
+
Card.ensure name: [set_name, :head], content: head, type_id: Card::HtmlID
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -19,7 +19,7 @@ class UpgradeRecaptchaToV3 < Cardio::Migration::Core
|
|
|
19
19
|
codename: "recaptcha_#{new_name}_key"
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Card.ensure name: [Card[:recaptcha_settings].name, "minimum score"],
|
|
23
23
|
codename: "recaptcha_minimum_score",
|
|
24
24
|
type_id: Card::NumberID
|
|
25
25
|
end
|
|
@@ -2,13 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
class AddSharkAndHelpDeskRole < Cardio::Migration::Core
|
|
4
4
|
def up
|
|
5
|
-
# delete_code_card :eagle
|
|
6
|
-
ensure_role "Shark", codename: "shark"
|
|
7
|
-
ensure_role "Help Desk", codename: "help_desk"
|
|
8
|
-
|
|
9
|
-
ensure_card "*account settings",
|
|
10
|
-
codename: "account_settings", type_id: Card::BasicID
|
|
11
|
-
|
|
12
5
|
update_card! "Decker Menu", name: "Shark Menu"
|
|
13
6
|
update_card! :ace, name: "*ace"
|
|
14
7
|
update_card! "*google_analytics_key", name: "*google analytics key"
|
|
@@ -19,17 +12,6 @@ class AddSharkAndHelpDeskRole < Cardio::Migration::Core
|
|
|
19
12
|
remove_redundant_permissions
|
|
20
13
|
add_shark_permissions
|
|
21
14
|
add_help_desk_permissions
|
|
22
|
-
|
|
23
|
-
merge_cards %w[role+*type+*structure
|
|
24
|
-
administrator+dashboard administrator+description
|
|
25
|
-
shark+dashboard shark+description
|
|
26
|
-
help_desk+dashboard help_desk+description
|
|
27
|
-
anyone_signed_in+dashboard
|
|
28
|
-
*recaptcha_settings+*self+*structure
|
|
29
|
-
*account_settings+*right+*structure
|
|
30
|
-
*getting_started+shark
|
|
31
|
-
right_thin_sidebar_layout left_sidebar_layout
|
|
32
|
-
*getting_started]
|
|
33
15
|
end
|
|
34
16
|
|
|
35
17
|
private
|
|
@@ -87,7 +69,7 @@ class AddSharkAndHelpDeskRole < Cardio::Migration::Core
|
|
|
87
69
|
|
|
88
70
|
def add_help_desk_permissions
|
|
89
71
|
%w[*account *email *password *salt *status *token].each do |name|
|
|
90
|
-
|
|
72
|
+
Card.ensure name: [name, :right, :read], content: "Help Desk"
|
|
91
73
|
end
|
|
92
74
|
|
|
93
75
|
["*account", "*email", "*password", "*help", "*add help", "*status",
|
|
@@ -98,7 +80,7 @@ class AddSharkAndHelpDeskRole < Cardio::Migration::Core
|
|
|
98
80
|
|
|
99
81
|
def ensure_cud_permissions name, set, content, actions: %i[create update delete]
|
|
100
82
|
actions.each do |action|
|
|
101
|
-
|
|
83
|
+
Card.ensure name: [name, set, action].compact, content: content
|
|
102
84
|
end
|
|
103
85
|
end
|
|
104
86
|
end
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
class EnabledRoles < Cardio::Migration::Core
|
|
4
4
|
def up
|
|
5
|
-
ensure_trait "*enabled roles", "enabled_roles",
|
|
6
|
-
default: { type_id: Card::SessionID }
|
|
7
|
-
|
|
8
5
|
Card.search type_id: Card::SessionID do |card|
|
|
9
6
|
card.update_column :trash, true unless card.codename.present?
|
|
10
7
|
end
|
|
@@ -11,8 +11,6 @@ class PointerOverhaul < Cardio::Migration::Core
|
|
|
11
11
|
codename: "mirror_list"
|
|
12
12
|
end
|
|
13
13
|
update "Pointer", name: "List", codename: "list" unless Card::Codename[:list]
|
|
14
|
-
ensure_code_card "Pointer", type_id: Card::CardtypeID
|
|
15
|
-
ensure_code_card "Link list", type_id: Card::CardtypeID
|
|
16
14
|
Card::Cache.reset_all
|
|
17
15
|
ensure_list_card "list+*input+*type plus right+*options",
|
|
18
16
|
content: ["List", "Multiselect", "Checkbox", "Filtered list"]
|
|
@@ -6,7 +6,7 @@ class MoveHelpTextToCode < Cardio::Migration::Core
|
|
|
6
6
|
Card::Cache.reset_all
|
|
7
7
|
|
|
8
8
|
# avoid that "list" as input option gets the description of the cardtype "list"
|
|
9
|
-
|
|
9
|
+
Card.ensure name: %i[input right options_label], content: "options description"
|
|
10
10
|
|
|
11
11
|
remove_setting_help_rules
|
|
12
12
|
remove_search_help_rules
|
|
@@ -6,7 +6,7 @@ class RemoveAddHelp < Cardio::Migration::Core
|
|
|
6
6
|
left: { type_id: Card::SetID }).each do |card|
|
|
7
7
|
next if Card.exists? [card.left, :help]
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Card.ensure name: [card.left, :help], content: card.content
|
|
10
10
|
end
|
|
11
11
|
delete_code_card :add_help
|
|
12
12
|
Card::Cache.reset_all
|
|
@@ -9,7 +9,7 @@ class InputType < Cardio::Migration::Core
|
|
|
9
9
|
|
|
10
10
|
Card::Cache.reset_all
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Card.ensure name: %i[all content_option_view], content: "smart_label"
|
|
13
13
|
Card.search right: :content_option_view, left: { not: :all }, &:delete!
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
class AddCardtypeInputTypes < Cardio::Migration::Core
|
|
4
4
|
def up
|
|
5
|
-
|
|
5
|
+
Card.ensure name: %i[input_type right default],
|
|
6
6
|
type_id: Card::PointerID
|
|
7
|
-
|
|
7
|
+
Card.ensure name: %i[content_option_view right default],
|
|
8
8
|
type_id: "smart label"
|
|
9
9
|
end
|
|
10
10
|
end
|
data/db/schema.rb
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
#
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
|
12
12
|
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
|
13
|
+
ActiveRecord::Schema.define(version: 2022_10_31_182227) do
|
|
14
14
|
|
|
15
15
|
create_table "card_actions", id: :integer, charset: "utf8mb3", force: :cascade do |t|
|
|
16
16
|
t.integer "card_id"
|
|
@@ -42,7 +42,7 @@ ActiveRecord::Schema.define(version: 2021_11_28_040849) do
|
|
|
42
42
|
|
|
43
43
|
create_table "card_references", id: :integer, charset: "utf8mb3", force: :cascade do |t|
|
|
44
44
|
t.integer "referer_id", default: 0, null: false
|
|
45
|
-
t.string "referee_key", default: ""
|
|
45
|
+
t.string "referee_key", default: ""
|
|
46
46
|
t.integer "referee_id"
|
|
47
47
|
t.string "ref_type", limit: 1, default: "", null: false
|
|
48
48
|
t.integer "is_present"
|
data/db/seeds.rb
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
require "cardio/seed"
|
|
2
2
|
require "active_record/fixtures"
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
Cardio::Seed.load
|
|
5
|
+
|
|
6
|
+
Card::Cache.reset_all
|
|
7
|
+
|
|
8
|
+
# get rid of bad constants
|
|
9
|
+
Card::Codename.reset_cache
|
|
10
|
+
Card::Codename.generate_id_constants
|
|
11
|
+
|
|
12
|
+
# TODO: explain why this is necessary
|
|
13
|
+
# (card:seed:build breaks without it)
|
|
14
|
+
# I think it has something to do with Card being partially loaded by the
|
|
15
|
+
# ActiveRecord::FixtureSet handling in Cardio::Seed.load, but if that's the case
|
|
16
|
+
# this might not be a complete enough fix.
|
|
4
17
|
Cardio::Mod::Loader.load_mods
|
data/db/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
20221031182227
|
data/lib/card/auth/current.rb
CHANGED
|
@@ -26,8 +26,10 @@ class Card
|
|
|
26
26
|
alias_method :current, :current_card
|
|
27
27
|
|
|
28
28
|
def current_roles
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
return [] unless signed_in?
|
|
30
|
+
|
|
31
|
+
@current_roles ||= [:anyone_signed_in.cardname] +
|
|
32
|
+
Set::Self::Role.role_ids(current_id).map(&:cardname)
|
|
31
33
|
end
|
|
32
34
|
|
|
33
35
|
# set current user in process and session
|
|
@@ -20,7 +20,7 @@ class Card
|
|
|
20
20
|
Auth.as_bot do
|
|
21
21
|
Card.search(
|
|
22
22
|
{ type: Card::CardtypeID, return: :name,
|
|
23
|
-
not: { codename: ["in"] +
|
|
23
|
+
not: { codename: ["in"] + Set.basket[:non_createable_types] } },
|
|
24
24
|
"find createable types"
|
|
25
25
|
)
|
|
26
26
|
end
|
data/lib/card/auth/setup.rb
CHANGED
|
@@ -42,7 +42,7 @@ class Card
|
|
|
42
42
|
|
|
43
43
|
def user_account_cql
|
|
44
44
|
# every deck starts with two accounts: WagnBot and Anonymous
|
|
45
|
-
{
|
|
45
|
+
{ right: :account, creator_id: ["ne", Card::WagnBotID] }
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
def user_account_count
|
data/lib/card/auth/token.rb
CHANGED
|
@@ -25,6 +25,7 @@ class Card
|
|
|
25
25
|
# @option opts [String] :database
|
|
26
26
|
def initialize opts
|
|
27
27
|
@store = opts[:store]
|
|
28
|
+
@file_cache = @store.is_a? ActiveSupport::Cache::FileStore
|
|
28
29
|
@klass = opts[:class]
|
|
29
30
|
@class_key = @klass.to_s.to_name.key
|
|
30
31
|
@database = opts[:database] || Cardio.database
|
|
@@ -72,7 +73,9 @@ class Card
|
|
|
72
73
|
# @param key [String]
|
|
73
74
|
# @return [String]
|
|
74
75
|
def full_key key
|
|
75
|
-
"#{prefix}/#{key}"
|
|
76
|
+
fk = "#{prefix}/#{key}"
|
|
77
|
+
fk.tr! "*", "X" if @file_cache # save for windows fs
|
|
78
|
+
fk
|
|
76
79
|
end
|
|
77
80
|
|
|
78
81
|
def read key
|
data/lib/card/codename.rb
CHANGED
|
@@ -44,11 +44,7 @@ class Card
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def name codename=nil
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
name! codename
|
|
50
|
-
rescue Error::CodenameNotFound => _e
|
|
51
|
-
yield if block_given?
|
|
47
|
+
id(codename)&.cardname
|
|
52
48
|
end
|
|
53
49
|
|
|
54
50
|
def card codename
|
|
@@ -86,7 +82,7 @@ class Card
|
|
|
86
82
|
# @param codename [Symbol, String]
|
|
87
83
|
# @return [Card::Name]
|
|
88
84
|
def name! codename
|
|
89
|
-
|
|
85
|
+
id!(codename)&.cardname
|
|
90
86
|
end
|
|
91
87
|
|
|
92
88
|
def generate_id_constants
|
data/lib/card/content/all.rb
CHANGED
|
@@ -16,7 +16,7 @@ class Card
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def standard_content
|
|
19
|
-
db_content || (new_card?
|
|
19
|
+
db_content || (new_card? ? default_content : "")
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def standardize_content value
|
|
@@ -24,7 +24,7 @@ class Card
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def structured_content
|
|
27
|
-
structure &&
|
|
27
|
+
structure && default_content
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def refresh_content
|
data/lib/card/content/clean.rb
CHANGED
data/lib/card/content/parser.rb
CHANGED
data/lib/card/content.rb
CHANGED
|
@@ -8,7 +8,6 @@ class Card
|
|
|
8
8
|
#
|
|
9
9
|
class Content < SimpleDelegator
|
|
10
10
|
extend Clean
|
|
11
|
-
extend Truncate
|
|
12
11
|
|
|
13
12
|
Chunk # trigger autoload
|
|
14
13
|
|
|
@@ -150,7 +149,7 @@ class Card
|
|
|
150
149
|
|
|
151
150
|
def unstash_chunks content, stashed_chunks
|
|
152
151
|
Chunk::Nest.gsub content do |nest_content|
|
|
153
|
-
number?
|
|
152
|
+
nest_content.number? ? stashed_chunks[nest_content.to_i] : "{{#{nest_content}}}"
|
|
154
153
|
end
|
|
155
154
|
end
|
|
156
155
|
|
|
@@ -161,11 +160,5 @@ class Card
|
|
|
161
160
|
format_or_card
|
|
162
161
|
end
|
|
163
162
|
end
|
|
164
|
-
|
|
165
|
-
def number? str
|
|
166
|
-
true if Float(str)
|
|
167
|
-
rescue StandardError
|
|
168
|
-
false
|
|
169
|
-
end
|
|
170
163
|
end
|
|
171
164
|
end
|
data/lib/card/director/all.rb
CHANGED
|
@@ -2,6 +2,31 @@ class Card
|
|
|
2
2
|
class Director
|
|
3
3
|
# director-related Card instance methods
|
|
4
4
|
module All
|
|
5
|
+
attr_writer :director
|
|
6
|
+
|
|
7
|
+
delegate :validation_phase, :storage_phase, :integration_phase,
|
|
8
|
+
:validation_phase_callback?, :integration_phase_callback?, to: :director
|
|
9
|
+
|
|
10
|
+
def director
|
|
11
|
+
@director ||= Director.fetch self
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def prepare_for_phases
|
|
15
|
+
reset_patterns
|
|
16
|
+
include_set_modules
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def identify_action
|
|
20
|
+
@action =
|
|
21
|
+
if trash && trash_changed?
|
|
22
|
+
:delete
|
|
23
|
+
elsif new_card?
|
|
24
|
+
:create
|
|
25
|
+
else
|
|
26
|
+
:update
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
5
30
|
def act options={}, &block
|
|
6
31
|
if act_card
|
|
7
32
|
add_to_act options, &block
|
|
@@ -39,11 +64,53 @@ class Card
|
|
|
39
64
|
act { super }
|
|
40
65
|
end
|
|
41
66
|
|
|
67
|
+
def save_if_needed
|
|
68
|
+
validate
|
|
69
|
+
save if save_needed?
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def save_if_needed!
|
|
73
|
+
validate
|
|
74
|
+
save! if save_needed?
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def save_needed?
|
|
78
|
+
# (
|
|
79
|
+
new? || test_field_changing? || subcards.cards.any?(&:save_needed?)
|
|
80
|
+
# ).tap do |r|
|
|
81
|
+
# # binding.pry if r
|
|
82
|
+
# puts "save needed for #{name}".yellow if r && !new?
|
|
83
|
+
# end
|
|
84
|
+
end
|
|
85
|
+
|
|
42
86
|
alias_method :update_attributes, :update
|
|
43
87
|
alias_method :update_attributes!, :update!
|
|
44
88
|
|
|
89
|
+
def restore_changes_information
|
|
90
|
+
# restores changes for integration phase
|
|
91
|
+
# (rails cleared them in an after_create/after_update hook which is
|
|
92
|
+
# executed before the integration phase)
|
|
93
|
+
return unless saved_changes.present?
|
|
94
|
+
|
|
95
|
+
@mutations_from_database = mutations_before_last_save
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def clear_action_specific_attributes
|
|
99
|
+
self.class.action_specific_attributes.each do |attr|
|
|
100
|
+
instance_variable_set "@#{attr}", nil
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
45
104
|
private
|
|
46
105
|
|
|
106
|
+
def test_field_changing?
|
|
107
|
+
save_test_fields.any? { |fld| send "#{fld}_is_changing?" }
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def save_test_fields
|
|
111
|
+
%i[name db_content trash type_id codename]
|
|
112
|
+
end
|
|
113
|
+
|
|
47
114
|
def start_new_act &block
|
|
48
115
|
self.director = nil
|
|
49
116
|
Director.run_act(self) do
|