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
@@ -7,7 +7,7 @@ class Card
|
|
7
7
|
class HtmlFormat < Format
|
8
8
|
include Diff
|
9
9
|
|
10
|
-
attr_accessor
|
10
|
+
attr_accessor :options_need_save, :start_time, :skip_autosave
|
11
11
|
|
12
12
|
# builtin layouts allow for rescue / testing
|
13
13
|
LAYOUTS = Loader.load_layouts.merge 'none' => '{{_main}}'
|
@@ -31,7 +31,7 @@ class Card
|
|
31
31
|
|
32
32
|
def layout_from_card_or_code name
|
33
33
|
layout_card = Card.fetch name.to_s, skip_virtual: true, skip_modules: true
|
34
|
-
if layout_card
|
34
|
+
if layout_card && layout_card.ok?(:read)
|
35
35
|
layout_card.content
|
36
36
|
elsif (hardcoded_layout = LAYOUTS[name])
|
37
37
|
hardcoded_layout
|
@@ -40,8 +40,8 @@ class Card
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
44
|
-
{view: (nested_card.rule(
|
43
|
+
def get_nest_defaults nested_card
|
44
|
+
{ view: (nested_card.rule(:default_html_view) || :titled) }
|
45
45
|
end
|
46
46
|
|
47
47
|
def default_item_view
|
@@ -50,23 +50,19 @@ class Card
|
|
50
50
|
|
51
51
|
def output content
|
52
52
|
case content
|
53
|
-
when String
|
54
|
-
when Array
|
53
|
+
when String then content
|
54
|
+
when Array then content.compact.join "\n"
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
def html_escape_except_quotes s
|
59
59
|
# to be used inside single quotes (makes for readable json attributes)
|
60
|
-
s.to_s.gsub(/&/,
|
60
|
+
s.to_s.gsub(/&/, '&').gsub(/\'/, ''').gsub(/>/, '>').gsub(/</, '<')
|
61
61
|
end
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
63
|
def main?
|
68
64
|
if show_layout?
|
69
|
-
@depth == 1 && @mainline #assumes layout includes {{_main}}
|
65
|
+
@depth == 1 && @mainline # assumes layout includes {{_main}}
|
70
66
|
else
|
71
67
|
@depth == 0 && params[:is_main]
|
72
68
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
|
2
|
+
# The Card#abort method is for cleanly exiting an action without continuing
|
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
|
+
def abort status, msg='action canceled'
|
12
|
+
if status == :failure && errors.empty?
|
13
|
+
errors.add :abort, msg
|
14
|
+
elsif status.is_a?(Hash) && status[:success]
|
15
|
+
success << status[:success]
|
16
|
+
status = :success
|
17
|
+
end
|
18
|
+
raise Card::Abort.new(status, msg)
|
19
|
+
end
|
20
|
+
|
21
|
+
module ClassMethods
|
22
|
+
def create! opts
|
23
|
+
card = Card.new opts
|
24
|
+
card.act do
|
25
|
+
card.save!
|
26
|
+
end
|
27
|
+
card
|
28
|
+
end
|
29
|
+
|
30
|
+
def create opts
|
31
|
+
card = Card.new opts
|
32
|
+
card.act do
|
33
|
+
card.save
|
34
|
+
end
|
35
|
+
card
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete
|
40
|
+
act do
|
41
|
+
super
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete!
|
46
|
+
act do
|
47
|
+
super
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def update_attributes opts
|
52
|
+
act do
|
53
|
+
super opts
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def update_attributes! opts
|
58
|
+
act do
|
59
|
+
super opts
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def abortable
|
64
|
+
yield
|
65
|
+
rescue Card::Abort => e
|
66
|
+
if e.status == :triumph
|
67
|
+
@supercard ? raise(e) : true
|
68
|
+
elsif e.status == :success
|
69
|
+
if @supercard
|
70
|
+
@supercard.subcards.delete key
|
71
|
+
@supercard.director.subdirectors.delete self
|
72
|
+
expire_soft
|
73
|
+
end
|
74
|
+
true
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# this is an override of standard rails behavior that rescues abort
|
79
|
+
# makes it so that :success abortions do not rollback
|
80
|
+
def with_transaction_returning_status
|
81
|
+
status = nil
|
82
|
+
self.class.transaction do
|
83
|
+
add_to_transaction
|
84
|
+
status = abortable { yield }
|
85
|
+
raise ActiveRecord::Rollback unless status
|
86
|
+
end
|
87
|
+
status
|
88
|
+
end
|
89
|
+
|
90
|
+
event :notable_exception_raised do
|
91
|
+
Rails.logger.debug "BT: #{Card::Error.current.backtrace * "\n "}"
|
92
|
+
end
|
93
|
+
|
94
|
+
def success
|
95
|
+
Env.success(cardname)
|
96
|
+
end
|
@@ -19,17 +19,17 @@ end
|
|
19
19
|
|
20
20
|
=end
|
21
21
|
|
22
|
-
def trait_var
|
23
|
-
# FIXME - following optimization attempt needs to handle cache clearing!
|
24
|
-
# instance_variable_get var_name or begin
|
25
|
-
# instance_variable_set var_name, block_given? ? yield : raise("no block?")
|
26
|
-
# end
|
22
|
+
def trait_var _var_name, &_block
|
23
|
+
# FIXME: - following optimization attempt needs to handle cache clearing!
|
24
|
+
# instance_variable_get var_name or begin
|
25
|
+
# instance_variable_set var_name, block_given? ? yield : raise("no block?")
|
26
|
+
# end
|
27
27
|
yield
|
28
28
|
end
|
29
29
|
|
30
|
-
#
|
30
|
+
# FIXME: -this needs a better home!
|
31
31
|
def format opts={}
|
32
32
|
opts = { format: opts.to_sym } if [Symbol, String].member? opts.class
|
33
33
|
|
34
34
|
Card::Format.new self, opts
|
35
|
-
end
|
35
|
+
end
|
@@ -75,7 +75,7 @@ def insert_item index, name
|
|
75
75
|
self.content = new_names.join "\n"
|
76
76
|
end
|
77
77
|
|
78
|
-
def extended_item_cards context
|
78
|
+
def extended_item_cards context=nil
|
79
79
|
context = (context ? context.cardname : cardname)
|
80
80
|
args = { limit: '' }
|
81
81
|
items = item_cards(args.merge(context: context))
|
@@ -128,7 +128,7 @@ format do
|
|
128
128
|
|
129
129
|
def item_view args
|
130
130
|
args[:item] ||
|
131
|
-
(@
|
131
|
+
(@nest_opts && @nest_opts[:view]) ||
|
132
132
|
default_item_view
|
133
133
|
end
|
134
134
|
|
@@ -170,7 +170,7 @@ format do
|
|
170
170
|
params.each do |key, val|
|
171
171
|
case key.to_s
|
172
172
|
when '_wql' then hash.merge! val
|
173
|
-
when /^\_(\w+)$/ then hash[:vars][
|
173
|
+
when /^\_(\w+)$/ then hash[:vars][Regexp.last_match(1).to_sym] = val
|
174
174
|
end
|
175
175
|
end
|
176
176
|
end
|
@@ -197,10 +197,10 @@ format do
|
|
197
197
|
result
|
198
198
|
end
|
199
199
|
|
200
|
-
def unique_chunks chunk, processed_set, &
|
200
|
+
def unique_chunks chunk, processed_set, &_block
|
201
201
|
return if processed_set.include? chunk.referee_name.key
|
202
202
|
processed_set << chunk.referee_name.key
|
203
|
-
|
203
|
+
yield(chunk)
|
204
204
|
end
|
205
205
|
|
206
206
|
def each_nested_field args, &block
|
@@ -208,26 +208,25 @@ format do
|
|
208
208
|
|
209
209
|
each_nested_chunk(args) do |chunk|
|
210
210
|
# TODO: handle structures that are non-virtual
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
end
|
220
|
-
else
|
221
|
-
unique_chunks chunk, processed_chunk_keys, &block
|
211
|
+
next unless chunk.referee_name.to_name.field_of? card.name
|
212
|
+
if chunk.referee_card &&
|
213
|
+
chunk.referee_card.virtual? &&
|
214
|
+
!processed_chunk_keys.include?(chunk.referee_name.key)
|
215
|
+
|
216
|
+
processed_chunk_keys << chunk.referee_name.key
|
217
|
+
subformat(chunk.referee_card).each_nested_field(args) do |sub_chunk|
|
218
|
+
unique_chunks sub_chunk, processed_chunk_keys, &block
|
222
219
|
end
|
220
|
+
else
|
221
|
+
unique_chunks chunk, processed_chunk_keys, &block
|
223
222
|
end
|
224
223
|
end
|
225
224
|
end
|
226
225
|
|
227
|
-
def map_references_with_args args={}, &
|
226
|
+
def map_references_with_args args={}, &_block
|
228
227
|
result = []
|
229
228
|
each_reference_with_args args do |name, n_args|
|
230
|
-
result <<
|
229
|
+
result << yield(name, n_args)
|
231
230
|
end
|
232
231
|
result
|
233
232
|
end
|
@@ -235,7 +234,7 @@ format do
|
|
235
234
|
# process args for links and nests
|
236
235
|
def nest_args args, chunk=nil
|
237
236
|
r_args = item_args(args)
|
238
|
-
r_args.merge! @
|
237
|
+
r_args.merge! @nest_opts.clone if @nest_opts
|
239
238
|
|
240
239
|
case chunk
|
241
240
|
when Card::Chunk::Include
|
@@ -276,7 +275,7 @@ format :html do
|
|
276
275
|
args[:tab_type] ||= 'tabs'
|
277
276
|
end
|
278
277
|
|
279
|
-
# create a path for a nest with respect ot the
|
278
|
+
# create a path for a nest with respect ot the nest options
|
280
279
|
def nest_path name, nest_args
|
281
280
|
path_args = {}
|
282
281
|
path_args[:view] = nest_args[:view]
|
@@ -46,15 +46,17 @@ def last_draft_content
|
|
46
46
|
drafts.last.card_changes.last.value
|
47
47
|
end
|
48
48
|
|
49
|
-
event :save_draft,
|
50
|
-
|
51
|
-
when: proc { Env.params['draft'] == 'true' } do
|
49
|
+
event :save_draft, :store,
|
50
|
+
on: :update, when: proc { Env.params['draft'] == 'true' } do
|
52
51
|
save_content_draft content
|
53
52
|
abort :success
|
54
53
|
end
|
55
54
|
|
56
|
-
event :set_default_content,
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
event :set_default_content, :prepare_to_validate,
|
56
|
+
on: :create, when: proc { |c| c.use_default_content? } do
|
57
|
+
self.db_content = template.db_content
|
58
|
+
end
|
59
|
+
|
60
|
+
def use_default_content?
|
61
|
+
!db_content_changed? && template && template.db_content.present?
|
60
62
|
end
|
data/mod/01_core/set/all/erb.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
format do
|
2
2
|
def render_erb locals={}, template=nil, a_binding=nil, &block
|
3
|
-
template ||=
|
3
|
+
template ||= yield
|
4
4
|
a_binding ||= binding
|
5
|
-
locals.each do |k,v|
|
6
|
-
#a_binding.local_variable_set(k, v) # needs ruby 2.1
|
7
|
-
instance_variable_set("@#{k}",v)
|
5
|
+
locals.each do |k, v|
|
6
|
+
# a_binding.local_variable_set(k, v) # needs ruby 2.1
|
7
|
+
instance_variable_set("@#{k}", v)
|
8
8
|
end
|
9
|
-
ERB.new(template,nil,'-').result(binding)
|
9
|
+
ERB.new(template, nil, '-').result(binding)
|
10
10
|
end
|
11
11
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
def event_applies? opts
|
2
|
+
on_condition_applies?(opts[:on]) &&
|
3
|
+
changed_condition_applies?(opts[:changed]) &&
|
4
|
+
when_condition_applies?(opts[:when])
|
5
|
+
end
|
6
|
+
|
7
|
+
def rescue_event e
|
8
|
+
@action = nil
|
9
|
+
expire_pieces
|
10
|
+
subcards.each(&:expire_pieces)
|
11
|
+
raise e
|
12
|
+
# rescue Card::Cancel
|
13
|
+
# false
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def on_condition_applies? action
|
19
|
+
if action
|
20
|
+
Array.wrap(action).member? @action
|
21
|
+
else
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def changed_condition_applies? db_columns
|
27
|
+
case db_columns
|
28
|
+
when Symbol
|
29
|
+
return single_changed_condition_applies?(db_columns)
|
30
|
+
when Array
|
31
|
+
db_columns.each do |col|
|
32
|
+
return true if single_changed_condition_applies? col
|
33
|
+
end
|
34
|
+
else
|
35
|
+
return true
|
36
|
+
end
|
37
|
+
false
|
38
|
+
end
|
39
|
+
|
40
|
+
def single_changed_condition_applies? db_column
|
41
|
+
if db_column
|
42
|
+
db_column =
|
43
|
+
case db_column.to_sym
|
44
|
+
when :content then 'db_content'
|
45
|
+
when :type then 'type_id'
|
46
|
+
else db_column.to_s
|
47
|
+
end
|
48
|
+
@action != :delete && changes[db_column]
|
49
|
+
else
|
50
|
+
true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def when_condition_applies? block
|
55
|
+
if block
|
56
|
+
block.call self
|
57
|
+
else
|
58
|
+
true
|
59
|
+
end
|
60
|
+
end
|
@@ -100,15 +100,10 @@ module ClassMethods
|
|
100
100
|
Card.cache.hard.delete "~#{card.id}" if card.id
|
101
101
|
end
|
102
102
|
|
103
|
-
def expire name
|
103
|
+
def expire name
|
104
104
|
# note: calling instance method breaks on dirty names
|
105
105
|
key = name.to_name.key
|
106
106
|
return unless (card = Card.cache.read key)
|
107
|
-
if subcards
|
108
|
-
card.expire_subcards
|
109
|
-
else
|
110
|
-
card.preserve_subcards
|
111
|
-
end
|
112
107
|
Card.cache.delete key
|
113
108
|
Card.cache.delete "~#{card.id}" if card.id
|
114
109
|
end
|
@@ -120,9 +115,14 @@ module ClassMethods
|
|
120
115
|
set_cache_list.nil? ? [] : set_cache_list.keys
|
121
116
|
end
|
122
117
|
|
118
|
+
# updates the members hash for all sets self is a member of
|
119
|
+
# QUESTION: why map and not each?
|
120
|
+
# I don't see where that array is useful. It contains
|
121
|
+
# nil for all sets for which self was already cached as a member
|
123
122
|
def set_members set_names, key
|
124
|
-
set_names.compact.map
|
125
|
-
|
123
|
+
set_names.compact.map do |set_name|
|
124
|
+
# dollar sign avoids conflict with card keys
|
125
|
+
skey = "$#{set_name.to_name.key}"
|
126
126
|
h = Card.cache.read skey
|
127
127
|
if h.nil?
|
128
128
|
h = {}
|
@@ -137,7 +137,7 @@ module ClassMethods
|
|
137
137
|
|
138
138
|
def validate_fetch_opts! opts
|
139
139
|
return unless opts[:new] && opts[:skip_virtual]
|
140
|
-
|
140
|
+
raise Card::Error, 'fetch called with new args and skip_virtual'
|
141
141
|
end
|
142
142
|
|
143
143
|
def cache
|
@@ -196,7 +196,6 @@ module ClassMethods
|
|
196
196
|
query = { mark_type => mark_key }
|
197
197
|
query[:trash] = false unless opts[:look_in_trash]
|
198
198
|
card = Card.where(query).take
|
199
|
-
card.restore_subcards if card
|
200
199
|
card
|
201
200
|
end
|
202
201
|
|
@@ -288,7 +287,7 @@ end
|
|
288
287
|
|
289
288
|
def expire_pieces
|
290
289
|
cardname.piece_names.each do |piece|
|
291
|
-
Card.expire piece
|
290
|
+
Card.expire piece
|
292
291
|
end
|
293
292
|
end
|
294
293
|
|
@@ -298,19 +297,14 @@ def expire_hard
|
|
298
297
|
Card.cache.hard.delete "~#{id}" if id
|
299
298
|
end
|
300
299
|
|
301
|
-
def expire_soft
|
302
|
-
if subcards
|
303
|
-
expire_subcards
|
304
|
-
else
|
305
|
-
preserve_subcards
|
306
|
-
end
|
300
|
+
def expire_soft
|
307
301
|
Card.cache.soft.delete key
|
308
302
|
Card.cache.soft.delete "~#{id}" if id
|
309
303
|
end
|
310
304
|
|
311
|
-
def expire
|
305
|
+
def expire
|
312
306
|
expire_hard
|
313
|
-
expire_soft
|
307
|
+
expire_soft
|
314
308
|
end
|
315
309
|
|
316
310
|
def refresh force=false
|