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
@@ -5,78 +5,80 @@ describe Card::Set::All::Rules do
|
|
5
5
|
Card::Auth.current_id = Card::WagnBotID
|
6
6
|
end
|
7
7
|
|
8
|
-
describe
|
9
|
-
it
|
10
|
-
Card.create! name:
|
11
|
-
expect(Card.create!(
|
8
|
+
describe 'setting data setup' do
|
9
|
+
it 'should make Set of +*type' do
|
10
|
+
Card.create! name: 'SpeciForm', type: 'Cardtype'
|
11
|
+
expect(Card.create!(name: 'SpeciForm+*type').type_code).to eq(:set)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
describe
|
16
|
-
it
|
17
|
-
Card.create name:
|
18
|
-
|
15
|
+
describe '#rule' do
|
16
|
+
it 'retrieves Set based value' do
|
17
|
+
Card.create name: 'Book+*type+*add help', content: 'authorize'
|
18
|
+
add_help_rule = Card.new(type: 'Book').rule(:add_help, fallback: :help)
|
19
|
+
expect(add_help_rule).to eq('authorize')
|
19
20
|
end
|
20
21
|
|
21
|
-
it
|
22
|
-
#Card.create name:
|
23
|
-
|
24
|
-
#
|
25
|
-
|
22
|
+
it 'retrieves default values' do
|
23
|
+
# Card.create name: 'all Basic cards', type: 'Set',
|
24
|
+
# content: "{\"type\": \"Basic\'}'
|
25
|
+
# defaults should work when other Sets are present
|
26
|
+
assert Card.create(name: '*all+*add help', content: 'lobotomize')
|
27
|
+
# Card.default_rule(:add_help, fallback: :help).should == 'lobotomize'
|
28
|
+
add_help_rule = Card.new(type: 'Basic').rule(:add_help, fallback: :help)
|
29
|
+
expect(add_help_rule).to eq('lobotomize')
|
26
30
|
end
|
27
31
|
|
28
|
-
it
|
29
|
-
Card.create! name:
|
30
|
-
expect(Card[
|
32
|
+
it 'retrieves single values' do
|
33
|
+
Card.create! name: 'banana+*self+*help', content: 'pebbles'
|
34
|
+
expect(Card['banana'].rule(:help)).to eq('pebbles')
|
31
35
|
end
|
32
36
|
|
33
37
|
context 'with fallback' do
|
34
38
|
before do
|
35
|
-
Card.create name:
|
39
|
+
Card.create name: '*all+*help', content: 'edit any kind of card'
|
36
40
|
end
|
37
|
-
|
38
|
-
it
|
39
|
-
expect(
|
41
|
+
subject { Card.new(type: 'Book').rule(:add_help, fallback: :help) }
|
42
|
+
it 'retrieves default setting' do
|
43
|
+
expect(subject).to eq('edit any kind of card')
|
40
44
|
end
|
41
45
|
|
42
|
-
it
|
43
|
-
Card.create name:
|
44
|
-
expect(
|
46
|
+
it 'retrieves primary setting' do
|
47
|
+
Card.create name: '*all+*add help', content: 'add any kind of card'
|
48
|
+
expect(subject).to eq('add any kind of card')
|
45
49
|
end
|
46
50
|
|
47
|
-
it
|
48
|
-
Card.create name:
|
49
|
-
Card.create name:
|
50
|
-
expect(
|
51
|
+
it 'retrieves more specific default setting' do
|
52
|
+
Card.create name: '*all+*add help', content: 'add any kind of card'
|
53
|
+
Card.create name: '*Book+*type+*help', content: 'edit a Book'
|
54
|
+
expect(subject).to eq('add any kind of card')
|
51
55
|
end
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
55
|
-
|
56
|
-
describe "#setting_codenames_by_group" do
|
59
|
+
describe '#setting_codenames_by_group' do
|
57
60
|
before do
|
58
|
-
@pointer_settings =
|
61
|
+
@pointer_settings = [:options, :options_label, :input]
|
59
62
|
end
|
60
63
|
it "doesn't fail on nonexistent trunks" do
|
61
|
-
|
64
|
+
codenames = Card.new(name: 'foob+*right').setting_codenames_by_group
|
65
|
+
expect(codenames.class).to eq(Hash)
|
62
66
|
end
|
63
67
|
|
64
|
-
it
|
65
|
-
skip
|
68
|
+
it 'returns universal setting names for non-pointer set' do
|
69
|
+
skip 'Different api, we should just put the tests in a new spec for that'
|
66
70
|
snbg = Card.fetch('*star').setting_codenames_by_group
|
67
|
-
#warn "snbg #{snbg.class} #{snbg.inspect}"
|
71
|
+
# warn "snbg #{snbg.class} #{snbg.inspect}"
|
68
72
|
expect(snbg.keys.length).to eq(4)
|
69
73
|
expect(snbg.keys.first).to be_a Symbol
|
70
|
-
expect(snbg.keys.member?(
|
74
|
+
expect(snbg.keys.member?(:pointer)).not_to be_truthy
|
71
75
|
end
|
72
76
|
|
73
|
-
|
74
|
-
it "returns pointer-specific setting names for pointer card" do
|
77
|
+
it 'returns pointer-specific setting names for pointer card' do
|
75
78
|
c = Card.fetch 'Fruit+*type+*create+*self', new: {}
|
76
79
|
snbg = c.setting_codenames_by_group
|
77
80
|
expect(snbg[:pointer]).to eq(@pointer_settings)
|
78
81
|
end
|
79
|
-
|
80
82
|
end
|
81
83
|
|
82
84
|
describe 'user specific rules' do
|
@@ -84,45 +86,50 @@ describe Card::Set::All::Rules do
|
|
84
86
|
Card::Auth.current_id = Card.fetch('Joe User').id
|
85
87
|
end
|
86
88
|
|
87
|
-
it
|
89
|
+
it 'user rule is recognized as rule' do
|
88
90
|
Card::Auth.as_bot do
|
89
|
-
card = Card.create
|
91
|
+
card = Card.create name: 'Book+*type+Joe User+*follow',
|
92
|
+
content: '[[*always]]'
|
90
93
|
expect(card.is_rule?).to be_truthy
|
91
94
|
end
|
92
95
|
end
|
93
96
|
|
94
|
-
it
|
97
|
+
it 'retrieves Set based value' do
|
95
98
|
Card::Auth.as_bot do
|
96
|
-
Card.create name:
|
99
|
+
Card.create name: 'Book+*type+Joe User+*follow', content: '[[*always]]'
|
97
100
|
end
|
98
|
-
expect(Card.new(
|
101
|
+
expect(Card.new(type: 'Book').rule(:follow)).to eq('[[*always]]')
|
99
102
|
end
|
100
103
|
|
101
|
-
it
|
104
|
+
it 'retrieves user indepedent Set based value' do
|
102
105
|
Card::Auth.as_bot do
|
103
|
-
Card.create name:
|
106
|
+
Card.create name: 'Book+*type+*all+*follow', content: '[[Home]]'
|
104
107
|
end
|
105
|
-
expect(Card.new(
|
108
|
+
expect(Card.new(type: 'Book').rule(:follow)).to eq('[[Home]]')
|
106
109
|
end
|
107
110
|
|
108
|
-
it
|
111
|
+
it 'uses *all user rule when no super.s'
|
109
112
|
|
110
|
-
it
|
113
|
+
it 'user-specific value overwrites user-independent value' do
|
111
114
|
Card::Auth.as_bot do
|
112
|
-
Card.create name:
|
113
|
-
Card.create name:
|
115
|
+
Card.create name: 'Book+*type+Joe User+*follow', content: '[[*never]]'
|
116
|
+
Card.create name: 'Book+*type+*all+*follow', content: '[[*always]]'
|
114
117
|
end
|
115
|
-
expect(Card.new(
|
118
|
+
expect(Card.new(type: 'Book').rule(:follow)).to eq('[[*never]]')
|
116
119
|
end
|
117
120
|
|
118
121
|
describe '#all_user_ids_with_rule_for' do
|
119
|
-
it
|
122
|
+
it 'returns all user with values for the given Set and rule' do
|
120
123
|
Card::Auth.as_bot do
|
121
|
-
Card.create(name:
|
124
|
+
Card.create(name: 'Book+*type+Joe User+*follow', content: '[[Home]]')
|
122
125
|
Card::Auth.current_id = Card.fetch('Joe Admin').id
|
123
|
-
Card.create(name:
|
124
|
-
user_ids = Card.all_user_ids_with_rule_for(
|
125
|
-
|
126
|
+
Card.create(name: 'Book+*type+Joe Admin+*follow', content: '[[Home]]')
|
127
|
+
user_ids = Card.all_user_ids_with_rule_for(
|
128
|
+
Card.fetch('Book+*type'), :follow
|
129
|
+
)
|
130
|
+
expect(user_ids.sort).to eq(
|
131
|
+
[Card['Joe User'].id, Card['Joe Admin'].id].sort
|
132
|
+
)
|
126
133
|
end
|
127
134
|
end
|
128
135
|
end
|
@@ -29,9 +29,9 @@ module RenameMethods
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
include RenameMethods
|
33
|
-
|
34
32
|
describe Card::Set::All::TrackedAttributes do
|
33
|
+
include RenameMethods
|
34
|
+
|
35
35
|
describe 'set_name' do
|
36
36
|
it 'should handle case variants' do
|
37
37
|
@c = Card.create! name: 'chump'
|
@@ -266,7 +266,6 @@ describe Card::Set::All::TrackedAttributes do
|
|
266
266
|
end
|
267
267
|
end
|
268
268
|
|
269
|
-
|
270
269
|
context 'blues' do
|
271
270
|
before do
|
272
271
|
Card::Auth.as_bot do
|
@@ -281,7 +280,7 @@ describe Card::Set::All::TrackedAttributes do
|
|
281
280
|
end
|
282
281
|
end
|
283
282
|
|
284
|
-
it '
|
283
|
+
it 'test_updates_nests_when_renaming' do
|
285
284
|
c1 = Card['Blue']
|
286
285
|
c2 = Card['blue includer 1']
|
287
286
|
c3 = Card['blue includer 2']
|
@@ -291,7 +290,7 @@ describe Card::Set::All::TrackedAttributes do
|
|
291
290
|
assert_equal '{{Red|closed;other:stuff}}', Card.find(c3.id).content
|
292
291
|
end
|
293
292
|
|
294
|
-
it '
|
293
|
+
it 'test_updates_nests_when_renaming_to_plus' do
|
295
294
|
c1 = Card['Blue']
|
296
295
|
c2 = Card['blue includer 1']
|
297
296
|
c1.update_attributes name: 'blue includer 1+color',
|
@@ -40,6 +40,28 @@ describe Card::Set::All::Trash do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
it 'deletes children under a set' do
|
44
|
+
Card::Auth.as_bot do
|
45
|
+
type = Card.create! name: 'Metric Value', type_id: Card::CardtypeID
|
46
|
+
Card.create! name: 'Metric value+value+*type plus right',
|
47
|
+
type_id: Card::SetID
|
48
|
+
mv1_name = 'Richard Mills+Annual Sales+CA+2014'
|
49
|
+
mv2_name = 'Richard Mills+Annual Profits+CA+2014'
|
50
|
+
Card.create! name: mv1_name, type_id: type.id
|
51
|
+
Card.create! name: mv2_name, type_id: type.id
|
52
|
+
Card.create! name: "#{mv1_name}+value", type_id: Card::BasicID
|
53
|
+
Card.create! name: "#{mv2_name}+value", type_id: Card::BasicID
|
54
|
+
|
55
|
+
expect(Card['CA']).to be
|
56
|
+
Card['CA'].delete
|
57
|
+
expect(Card['CA']).not_to be
|
58
|
+
expect(Card[mv1_name]).not_to be
|
59
|
+
expect(Card["#{mv1_name}+value"]).not_to be
|
60
|
+
expect(Card[mv2_name]).not_to be
|
61
|
+
expect(Card["#{mv2_name}+value"]).not_to be
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
43
65
|
it 'deletes account of user' do
|
44
66
|
Card::Auth.as_bot do
|
45
67
|
@signup = Card.create!(
|
@@ -51,7 +73,7 @@ describe Card::Set::All::Trash do
|
|
51
73
|
Card::Cache.reset_all
|
52
74
|
|
53
75
|
Card::Auth.as_bot do
|
54
|
-
expect(Card.search :
|
76
|
+
expect(Card.search right: '*account').not_to be_empty
|
55
77
|
Card['born to die'].delete!
|
56
78
|
end
|
57
79
|
expect(Card['born to die+*account']).not_to be
|
@@ -6,7 +6,7 @@ describe Card::Set::All::Type do
|
|
6
6
|
Card::Auth.as_bot do
|
7
7
|
@type = Card.create! name: 'Hat', type: 'Cardtype'
|
8
8
|
end
|
9
|
-
@hat =
|
9
|
+
@hat = Card.new type: 'Hat'
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should have a type_name' do
|
@@ -24,10 +24,8 @@ describe Card::Set::All::Type do
|
|
24
24
|
it 'should have a type_card' do
|
25
25
|
expect(@hat.type_card).to eq(@type)
|
26
26
|
end
|
27
|
-
|
28
27
|
end
|
29
28
|
|
30
|
-
|
31
29
|
describe 'card with structured type' do
|
32
30
|
before do
|
33
31
|
Card::Auth.as_bot do
|
@@ -37,7 +35,7 @@ describe Card::Set::All::Type do
|
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
40
|
-
it
|
38
|
+
it 'should clear cache of structured nested card after saving' do
|
41
39
|
Card::Auth.as_bot do
|
42
40
|
expect(Card.fetch('t1+results', new: {}).type_name).to eq('Basic')
|
43
41
|
|
@@ -48,5 +46,4 @@ describe Card::Set::All::Type do
|
|
48
46
|
end
|
49
47
|
end
|
50
48
|
end
|
51
|
-
|
52
49
|
end
|
@@ -15,7 +15,7 @@ class Card
|
|
15
15
|
}
|
16
16
|
|
17
17
|
# replace with enum if we start using rails 4
|
18
|
-
TYPE = [:create, :update, :delete]
|
18
|
+
TYPE = [:create, :update, :delete].freeze
|
19
19
|
|
20
20
|
def expire
|
21
21
|
self.class.cache.delete id.to_s
|
@@ -40,9 +40,7 @@ class Card
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def delete_old
|
43
|
-
Card.find_each
|
44
|
-
card.delete_old_actions
|
45
|
-
end
|
43
|
+
Card.find_each(&:delete_old_actions)
|
46
44
|
Card::Act.delete_actionless
|
47
45
|
end
|
48
46
|
end
|
@@ -83,12 +81,12 @@ class Card
|
|
83
81
|
|
84
82
|
def new_values
|
85
83
|
@new_values ||=
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
84
|
+
{
|
85
|
+
content: new_value_for(:db_content),
|
86
|
+
name: new_value_for(:name),
|
87
|
+
cardtype: ((typecard = Card[new_value_for(:type_id).to_i]) &&
|
88
|
+
typecard.name.capitalize)
|
89
|
+
}
|
92
90
|
end
|
93
91
|
|
94
92
|
def old_values
|
@@ -25,15 +25,13 @@ def nth_action index
|
|
25
25
|
index = index.to_i
|
26
26
|
return unless id && index > 0
|
27
27
|
Action.where("draft is not true AND card_id = #{id}")
|
28
|
-
|
28
|
+
.order(:id).limit(1).offset(index - 1).first
|
29
29
|
end
|
30
30
|
|
31
31
|
def revision action
|
32
32
|
# a "revision" refers to the state of all tracked fields
|
33
33
|
# at the time of a given action
|
34
|
-
if action.is_a? Integer
|
35
|
-
action = Card::Action.fetch(action)
|
36
|
-
end
|
34
|
+
action = Card::Action.fetch(action) if action.is_a? Integer
|
37
35
|
action && Card::TRACKED_FIELDS.inject({}) do |attr_changes, field|
|
38
36
|
last_change = action.card_changes.find_by_field_name(field) ||
|
39
37
|
last_change_on(field, not_after: action)
|
@@ -1,10 +1,13 @@
|
|
1
1
|
|
2
|
-
# if these aren't in a nested module, the methods just overwrite the base
|
3
|
-
# but we need a distict module so that super will be able to refer to
|
2
|
+
# if these aren't in a nested module, the methods just overwrite the base
|
3
|
+
# methods, but we need a distict module so that super will be able to refer to
|
4
|
+
# the base methods.
|
4
5
|
def content
|
5
6
|
if @selected_action_id
|
6
7
|
@selected_content ||= begin
|
7
|
-
|
8
|
+
change = last_change_on :db_content, not_after: @selected_action_id,
|
9
|
+
including_drafts: true
|
10
|
+
(change && change.value) || db_content
|
8
11
|
end
|
9
12
|
else
|
10
13
|
super
|
@@ -19,33 +22,33 @@ end
|
|
19
22
|
def save_content_draft content
|
20
23
|
super
|
21
24
|
acts.create do |act|
|
22
|
-
act.actions.build(draft: true, card_id: id)
|
25
|
+
act.actions.build(draft: true, card_id: id)
|
26
|
+
.card_changes.build(field: :db_content, value: content)
|
23
27
|
end
|
24
28
|
end
|
25
29
|
|
26
|
-
def last_change_on
|
27
|
-
where_sql =
|
28
|
-
|
29
|
-
where_sql += 'AND (draft is not true) '
|
30
|
-
end
|
30
|
+
def last_change_on field, opts={}
|
31
|
+
where_sql = 'card_actions.card_id = :card_id AND field = :field '
|
32
|
+
where_sql += 'AND (draft is not true) ' unless opts[:including_drafts]
|
31
33
|
where_sql += if opts[:before]
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
'AND card_action_id < :action_id'
|
35
|
+
elsif opts[:not_after]
|
36
|
+
'AND card_action_id <= :action_id'
|
37
|
+
else
|
38
|
+
''
|
39
|
+
end
|
38
40
|
|
39
41
|
action_arg = opts[:before] || opts[:not_after]
|
40
|
-
action_id = action_arg.
|
42
|
+
action_id = action_arg.is_a?(Card::Action) ? action_arg.id : action_arg
|
41
43
|
field_index = Card::TRACKED_FIELDS.index(field.to_s)
|
42
|
-
Change.joins(:action).where(
|
43
|
-
|
44
|
+
Change.joins(:action).where(
|
45
|
+
where_sql, card_id: id, field: field_index, action_id: action_id
|
44
46
|
).order(:id).last
|
45
47
|
end
|
46
48
|
|
47
49
|
def selected_action_id
|
48
|
-
@selected_action_id || (@current_action
|
50
|
+
@selected_action_id || (@current_action && @current_action.id) ||
|
51
|
+
last_action_id
|
49
52
|
end
|
50
53
|
|
51
54
|
def selected_action_id= action_id
|
@@ -54,7 +57,7 @@ def selected_action_id= action_id
|
|
54
57
|
end
|
55
58
|
|
56
59
|
def selected_action
|
57
|
-
selected_action_id
|
60
|
+
selected_action_id && Action.fetch(selected_action_id)
|
58
61
|
end
|
59
62
|
|
60
63
|
def with_selected_action_id action_id
|
@@ -74,13 +77,14 @@ def selected_content_action_id
|
|
74
77
|
end
|
75
78
|
|
76
79
|
def new_content_action_id
|
77
|
-
if @current_action && (new_card? || @current_action.new_content? ||
|
80
|
+
if @current_action && (new_card? || @current_action.new_content? ||
|
81
|
+
db_content_changed?)
|
78
82
|
@current_action.id
|
79
83
|
end
|
80
84
|
end
|
81
85
|
|
82
86
|
def last_action_id
|
83
|
-
la = last_action
|
87
|
+
(la = last_action) && la.id
|
84
88
|
end
|
85
89
|
|
86
90
|
def last_action
|
@@ -104,7 +108,9 @@ end
|
|
104
108
|
def last_act
|
105
109
|
if (action = last_action)
|
106
110
|
last_act_on_self = acts.last
|
107
|
-
if last_act_on_self
|
111
|
+
if last_act_on_self &&
|
112
|
+
(action.act == last_act_on_self ||
|
113
|
+
last_act_on_self.acted_at > action.act.acted_at)
|
108
114
|
last_act_on_self
|
109
115
|
else
|
110
116
|
action.act
|
@@ -116,7 +122,6 @@ def acted_at
|
|
116
122
|
last_act.acted_at
|
117
123
|
end
|
118
124
|
|
119
|
-
|
120
125
|
def previous_action action_id
|
121
126
|
if action_id
|
122
127
|
action_index = actions.find_index do |a|
|
@@ -127,15 +132,15 @@ def previous_action action_id
|
|
127
132
|
end
|
128
133
|
|
129
134
|
def revised_at
|
130
|
-
(last_action
|
135
|
+
(last_action && (act = last_action.act) && act.acted_at) || Time.zone.now
|
131
136
|
end
|
132
137
|
|
133
138
|
def creator
|
134
|
-
Card[
|
139
|
+
Card[creator_id]
|
135
140
|
end
|
136
141
|
|
137
142
|
def updater
|
138
|
-
Card[
|
143
|
+
Card[updater_id]
|
139
144
|
end
|
140
145
|
|
141
146
|
def clean_html?
|
@@ -146,10 +151,11 @@ def draft_acts
|
|
146
151
|
drafts.created_by(Card::Auth.current_id).map(&:act)
|
147
152
|
end
|
148
153
|
|
149
|
-
event :detect_conflict,
|
150
|
-
|
151
|
-
|
154
|
+
event :detect_conflict, :validate,
|
155
|
+
on: :update, when: proc { |c| c.history? } do
|
156
|
+
if last_action_id_before_edit &&
|
157
|
+
last_action_id_before_edit.to_i != last_action_id &&
|
158
|
+
last_action.act.actor_id != Auth.current_id
|
159
|
+
errors.add :conflict, 'changes not based on latest revision'
|
152
160
|
end
|
153
161
|
end
|
154
|
-
|
155
|
-
|