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
@@ -0,0 +1,126 @@
|
|
1
|
+
class Card
|
2
|
+
module Set
|
3
|
+
module Event
|
4
|
+
def event event, stage_or_opts={}, opts={}, &final
|
5
|
+
if stage_or_opts.is_a? Symbol
|
6
|
+
opts[:in] = stage_or_opts
|
7
|
+
else
|
8
|
+
opts = stage_or_opts
|
9
|
+
end
|
10
|
+
process_stage_opts opts
|
11
|
+
|
12
|
+
Card.define_callbacks event
|
13
|
+
define_event event, opts, &final
|
14
|
+
set_event_callbacks event, opts
|
15
|
+
end
|
16
|
+
|
17
|
+
def define_event event, opts, &final
|
18
|
+
final_method_name = "#{event}_without_callbacks" # should be private?
|
19
|
+
class_eval do
|
20
|
+
define_method final_method_name, &final
|
21
|
+
end
|
22
|
+
|
23
|
+
if with_delay? opts
|
24
|
+
delaying_method = "#{event}_with_delay"
|
25
|
+
define_event_delaying_method event, delaying_method
|
26
|
+
define_event_method event, delaying_method, opts
|
27
|
+
define_active_job event, final_method_name, opts[:queue_as]
|
28
|
+
else
|
29
|
+
define_event_method event, final_method_name, opts
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def with_delay? opts
|
36
|
+
opts[:after] == :integrate_with_delay_stage
|
37
|
+
end
|
38
|
+
|
39
|
+
def process_stage_opts opts
|
40
|
+
case
|
41
|
+
when opts[:after] || opts[:before]
|
42
|
+
# ignore :in options
|
43
|
+
when opts[:in]
|
44
|
+
opts[:after] = :"#{opts.delete(:in)}_stage" if opts[:in]
|
45
|
+
end
|
46
|
+
opts[:on] = [:create, :update] if opts[:on] == :save
|
47
|
+
end
|
48
|
+
|
49
|
+
def define_event_delaying_method event, method_name
|
50
|
+
class_eval do
|
51
|
+
define_method method_name, proc {
|
52
|
+
s_attr =
|
53
|
+
serializable_attributes.each_with_object({}) do |name, hash|
|
54
|
+
value = instance_variable_get("@#{name}")
|
55
|
+
hash[name] =
|
56
|
+
# ActiveJob doesn't accept symbols as arguments
|
57
|
+
if value.is_a? Symbol
|
58
|
+
{ value: value.to_s, symbol: true }
|
59
|
+
else
|
60
|
+
{ value: value }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
Object.const_get(event.to_s.camelize).perform_later(self, s_attr)
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def define_event_method event, call_method, _opts
|
69
|
+
class_eval do
|
70
|
+
define_method event do
|
71
|
+
# puts "#{name}:#{event}".green
|
72
|
+
run_callbacks event do
|
73
|
+
send call_method
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# creates an Active Job.
|
80
|
+
# The scheduled job gets the card object as argument and all serializable
|
81
|
+
# attributes of the card.
|
82
|
+
# (when the job is executed ActiveJob fetches the card from the database
|
83
|
+
# so all attributes get lost)
|
84
|
+
# @param name [String] the name for the ActiveJob child class
|
85
|
+
# @param final_method [String] the name of the card instance method to be
|
86
|
+
# queued
|
87
|
+
# @option queue [Symbol] (:default) the name of the queue8
|
88
|
+
def define_active_job name, final_method, queue=:default
|
89
|
+
class_name = name.to_s.camelize
|
90
|
+
eval %(
|
91
|
+
class ::#{class_name} < ActiveJob::Base
|
92
|
+
queue_as #{queue}
|
93
|
+
end
|
94
|
+
)
|
95
|
+
Object.const_get(class_name).class_eval do
|
96
|
+
define_method :perform, proc { |card, attributes|
|
97
|
+
attributes.each do |attname, args|
|
98
|
+
# symbols are not allowed so all symbols arrive here as strings
|
99
|
+
# convert strings that were symbols before back to symbols
|
100
|
+
value = args[:symbol] ? args[:value].to_sym : args[:value]
|
101
|
+
card.instance_variable_set("@#{attname}", value)
|
102
|
+
end
|
103
|
+
card.include_set_modules
|
104
|
+
card.send final_method
|
105
|
+
}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def set_event_callbacks event, opts
|
110
|
+
[:before, :after, :around].each do |kind|
|
111
|
+
next unless (object_method = opts.delete(kind))
|
112
|
+
this_set_module = self
|
113
|
+
Card.class_eval do
|
114
|
+
set_callback(
|
115
|
+
object_method, kind, event,
|
116
|
+
prepend: true, if: proc do |c|
|
117
|
+
c.singleton_class.include?(this_set_module) &&
|
118
|
+
c.event_applies?(opts)
|
119
|
+
end
|
120
|
+
)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/lib/card/set_pattern.rb
CHANGED
@@ -29,14 +29,14 @@ class Card
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def pattern
|
32
|
-
Card.fetch(
|
32
|
+
Card.fetch(pattern_id, skip_modules: true).cardname
|
33
33
|
end
|
34
34
|
|
35
35
|
def register pattern_code, opts={}
|
36
|
-
if self.pattern_id = Card::Codename[pattern_code]
|
36
|
+
if (self.pattern_id = Card::Codename[pattern_code])
|
37
37
|
self.pattern_code = pattern_code
|
38
38
|
Card.set_patterns.insert opts.delete(:index).to_i, self
|
39
|
-
self.anchorless = !respond_to?(
|
39
|
+
self.anchorless = !respond_to?(:anchor_name)
|
40
40
|
opts.each { |key, val| send "#{key}=", val }
|
41
41
|
else
|
42
42
|
warn "no codename for pattern_code #{pattern_code}"
|
@@ -48,11 +48,12 @@ class Card
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def anchor_parts_count
|
51
|
-
@anchor_parts_count ||= (
|
51
|
+
@anchor_parts_count ||= (anchorless? ? 0 : 1)
|
52
52
|
end
|
53
53
|
|
54
54
|
def write_tmp_file pattern_code, from_file, seq
|
55
|
-
to_file = "#{Card.paths['tmp/set_pattern'].first}
|
55
|
+
to_file = "#{Card.paths['tmp/set_pattern'].first}/" \
|
56
|
+
"#{seq}-#{pattern_code}.rb"
|
56
57
|
klass = "Card::#{pattern_code.camelize}Set"
|
57
58
|
file_content = <<EOF
|
58
59
|
# -*- encoding : utf-8 -*-
|
@@ -61,7 +62,7 @@ class #{klass} < Card::SetPattern
|
|
61
62
|
class << self
|
62
63
|
# ~~~~~~~~~~~ above autogenerated; below pulled from #{from_file} ~~~~~~~~~~~
|
63
64
|
|
64
|
-
#{
|
65
|
+
#{File.read from_file}
|
65
66
|
|
66
67
|
# ~~~~~~~~~~~ below autogenerated; above pulled from #{from_file} ~~~~~~~~~~~
|
67
68
|
end
|
@@ -74,17 +75,16 @@ EOF
|
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
77
|
-
|
78
78
|
# Instance methods
|
79
79
|
|
80
80
|
def initialize card
|
81
81
|
unless self.class.anchorless?
|
82
82
|
@anchor_name = self.class.anchor_name(card).to_name
|
83
83
|
@anchor_id = if self.class.respond_to? :anchor_id
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
84
|
+
self.class.anchor_id card
|
85
|
+
else
|
86
|
+
Card.fetch_id @anchor_name
|
87
|
+
end
|
88
88
|
end
|
89
89
|
self
|
90
90
|
end
|
@@ -100,21 +100,21 @@ EOF
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def lookup_module_list modules_hash
|
103
|
-
module_key && modules_hash[
|
103
|
+
module_key && modules_hash[module_key]
|
104
104
|
end
|
105
105
|
|
106
106
|
def module_list
|
107
|
-
lookup_module_list Card::Set.modules[
|
107
|
+
lookup_module_list Card::Set.modules[:nonbase]
|
108
108
|
end
|
109
109
|
|
110
110
|
def format_module_list klass
|
111
|
-
hash = Card::Set.modules[
|
111
|
+
(hash = Card::Set.modules[:nonbase_format][klass]) && lookup_module_list(hash)
|
112
112
|
end
|
113
113
|
|
114
114
|
def anchor_codenames
|
115
115
|
@anchor_name.parts.map do |part|
|
116
116
|
part_id = Card.fetch_id part
|
117
|
-
part_id && Card::Codename[
|
117
|
+
part_id && Card::Codename[part_id.to_i] || (return nil)
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
@@ -131,15 +131,19 @@ EOF
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def safe_key
|
134
|
-
caps_part = self.class.pattern_code.
|
135
|
-
self.class.anchorless?
|
134
|
+
caps_part = self.class.pattern_code.tr(' ', '_').upcase
|
135
|
+
if self.class.anchorless?
|
136
|
+
caps_part
|
137
|
+
else
|
138
|
+
"#{caps_part}-#{@anchor_name.safe_key}"
|
139
|
+
end
|
136
140
|
end
|
137
141
|
|
138
142
|
def rule_set_key
|
139
143
|
if self.class.anchorless?
|
140
144
|
self.class.pattern_code
|
141
145
|
elsif @anchor_id
|
142
|
-
|
146
|
+
"#{@anchor_id}+#{self.class.pattern_code}"
|
143
147
|
end
|
144
148
|
end
|
145
149
|
end
|
@@ -152,24 +156,33 @@ EOF
|
|
152
156
|
|
153
157
|
def lookup_inherited_key
|
154
158
|
return unless @inherit_card
|
155
|
-
card
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
#default_rule.
|
161
|
-
|
162
|
-
(
|
163
|
-
|
159
|
+
card = @inherit_card
|
160
|
+
@inherit_card = nil
|
161
|
+
|
162
|
+
(default_rule = card.rule_card(:default)) &&
|
163
|
+
(type_code = default_rule.type_code) &&
|
164
|
+
# default_rule.cardname.size > 2 and
|
165
|
+
# default_rule.left.right.codename == self.class.pattern_code
|
166
|
+
(mod_key = "Type::#{type_code.to_s.camelize}") &&
|
167
|
+
(Card::Set.modules[:nonbase_format].values +
|
168
|
+
[Card::Set.modules[:nonbase]]).any? { |hash| hash[mod_key] } &&
|
164
169
|
mod_key
|
165
170
|
end
|
166
171
|
|
167
172
|
def inherited_key
|
168
|
-
|
173
|
+
if defined?(@inherited_key)
|
174
|
+
@inherited_key
|
175
|
+
else
|
176
|
+
@inherited_key = lookup_inherited_key
|
177
|
+
end
|
169
178
|
end
|
170
179
|
|
171
180
|
def lookup_module_list modules_hash
|
172
|
-
|
181
|
+
if module_key
|
182
|
+
modules_hash[module_key]
|
183
|
+
else
|
184
|
+
inherited_key && modules_hash[inherited_key]
|
185
|
+
end
|
173
186
|
end
|
174
187
|
end
|
175
188
|
end
|
@@ -1,41 +1,41 @@
|
|
1
|
-
def is_in_mod? file,mod_path
|
1
|
+
def is_in_mod? file, mod_path
|
2
2
|
mod_msg = "below pulled from #{Rails.root}/mod/#{mod_path}/"
|
3
|
-
file.src.join(
|
3
|
+
file.src.join('') =~ /#{mod_msg}/
|
4
4
|
end
|
5
|
+
|
5
6
|
def card_simplecov_filters
|
6
7
|
add_filter 'spec/'
|
7
8
|
add_filter '/config/'
|
8
9
|
add_filter '/tasks/'
|
9
10
|
# filter all card mods
|
10
11
|
add_filter do |src_file|
|
11
|
-
src_file.filename =~ /tmp\//
|
12
|
-
|
13
|
-
Dir["mod/**/#{m[1].gsub("-","/").sub("/","/set/")}"].present?
|
12
|
+
src_file.filename =~ /tmp\// && !/\d+-(.+\.rb)/.match(src_file.filename) do |m|
|
13
|
+
Dir["mod/**/#{m[1].tr('-', '/').sub('/', '/set/')}"].present?
|
14
14
|
end
|
15
15
|
end
|
16
16
|
# add group for each deck mod
|
17
|
-
Dir['mod/*'].map{ |path| path.sub('mod/','') }.each do |mod|
|
17
|
+
Dir['mod/*'].map { |path| path.sub('mod/', '') }.each do |mod|
|
18
18
|
add_group mod.capitalize do |src_file|
|
19
|
-
src_file.filename =~ /mod\/#{mod}\//
|
19
|
+
src_file.filename =~ /mod\/#{mod}\// ||
|
20
20
|
(
|
21
|
-
src_file.filename =~ /tmp\//
|
22
|
-
match = /\d+-(.+\.rb)/.match(src_file.filename) do |m|
|
21
|
+
src_file.filename =~ /tmp\// &&
|
22
|
+
(match = /\d+-(.+\.rb)/.match(src_file.filename) do |m|
|
23
23
|
# '/set' is not in the path anymore after some updates
|
24
24
|
# but `set` exists in the path of the source files
|
25
|
-
Dir["mod/**/#{m[1].
|
26
|
-
end
|
27
|
-
is_in_mod?
|
25
|
+
Dir["mod/**/#{m[1].tr('-', '/').sub('/', '/set/')}"].present?
|
26
|
+
end) &&
|
27
|
+
is_in_mod?(src_file, mod)
|
28
28
|
)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
add_group 'Sets' do |src_file|
|
33
|
-
src_file.filename =~ /tmp\/set\//
|
34
|
-
|
33
|
+
src_file.filename =~ /tmp\/set\// &&
|
34
|
+
/\d+-(.+\.rb)/.match(src_file.filename) { |m| Dir["mod/**/#{m[1]}"].present? }
|
35
35
|
end
|
36
36
|
add_group 'Set patterns' do |src_file|
|
37
|
-
src_file.filename =~ /tmp\/set_pattern\//
|
38
|
-
|
37
|
+
src_file.filename =~ /tmp\/set_pattern\// &&
|
38
|
+
/\d+-(.+\.rb)/.match(src_file.filename) { |m| Dir["mod/**/#{m[1]}"].present? }
|
39
39
|
end
|
40
40
|
add_group 'Formats' do |src_file|
|
41
41
|
src_file.filename =~ /mod\/[^\/]+\/formats/
|
@@ -49,8 +49,8 @@ def card_core_dev_simplecov_filters
|
|
49
49
|
filters.clear # This will remove the :root_filter that comes via simplecov's defaults
|
50
50
|
add_filter do |src|
|
51
51
|
!(src.filename =~ /^#{SimpleCov.root}/) unless src.filename =~ /card/
|
52
|
-
end
|
53
|
-
|
52
|
+
end
|
53
|
+
|
54
54
|
add_filter '/spec/'
|
55
55
|
add_filter '/features/'
|
56
56
|
add_filter '/config/'
|
@@ -58,7 +58,7 @@ def card_core_dev_simplecov_filters
|
|
58
58
|
add_filter '/generators/'
|
59
59
|
add_filter 'lib/card'
|
60
60
|
|
61
|
-
add_group 'Card', 'lib/card'
|
61
|
+
add_group 'Card', 'lib/card'
|
62
62
|
add_group 'Set Patterns', 'tmp/set_pattern/'
|
63
63
|
add_group 'Sets', 'tmp/set/'
|
64
64
|
add_group 'Formats' do |src_file|
|
data/lib/card/spec_helper.rb
CHANGED
@@ -11,8 +11,7 @@ module Card::SpecHelper
|
|
11
11
|
# warn "(ath)login_as #{user.inspect}, #{Card::Auth.current_id}, #{@request.session[:user]}"
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
#FIXME - misleading name; sounds like it doesn't save.
|
14
|
+
def create! name, content=''
|
16
15
|
Card.create! name: name, content: content
|
17
16
|
end
|
18
17
|
|
@@ -27,7 +26,7 @@ module Card::SpecHelper
|
|
27
26
|
|
28
27
|
def debug_assert_view_select view_html, *args, &block
|
29
28
|
Rails.logger.rspec %(
|
30
|
-
|
29
|
+
#{CodeRay.scan(Nokogiri::XML(view_html, &:noblanks).to_s, :html).div}
|
31
30
|
<style>
|
32
31
|
.CodeRay {
|
33
32
|
background-color: #FFF;
|
@@ -75,19 +74,27 @@ module Card::SpecHelper
|
|
75
74
|
end
|
76
75
|
|
77
76
|
# Make expectations in the event phase.
|
78
|
-
# Takes the
|
79
|
-
# and registers the event_block with these options as an event.
|
77
|
+
# Takes a stage and registers the event_block in this stage as an event.
|
80
78
|
# Unknown methods in the event_block are executed in the rspec context
|
81
79
|
# instead of the card's context.
|
82
|
-
# An
|
80
|
+
# An additionally :trigger block in opts is expected that is called
|
83
81
|
# to start the event phase.
|
82
|
+
# Other event options like :on or :when are not supported yet.
|
84
83
|
# Example:
|
85
|
-
#
|
84
|
+
# in_stage :initialize,
|
86
85
|
# trigger: ->{ test_card.update_attributes! content: '' } do
|
87
86
|
# expect(item_names).to eq []
|
88
87
|
# end
|
89
|
-
def
|
88
|
+
def in_stage stage, opts={}, &event_block
|
89
|
+
stage_sym = :"#{stage}_stage"
|
90
90
|
$rspec_binding = binding
|
91
|
+
add_test_event stage_sym, :in_stage_test, &event_block
|
92
|
+
opts[:trigger].call
|
93
|
+
ensure
|
94
|
+
remove_test_event stage_sym, :in_stage_test
|
95
|
+
end
|
96
|
+
|
97
|
+
def add_test_event stage, name, &event_block
|
91
98
|
Card.class_eval do
|
92
99
|
def method_missing m, *args
|
93
100
|
begin
|
@@ -102,16 +109,33 @@ module Card::SpecHelper
|
|
102
109
|
rescue NameError
|
103
110
|
end
|
104
111
|
super
|
105
|
-
# raise NoMethodError
|
112
|
+
# raise NoMethodError
|
106
113
|
end
|
107
|
-
|
114
|
+
|
115
|
+
define_method name, event_block
|
108
116
|
end
|
109
|
-
Card.define_callbacks
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
117
|
+
Card.define_callbacks name
|
118
|
+
Card.set_callback stage, :before, name, prepend: true
|
119
|
+
end
|
120
|
+
|
121
|
+
def remove_test_event stage, name
|
122
|
+
Card.skip_callback stage, :before, name
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_event stage, _opts, &block
|
126
|
+
event_name = :"test_event_#{@events.size}"
|
127
|
+
stage_sym = :"#{stage}_stage"
|
128
|
+
@events << [stage_sym, event_name]
|
129
|
+
add_test_event stage_sym, event_name, &block
|
130
|
+
end
|
131
|
+
|
132
|
+
def with_test_events
|
133
|
+
@events = []
|
134
|
+
$rspec_binding = binding
|
135
|
+
yield
|
114
136
|
ensure
|
115
|
-
|
137
|
+
@events.each do |stage, name|
|
138
|
+
remove_test_event stage, name
|
139
|
+
end
|
116
140
|
end
|
117
141
|
end
|