card 1.104.2 → 1.105.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 +161 -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/fetch/card_class.rb +19 -13
- 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 +3 -8
- 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 +13 -6
- data/lib/card/reference/all.rb +10 -10
- data/lib/card/set/abstract.rb +1 -0
- 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/wrapper.rb +0 -1
- data/lib/card/set/format/abstract_format.rb +5 -4
- data/lib/card/set/format/haml_paths.rb +5 -21
- data/lib/card/set/format.rb +46 -20
- data/lib/card/set/helpers.rb +49 -36
- 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/registrar.rb +3 -5
- data/lib/card/set/required_field.rb +3 -2
- data/lib/card/set/trait.rb +1 -1
- data/lib/card/set/type.rb +1 -41
- data/lib/card/set.rb +67 -21
- 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 +48 -39
- 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 +17 -13
- data/lib/cardio/{commands → command}/rake_command/parser.rb +3 -3
- data/lib/cardio/{commands → command}/rake_command.rb +5 -5
- data/lib/cardio/{commands → command}/rspec_command/parser.rb +9 -6
- 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 +28 -24
- data/lib/cardio/mod/dirs.rb +30 -23
- data/lib/cardio/mod/eat/edibles.rb +43 -16
- data/lib/cardio/mod/eat.rb +20 -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} +25 -33
- data/lib/cardio/mod.rb +46 -73
- data/lib/cardio/railtie.rb +21 -58
- 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/mod/mod_generator.rb +5 -5
- data/lib/generators/set/USAGE +2 -2
- data/mod/core/{locales → config/locales}/de.yml +4 -0
- data/mod/core/{locales → config/locales}/en.yml +13 -0
- 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/mod/core/data/fixtures/real/card_references.yml +8 -0
- data/mod/core/data/fixtures/real/cards.yml +135 -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/{lib → mod/core/lib}/tasks/card/migrate.rake +4 -0
- data/{lib → mod/core/lib}/tasks/card/mod.rake +9 -5
- data/mod/core/lib/tasks/card/seed.rake +60 -0
- data/mod/core/lib/tasks/card.rake +119 -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 +21 -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 -253
- 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/create.rake +0 -81
- 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
- /data/{db/seed/new → mod/core/data/fixtures/real}/card_changes.yml +0 -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/db/test_seed.rb
DELETED
@@ -1,322 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
|
3
|
-
require "timecop"
|
4
|
-
require "active_support/core_ext/numeric/time"
|
5
|
-
|
6
|
-
# noinspection RubyResolve
|
7
|
-
class SharedData
|
8
|
-
extend Card::Model::SaveHelper
|
9
|
-
|
10
|
-
USERS = [
|
11
|
-
"Joe Admin", "Joe User", "Joe Camel", "Sample User", "No count",
|
12
|
-
"u1", "u2", "u3",
|
13
|
-
"Big Brother", "Optic fan", "Sunglasses fan", "Narcissist"
|
14
|
-
].freeze
|
15
|
-
|
16
|
-
CARDTYPE_COUNT = 44
|
17
|
-
|
18
|
-
class << self
|
19
|
-
def create_user name, args
|
20
|
-
args[:subcards] = account_args args if args[:email]
|
21
|
-
|
22
|
-
if name == "Joe Admin"
|
23
|
-
super name, args
|
24
|
-
else
|
25
|
-
Card::Auth.with("joe_admin") { super name, args }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def account_args hash
|
30
|
-
{ "+*account" => { "+*email" => hash.delete(:email),
|
31
|
-
"+*password" => hash.delete(:password) || "joe_pass" } }
|
32
|
-
end
|
33
|
-
|
34
|
-
# noinspection RubyResolve
|
35
|
-
def add_test_data
|
36
|
-
Card::Cache.reset_all
|
37
|
-
Card::Env.reset
|
38
|
-
Card::Auth.as_bot
|
39
|
-
|
40
|
-
user_and_role_cards
|
41
|
-
|
42
|
-
# generic, shared attribute card
|
43
|
-
ensure_card "color"
|
44
|
-
|
45
|
-
create "signup alert email+*to", "signups@decko.org"
|
46
|
-
# CREATE A CARD OF EACH TYPE
|
47
|
-
|
48
|
-
no_samples = %w[user sign_up set number mirror_list mirrored_list file image
|
49
|
-
customized_bootswatch_skin alias]
|
50
|
-
Card::Auth.createable_types.each do |type|
|
51
|
-
next if no_samples.include? type.to_name.key
|
52
|
-
|
53
|
-
create type: type, name: "Sample #{type}"
|
54
|
-
end
|
55
|
-
|
56
|
-
%w[c1 c2 c3].each do |name|
|
57
|
-
create name
|
58
|
-
end
|
59
|
-
|
60
|
-
create_layout_type "lay out", "Greatest {{_main|title: Callahan!; view: labeled}}"
|
61
|
-
create_pointer "stacks", %w[horizontal vertical]
|
62
|
-
create_pointer "stacks+*self+*layout", "lay out"
|
63
|
-
create "horizontal"
|
64
|
-
create_pointer "vertical"
|
65
|
-
|
66
|
-
create_pointer "friends+*right+*default"
|
67
|
-
create_search_type "friends+*right+*content options", '{"type":"User"}'
|
68
|
-
|
69
|
-
create_pointer "joes"
|
70
|
-
create "joes+*self+*input type", "filtered list"
|
71
|
-
create "joes+*self+*content options", ["Joe Admin", "Joe User", "Joe Camel"]
|
72
|
-
|
73
|
-
# cards for rename_test
|
74
|
-
# FIXME: could probably refactor these..
|
75
|
-
[
|
76
|
-
["Z", "I'm here to be referenced to"],
|
77
|
-
["A", "Alpha [[Z]]"],
|
78
|
-
["B", "Beta {{Z}}"],
|
79
|
-
%w[T Theta],
|
80
|
-
["X", "[[A]] [[A+B]] [[T]]"],
|
81
|
-
["Y", "{{B}} {{A+B}} {{A}} {{T}}"],
|
82
|
-
["A+B", "AlphaBeta"],
|
83
|
-
["A+B+Y+Z", "more letters"],
|
84
|
-
["Link to unknown", "[[Mister X]]"]
|
85
|
-
].each do |name, content|
|
86
|
-
create name, content
|
87
|
-
end
|
88
|
-
|
89
|
-
create "One+Two+Three"
|
90
|
-
create "Four+One+Five"
|
91
|
-
create "basicname", "basiccontent"
|
92
|
-
|
93
|
-
cardtype_cards
|
94
|
-
|
95
|
-
# for template stuff
|
96
|
-
Card.create! type_id: Card::CardtypeID, name: "UserForm"
|
97
|
-
create "UserForm+*type+*structure", "{{+name}} {{+age}} {{+description}}"
|
98
|
-
|
99
|
-
Card::Auth.signin "joe_user"
|
100
|
-
create "JoeLater", "test"
|
101
|
-
create "JoeNow", "test"
|
102
|
-
|
103
|
-
Card::Auth.signin Card::WagnBotID
|
104
|
-
|
105
|
-
create_cardtype "Book"
|
106
|
-
create "Book+*type+*structure", "by {{+author}}, design by {{+illustrator}}"
|
107
|
-
create_book "Iliad"
|
108
|
-
|
109
|
-
create_cardtype "Author"
|
110
|
-
create_author "Darles Chickens"
|
111
|
-
create_author "Stam Broker"
|
112
|
-
create_book "Parry Hotter"
|
113
|
-
create_book "50 grades of shy"
|
114
|
-
|
115
|
-
## --------- Fruit: creatable by anyone but not readable ---
|
116
|
-
Card.create! type: "Cardtype", name: "Fruit"
|
117
|
-
Card.create! name: "Fruit+*type+*create", type: "Pointer", content: "[[Anyone]]"
|
118
|
-
Card.create! name: "Fruit+*type+*read", type: "Pointer",
|
119
|
-
content: "[[Administrator]]"
|
120
|
-
|
121
|
-
# codenames for card_accessor tests
|
122
|
-
Card.create! name: "*write", codename: :write
|
123
|
-
|
124
|
-
# -------- For toc testing: ------------
|
125
|
-
|
126
|
-
create "OnneHeading", "<h1>This is one heading</h1>\r\n<p>and some text</p>"
|
127
|
-
create "TwwoHeading", "<h1>One Heading</h1>\r\n<p>and some text</p>\r\n"\
|
128
|
-
"<h2>And a Subheading</h2>\r\n<p>and more text</p>"
|
129
|
-
create "ThreeHeading", "<h1>A Heading</h1>\r\n<p>and text</p>\r\n"\
|
130
|
-
"<h2>And Subhead</h2>\r\n<p>text</p>\r\n"\
|
131
|
-
"<h1>And another top Heading</h1>"
|
132
|
-
|
133
|
-
# -------- For history testing: -----------
|
134
|
-
first = create "First", "egg"
|
135
|
-
first.update! content: "chicken"
|
136
|
-
first.update! content: "chick"
|
137
|
-
|
138
|
-
# -------- For rename testing: -----------
|
139
|
-
[
|
140
|
-
["Blue", ""],
|
141
|
-
["blue includer 1", "{{Blue}}"],
|
142
|
-
["blue includer 2", "{{blue|closed;other:stuff}}"],
|
143
|
-
["blue linker 1", "[[Blue]]"],
|
144
|
-
["blue linker 2", "[[blue]]"]
|
145
|
-
].each do |name, content|
|
146
|
-
create name, content
|
147
|
-
end
|
148
|
-
create_cardtype "self aware", "[[/new/{{_self|name}}|new]]"
|
149
|
-
|
150
|
-
notification_cards
|
151
|
-
|
152
|
-
create "42", TEXT
|
153
|
-
create_pointer "items",
|
154
|
-
content: ["Parry Hotter", "42", "Stam Broker", "First",
|
155
|
-
"yeti skin+image", "*all+*script+*machine output"]
|
156
|
-
end
|
157
|
-
|
158
|
-
def user_and_role_cards
|
159
|
-
# Card::Auth.instant_account_activation do
|
160
|
-
create_user "Joe Admin", content: "I'm number one", email: "joe@admin.com"
|
161
|
-
create_user "Joe User", content: "I'm number two", email: "joe@user.com"
|
162
|
-
create_user "Joe Camel", content: "Mr. Buttz", email: "joe@camel.com"
|
163
|
-
|
164
|
-
# data for testing users and account requests
|
165
|
-
create_user "No Count", content: "I got no account"
|
166
|
-
create_user "Sample User", email: "sample@user.com", password: "sample_pass"
|
167
|
-
# end
|
168
|
-
|
169
|
-
# noinspection RubyResolve
|
170
|
-
Card["Joe Admin"].fetch(:roles, new: { type_code: "pointer" })
|
171
|
-
.items = [Card::AdministratorID, Card::SharkID, Card::HelpDeskID]
|
172
|
-
|
173
|
-
Card["Joe User"].fetch(:roles, new: { type_code: "pointer" })
|
174
|
-
.items = [Card::SharkID]
|
175
|
-
|
176
|
-
create_user "u1", email: "u1@user.com", password: "u1_pass"
|
177
|
-
create_user "u2", email: "u2@user.com", password: "u2_pass"
|
178
|
-
create_user "u3", email: "u3@user.com", password: "u3_pass"
|
179
|
-
|
180
|
-
r1 = create_role "r1"
|
181
|
-
r2 = create_role "r2"
|
182
|
-
r3 = create_role "r3"
|
183
|
-
r4 = create_role "r4"
|
184
|
-
|
185
|
-
Card["u1"].fetch(:roles, new: { type_code: "pointer" }).items = [r1, r2, r3]
|
186
|
-
Card["u2"].fetch(:roles, new: {}).items = [r1, r2, r4]
|
187
|
-
Card["u3"].fetch(:roles, new: {}).items = [r1, r4, Card::AdministratorID]
|
188
|
-
end
|
189
|
-
|
190
|
-
def cardtype_cards
|
191
|
-
# for cql & permissions
|
192
|
-
%w[A+C A+D A+E C+A D+A F+A A+B+C].each { |name| create name }
|
193
|
-
("A".."F").each do |ch|
|
194
|
-
create "Cardtype #{ch}", type_code: "cardtype",
|
195
|
-
codename: "cardtype_#{ch.downcase}"
|
196
|
-
end
|
197
|
-
Card::Codename.reset_cache
|
198
|
-
|
199
|
-
("a".."f").each do |ch|
|
200
|
-
create "type-#{ch}-card", type_code: "cardtype_#{ch}",
|
201
|
-
content: "type_#{ch}_content"
|
202
|
-
end
|
203
|
-
|
204
|
-
create_pointer "Cardtype B+*type+*create", "[[r3]]"
|
205
|
-
create_pointer "Cardtype B+*type+*update", "[[r1]]"
|
206
|
-
|
207
|
-
## --------- create templated permissions -------------
|
208
|
-
create "Cardtype E+*type+*default"
|
209
|
-
end
|
210
|
-
|
211
|
-
def future_stamp
|
212
|
-
Time.zone.local 2020, 1, 1, 0, 0, 0
|
213
|
-
end
|
214
|
-
|
215
|
-
def notification_cards
|
216
|
-
Timecop.freeze(future_stamp - 1.day) do
|
217
|
-
# fwiw Timecop is apparently limited by ruby Time object,
|
218
|
-
# which goes only to 2037 and back to 1900 or so.
|
219
|
-
# whereas DateTime can represent all dates.
|
220
|
-
|
221
|
-
followers = {
|
222
|
-
"John" => ["John Following", "All Eyes On Me"],
|
223
|
-
"Sara" => ["Sara Following", "All Eyes On Me", "Optic+*type",
|
224
|
-
"Google Glass"],
|
225
|
-
"Big Brother" => ["All Eyes on Me", "Look at me+*self", "Optic+*type",
|
226
|
-
"lens+*right", "Optic+tint+*type plus right",
|
227
|
-
["*all", "*created"], ["*all", "*edited"]],
|
228
|
-
"Optic fan" => ["Optic+*type"],
|
229
|
-
"Sunglasses fan" => ["Sunglasses"],
|
230
|
-
"Narcissist" => [["*all", "*created"], ["*all", "*edited"]]
|
231
|
-
}
|
232
|
-
|
233
|
-
followers.each do |name, _follow|
|
234
|
-
create_user name, email: "#{name.parameterize}@user.com",
|
235
|
-
password: "#{name.parameterize}_pass"
|
236
|
-
end
|
237
|
-
|
238
|
-
create "All Eyes On Me"
|
239
|
-
create "No One Sees Me"
|
240
|
-
create "Look At Me"
|
241
|
-
create_cardtype "Optic"
|
242
|
-
create "Sara Following"
|
243
|
-
create "John Following", "{{+her}}"
|
244
|
-
create "John Following+her"
|
245
|
-
magnifier = create "Magnifier+lens"
|
246
|
-
|
247
|
-
Card::Auth.signin "Narcissist"
|
248
|
-
magnifier.update! content: "zoom in"
|
249
|
-
create_optic "Sunglasses", "{{+tint}}{{+lens}}"
|
250
|
-
|
251
|
-
Card::Auth.signin "Optic fan"
|
252
|
-
create_optic "Google glass", "{{+price}}"
|
253
|
-
|
254
|
-
Card::Auth.signin Card::WagnBotID
|
255
|
-
create "Google glass+*self+*follow_fields", ""
|
256
|
-
create "Sunglasses+*self+*follow_fields",
|
257
|
-
"[[#{:nests.cardname}]]\n[[_self+price]]\n[[_self+producer]]"
|
258
|
-
create "Sunglasses+tint"
|
259
|
-
create "Sunglasses+price"
|
260
|
-
|
261
|
-
followers.each do |name, follow|
|
262
|
-
user = Card[name]
|
263
|
-
follow.each do |f|
|
264
|
-
user.follow(*f)
|
265
|
-
end
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
# capitalized names so that they don't interfere with checks for the verbs
|
270
|
-
create "Created card", content: "new content"
|
271
|
-
update "Created card", name: "Updated card", content: "changed content",
|
272
|
-
type: :pointer, skip: :validate_renaming
|
273
|
-
create "Created card", content: "new content"
|
274
|
-
card = create "Deleted card", content: "old content"
|
275
|
-
card.delete
|
276
|
-
|
277
|
-
Card::Auth.with "Joe User" do
|
278
|
-
[
|
279
|
-
["card with fields", "field 1", "field 2"],
|
280
|
-
["card with fields and admin fields", "field 1", "admin field 1"],
|
281
|
-
["admin card with fields and admin fields", "field 1", "admin field 1"],
|
282
|
-
["admin card with admin fields", "admin field 1", "admin field 2"]
|
283
|
-
].each do |name, f1, f2|
|
284
|
-
create name,
|
285
|
-
content: "main content {{+#{f1}}} {{+#{f2}}}",
|
286
|
-
subcards: { "+#{f1}" => "content of #{f1}",
|
287
|
-
"+#{f2}" => "content of #{f2}" }
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
Card::Auth.as_bot do
|
292
|
-
[
|
293
|
-
["admin card with fields and admin fields", :self],
|
294
|
-
["admin card with admin fields", :self],
|
295
|
-
["admin field 1", :right],
|
296
|
-
["admin field 2", :right]
|
297
|
-
].each do |name, rule_set|
|
298
|
-
create [name, rule_set, :read], type: "Pointer", content: "[[Administrator]]"
|
299
|
-
end
|
300
|
-
create ["field 1", :right, :read], type: "Pointer", content: "[[Anyone]]"
|
301
|
-
end
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
TEXT = <<~TXT.strip_heredoc.freeze
|
306
|
-
Far out in the uncharted backwaters of the unfashionable end of
|
307
|
-
the western spiral arm of the Galaxy lies a small unregarded
|
308
|
-
yellow sun.
|
309
|
-
|
310
|
-
Orbiting this at a distance of roughly ninety-two million miles
|
311
|
-
is an utterly insignificant little blue green planet whose ape-
|
312
|
-
descended life forms are so amazingly primitive that they still
|
313
|
-
think digital watches are a pretty neat idea.
|
314
|
-
|
315
|
-
This planet has - or rather had - a problem, which was this: most
|
316
|
-
of the people living on it were unhappy for pretty much of the time.
|
317
|
-
Many solutions were suggested for this problem, but most of these
|
318
|
-
were largely concerned with the movements of small green pieces
|
319
|
-
of paper, which is odd because on the whole it wasn't the small
|
320
|
-
green pieces of paper that were unhappy.
|
321
|
-
TXT
|
322
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class Content
|
3
|
-
# tools for truncating content
|
4
|
-
module Truncate
|
5
|
-
ELLIPSES_HTML = '<span class="closed-content-ellipses">...</span>'.freeze
|
6
|
-
|
7
|
-
def smart_truncate input, words=25
|
8
|
-
return if input.nil?
|
9
|
-
|
10
|
-
truncated, wordstring = truncate input, words
|
11
|
-
# nuke partial tags at end of snippet
|
12
|
-
wordstring.gsub!(/(<[^>]+)$/, "")
|
13
|
-
wordstring = close_tags wordstring
|
14
|
-
wordstring += ELLIPSES_HTML if truncated
|
15
|
-
# wordstring += '...' if wordlist.length > l
|
16
|
-
polish wordstring
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def truncate input, words
|
22
|
-
wordlist = input.to_s.split
|
23
|
-
l = words.to_i - 1
|
24
|
-
l = 0 if l.negative?
|
25
|
-
truncating = wordlist.length > l
|
26
|
-
wordstring = truncating ? wordlist[0..l].join(" ") : input.to_s
|
27
|
-
[truncating, wordstring]
|
28
|
-
end
|
29
|
-
|
30
|
-
def close_tags wordstring
|
31
|
-
tags = find_tags wordstring
|
32
|
-
tags.each { |t| wordstring += "</#{t}>" }
|
33
|
-
wordstring
|
34
|
-
end
|
35
|
-
|
36
|
-
def polish wordstring
|
37
|
-
wordstring.gsub! %r{</?br[\s/]*>}, " "
|
38
|
-
# Also a hack -- get rid of <br>'s -- they make line view ugly.
|
39
|
-
wordstring.gsub! %r{</?p[^>]*>}, " "
|
40
|
-
## Also a hack -- get rid of <br>'s -- they make line view ugly.
|
41
|
-
wordstring
|
42
|
-
end
|
43
|
-
|
44
|
-
def find_tags wordstring
|
45
|
-
tags = []
|
46
|
-
|
47
|
-
# match tags with or without self closing (ie. <foo />)
|
48
|
-
wordstring.scan(%r{<([^>\s/]+)[^>]*?>}).each do |t|
|
49
|
-
tags.unshift(t[0])
|
50
|
-
end
|
51
|
-
# match tags with self closing and mark them as closed
|
52
|
-
wordstring.scan(%r{<([^>\s/]+)[^>]*?/>}).each do |t|
|
53
|
-
next unless (x = tags.index(t[0]))
|
54
|
-
|
55
|
-
tags.slice!(x)
|
56
|
-
end
|
57
|
-
# match close tags
|
58
|
-
wordstring.scan(%r{</([^>\s/]+)[^>]*?>}).each do |t|
|
59
|
-
next unless (x = tags.rindex(t[0]))
|
60
|
-
|
61
|
-
tags.slice!(x)
|
62
|
-
end
|
63
|
-
tags
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class Director
|
3
|
-
module CardMethods
|
4
|
-
attr_writer :director
|
5
|
-
|
6
|
-
delegate :validation_phase, :storage_phase, :integration_phase,
|
7
|
-
:validation_phase_callback?, :integration_phase_callback?, to: :director
|
8
|
-
|
9
|
-
def director
|
10
|
-
@director ||= Director.fetch self
|
11
|
-
end
|
12
|
-
|
13
|
-
def prepare_for_phases
|
14
|
-
reset_patterns
|
15
|
-
include_set_modules
|
16
|
-
end
|
17
|
-
|
18
|
-
def identify_action
|
19
|
-
@action =
|
20
|
-
if trash && trash_changed?
|
21
|
-
:delete
|
22
|
-
elsif new_card?
|
23
|
-
:create
|
24
|
-
else
|
25
|
-
:update
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def restore_changes_information
|
30
|
-
# restores changes for integration phase
|
31
|
-
# (rails cleared them in an after_create/after_update hook which is
|
32
|
-
# executed before the integration phase)
|
33
|
-
return unless saved_changes.present?
|
34
|
-
|
35
|
-
@mutations_from_database = mutations_before_last_save
|
36
|
-
end
|
37
|
-
|
38
|
-
def clear_action_specific_attributes
|
39
|
-
self.class.action_specific_attributes.each do |attr|
|
40
|
-
instance_variable_set "@#{attr}", nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class FileCardCreator
|
3
|
-
class AbstractFileCard
|
4
|
-
# Module that provides #create_migration_file method for classes that
|
5
|
-
# inherit from AbstractFileCard.
|
6
|
-
# It uses the decko generator to create the migration.
|
7
|
-
module MigrationFile
|
8
|
-
def create_migration_file
|
9
|
-
puts "creating migration file...".yellow
|
10
|
-
migration_out = `#{migrate_command}`
|
11
|
-
return if migration_out.include?("conflict")
|
12
|
-
|
13
|
-
migration_file_name = migration_out[/db.*/]
|
14
|
-
write_at migration_file_name, 5, indented_migration_content # 5 is line no.
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def migrate_command
|
20
|
-
cmd = "bundle exec decko generate card:migration add_#{@codename}"
|
21
|
-
cmd += " --force" if @force
|
22
|
-
cmd
|
23
|
-
end
|
24
|
-
|
25
|
-
def indented_migration_content
|
26
|
-
migration_file_content.lines.map do |line|
|
27
|
-
" " * 4 + line
|
28
|
-
end.join
|
29
|
-
end
|
30
|
-
|
31
|
-
def migration_file_content
|
32
|
-
indent = " " * category.to_s.size
|
33
|
-
<<-RUBY.strip_heredoc
|
34
|
-
add_#{category} "#{remove_prefix @name}",
|
35
|
-
#{indent} type_id: #{type_id},
|
36
|
-
#{indent} to: "#{rule_card_name}"
|
37
|
-
RUBY
|
38
|
-
end
|
39
|
-
|
40
|
-
def remove_prefix name
|
41
|
-
name.sub(/^(?:#{category}):?_?\s*/, "")
|
42
|
-
end
|
43
|
-
|
44
|
-
def type_id
|
45
|
-
"Card::#{type_codename.to_s.camelcase}ID"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class FileCardCreator
|
3
|
-
class AbstractFileCard
|
4
|
-
# Module that provides #create_ruby_file method for a classes that
|
5
|
-
# inherit from AbstractFileCard.
|
6
|
-
# The default location for the ruby file is set/self.
|
7
|
-
module RubyFile
|
8
|
-
def create_ruby_file
|
9
|
-
write_to_mod(ruby_file_dir, ruby_file_name) do |f|
|
10
|
-
f.puts ruby_file_content
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def ruby_file_dir
|
17
|
-
File.join "set", "self"
|
18
|
-
end
|
19
|
-
|
20
|
-
def ruby_file_name
|
21
|
-
"#{@codename}.rb"
|
22
|
-
end
|
23
|
-
|
24
|
-
def ruby_file_content
|
25
|
-
"include_set Abstract::CodeFile"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class FileCardCreator
|
3
|
-
class AbstractFileCard
|
4
|
-
# Module that provides #create_source_file method for a classes that
|
5
|
-
# inherit from AbstractFileCard
|
6
|
-
module SourceFile
|
7
|
-
def create_source_file
|
8
|
-
write_to_mod source_file_dir, source_file_name do |f|
|
9
|
-
f.puts source_file_content
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def source_file_content
|
16
|
-
card = Card.fetch(@name)
|
17
|
-
if card
|
18
|
-
card.content
|
19
|
-
else
|
20
|
-
color_puts "warning:", :yellow,
|
21
|
-
"Card '#{@name}' doesn't exist. Creating empty source file ..."
|
22
|
-
""
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def source_file_name
|
27
|
-
"#{@codename}.#{source_file_ext}"
|
28
|
-
end
|
29
|
-
|
30
|
-
def source_file_ext
|
31
|
-
@type
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class FileCardCreator
|
3
|
-
# A template class for generating cards that are linked to source files.
|
4
|
-
class AbstractFileCard
|
5
|
-
include OutputHelper
|
6
|
-
include SourceFile
|
7
|
-
include MigrationFile
|
8
|
-
include RubyFile
|
9
|
-
|
10
|
-
class << self
|
11
|
-
attr_reader :supported_types, :category
|
12
|
-
attr_accessor :default_rule_name
|
13
|
-
|
14
|
-
def valid_type? type
|
15
|
-
supported_types.include? type.to_sym
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize mod, name, type, codename: nil, force: false
|
20
|
-
@mod = mod
|
21
|
-
@type = type.to_sym
|
22
|
-
@name = name
|
23
|
-
@force = force
|
24
|
-
@codename = codename || name.underscore.tr(" ", "_")
|
25
|
-
end
|
26
|
-
|
27
|
-
def create
|
28
|
-
create_source_file
|
29
|
-
create_ruby_file
|
30
|
-
create_migration_file
|
31
|
-
end
|
32
|
-
|
33
|
-
def category
|
34
|
-
self.class.category
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def rule_card_name
|
40
|
-
self.class.default_rule_name
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "html2haml"
|
2
|
-
|
3
|
-
class Card
|
4
|
-
class FileCardCreator
|
5
|
-
# Convert a card with html db content to a card with hard-coded haml.
|
6
|
-
# It generates three files:
|
7
|
-
# 1. a migration file that creates a card with codename
|
8
|
-
# 2. a haml file with the converted html
|
9
|
-
# 3. a ruby file (=code rule)that ties the haml file to the card
|
10
|
-
class HamlCard < AbstractFileCard
|
11
|
-
@supported_types = %i[haml]
|
12
|
-
@category = :haml
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def type_codename
|
17
|
-
@type_codename ||= :html
|
18
|
-
end
|
19
|
-
|
20
|
-
def source_file_dir
|
21
|
-
File.join "template", "self"
|
22
|
-
end
|
23
|
-
|
24
|
-
def source_file_content
|
25
|
-
html = super()
|
26
|
-
Html2haml::HTML.new(html).render
|
27
|
-
end
|
28
|
-
|
29
|
-
def migration_file_content
|
30
|
-
<<-RUBY.strip_heredoc
|
31
|
-
ensure_card "#{@name}",
|
32
|
-
type_id: #{type_id},
|
33
|
-
codename: "#{@codename}"
|
34
|
-
RUBY
|
35
|
-
end
|
36
|
-
|
37
|
-
def ruby_file_content
|
38
|
-
"include_set Abstract::HamlFile"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
class FileCardCreator
|
3
|
-
# Helper methods to write to files and the console.
|
4
|
-
module OutputHelper
|
5
|
-
def write_to_mod rel_dir, filename, &block
|
6
|
-
dir = File.join "mod", @mod, rel_dir
|
7
|
-
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
8
|
-
|
9
|
-
path = File.join dir, filename
|
10
|
-
log_file_action path do
|
11
|
-
File.open(path, "w", &block)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def log_file_action path, &block
|
16
|
-
if File.exist?(path) && !@force
|
17
|
-
log_file_exists path
|
18
|
-
else
|
19
|
-
execute_and_log_file_action path, &block
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def execute_and_log_file_action path
|
24
|
-
status = File.exist?(path) ? "overridden" : "created"
|
25
|
-
yield
|
26
|
-
color_puts status, :green, path
|
27
|
-
end
|
28
|
-
|
29
|
-
def log_file_exists path
|
30
|
-
color_puts "file exists (use 'force=true' to override)", :yellow, path
|
31
|
-
end
|
32
|
-
|
33
|
-
# insert content into a file at a given line number
|
34
|
-
def write_at fname, at_line, sdat
|
35
|
-
open(fname, "r+") do |f|
|
36
|
-
(at_line - 1).times do # read up to the line you want to write after
|
37
|
-
f.readline
|
38
|
-
end
|
39
|
-
pos = f.pos # save your position in the file
|
40
|
-
rest = f.read # save the rest of the file
|
41
|
-
f.seek pos # go back to the old position
|
42
|
-
f.puts sdat # write new data & rest of file
|
43
|
-
f.puts rest
|
44
|
-
color_puts "created", :green, fname
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def color_puts colored_text, color, text=""
|
49
|
-
puts "#{colored_text.send(color.to_s)} #{text}"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|