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
data/lib/card/core_ext.rb
CHANGED
@@ -2,31 +2,31 @@ class Object
|
|
2
2
|
# FIXME: move this, mixin, don't extend Object
|
3
3
|
def deep_clone
|
4
4
|
case self
|
5
|
-
when Fixnum,Bignum,Float,NilClass,FalseClass,TrueClass,Symbol
|
5
|
+
when Fixnum, Bignum, Float, NilClass, FalseClass, TrueClass, Symbol
|
6
6
|
klone = self
|
7
7
|
when Hash
|
8
|
-
klone =
|
9
|
-
|
8
|
+
klone = clone
|
9
|
+
each { |k, v| klone[k] = v.deep_clone }
|
10
10
|
when Array
|
11
|
-
klone =
|
11
|
+
klone = clone
|
12
12
|
klone.clear
|
13
|
-
|
13
|
+
each { |v| klone << v.deep_clone }
|
14
14
|
else
|
15
|
-
klone =
|
15
|
+
klone = clone
|
16
16
|
end
|
17
|
-
klone.instance_variables.each
|
17
|
+
klone.instance_variables.each do |v|
|
18
18
|
klone.instance_variable_set(v,
|
19
|
-
|
20
|
-
|
19
|
+
klone.instance_variable_get(v).deep_clone)
|
20
|
+
end
|
21
21
|
klone
|
22
22
|
end
|
23
23
|
|
24
|
-
def send_unless method, *args, &
|
25
|
-
(
|
24
|
+
def send_unless method, *args, &_block
|
25
|
+
(block_given? ? yield : self) || send(method, *args)
|
26
26
|
end
|
27
27
|
|
28
|
-
def send_if method, *args, &
|
29
|
-
(
|
28
|
+
def send_if method, *args, &_block
|
29
|
+
(block_given? ? yield : self) && send(method, *args)
|
30
30
|
end
|
31
31
|
|
32
32
|
def to_name
|
@@ -38,29 +38,23 @@ class Object
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
|
42
|
-
|
43
41
|
class Module
|
44
42
|
RUBY_VERSION_18 = !!(RUBY_VERSION =~ /^1\.8/)
|
45
43
|
|
46
44
|
def const_get_if_defined const
|
47
|
-
args = RUBY_VERSION_18 ? [
|
48
|
-
if const_defined? *args
|
49
|
-
const_get *args
|
50
|
-
end
|
45
|
+
args = RUBY_VERSION_18 ? [const] : [const, false]
|
46
|
+
const_get *args if const_defined? *args
|
51
47
|
end
|
52
48
|
|
53
49
|
def const_get_or_set const
|
54
|
-
const_get_if_defined
|
50
|
+
const_get_if_defined(const) || const_set(const, yield)
|
55
51
|
end
|
56
52
|
end
|
57
53
|
|
58
|
-
|
59
|
-
|
60
54
|
class Hash
|
61
55
|
# FIXME: this is too ugly and narrow for a core extension.
|
62
56
|
class << self
|
63
|
-
def new_from_semicolon_attr_list
|
57
|
+
def new_from_semicolon_attr_list attr_string
|
64
58
|
return {} if attr_string.blank?
|
65
59
|
attr_string.strip.split(';').inject({}) do |result, pair|
|
66
60
|
value, key = pair.split(':').reverse
|
@@ -71,22 +65,20 @@ class Hash
|
|
71
65
|
end
|
72
66
|
end
|
73
67
|
end
|
74
|
-
|
75
68
|
end
|
76
69
|
|
77
|
-
|
78
70
|
class Kaminari::Helpers::Tag
|
79
71
|
def page_url_for page
|
80
72
|
p = params_for(page)
|
81
73
|
p.delete :controller
|
82
74
|
p.delete :action
|
83
75
|
card = Card[p.delete('id')]
|
84
|
-
card.format.path
|
76
|
+
card.format.path p
|
85
77
|
end
|
86
78
|
|
87
79
|
private
|
88
80
|
|
89
|
-
def params_for
|
81
|
+
def params_for page
|
90
82
|
page_params = Rack::Utils.parse_nested_query("#{@param_name}=#{page}")
|
91
83
|
page_params = @params.with_indifferent_access.deep_merge(page_params)
|
92
84
|
|
@@ -99,11 +91,9 @@ class Kaminari::Helpers::Tag
|
|
99
91
|
# from: {other: "params", user: {name: "yuki", page: 1}}
|
100
92
|
# to: {other: "params", user: {name: "yuki", page: nil}}
|
101
93
|
# (when @param_name == "user[page]")
|
102
|
-
@param_name.to_s.scan(/\w+/)[0..-2].inject(page_params){|h, k| h[k] }[$&] = nil
|
94
|
+
@param_name.to_s.scan(/\w+/)[0..-2].inject(page_params) { |h, k| h[k] }[$&] = nil
|
103
95
|
end
|
104
96
|
|
105
97
|
page_params
|
106
98
|
end
|
107
99
|
end
|
108
|
-
|
109
|
-
|
data/lib/card/diff.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
3
|
module Card::Diff
|
4
|
-
|
5
4
|
def self.complete a, b, opts={}
|
6
5
|
DiffBuilder.new(a, b, opts).complete
|
7
6
|
end
|
@@ -14,7 +13,7 @@ module Card::Diff
|
|
14
13
|
"<ins class='diffins diff-green'>#{text}</ins>"
|
15
14
|
end
|
16
15
|
|
17
|
-
def self.render_deleted_chunk text,
|
16
|
+
def self.render_deleted_chunk text, _count=true
|
18
17
|
"<del class='diffdel diff-red'>#{text}</del>"
|
19
18
|
end
|
20
19
|
|
@@ -40,7 +39,7 @@ module Card::Diff
|
|
40
39
|
#
|
41
40
|
# summary: {length: <number> , joint: <string> }
|
42
41
|
|
43
|
-
def initialize
|
42
|
+
def initialize old_version, new_version, opts={}
|
44
43
|
@new_version = new_version
|
45
44
|
@old_version = old_version
|
46
45
|
@lcs_opts = lcs_opts_for_format opts[:format]
|
@@ -48,7 +47,7 @@ module Card::Diff
|
|
48
47
|
@dels_cnt = 0
|
49
48
|
@adds_cnt = 0
|
50
49
|
|
51
|
-
if
|
50
|
+
if !@new_version
|
52
51
|
@complete = ''
|
53
52
|
@summary = ''
|
54
53
|
else
|
@@ -71,17 +70,11 @@ module Card::Diff
|
|
71
70
|
opts[:exclude] = /^</
|
72
71
|
when :text
|
73
72
|
opts[:reject] = /^</
|
74
|
-
opts[:postprocess] =
|
75
|
-
word.gsub("\n",'<br>')
|
76
|
-
end
|
73
|
+
opts[:postprocess] = proc { |word| word.gsub("\n", '<br>') }
|
77
74
|
when :pointer
|
78
|
-
opts[:preprocess] =
|
79
|
-
|
80
|
-
|
81
|
-
else #:raw
|
82
|
-
opts[:preprocess] = Proc.new do |word|
|
83
|
-
CGI::escapeHTML(word)
|
84
|
-
end
|
75
|
+
opts[:preprocess] = proc { |word| word.gsub('[[', '').gsub(']]', '') }
|
76
|
+
else # :raw
|
77
|
+
opts[:preprocess] = proc { |word| CGI.escapeHTML(word) }
|
85
78
|
end
|
86
79
|
opts
|
87
80
|
end
|
@@ -94,14 +87,17 @@ module Card::Diff
|
|
94
87
|
@adds_cnt = @lcs.adds_cnt
|
95
88
|
end
|
96
89
|
|
97
|
-
|
98
90
|
class LCS
|
99
91
|
attr_reader :adds_cnt, :dels_cnt
|
100
|
-
def initialize old_text, new_text, opts,
|
101
|
-
|
102
|
-
@
|
103
|
-
|
104
|
-
|
92
|
+
def initialize old_text, new_text, opts, _summary=nil
|
93
|
+
# regex; remove match completely from diff
|
94
|
+
@reject_pattern = opts[:reject]
|
95
|
+
|
96
|
+
# regex; put back to the result after diff
|
97
|
+
@exclude_pattern = opts[:exclude]
|
98
|
+
|
99
|
+
@preprocess = opts[:preprocess] # block; called with every word
|
100
|
+
@postprocess = opts[:postprocess] # block; called with complete diff
|
105
101
|
|
106
102
|
@adds_cnt = 0
|
107
103
|
@dels_cnt = 0
|
@@ -109,10 +105,10 @@ module Card::Diff
|
|
109
105
|
@splitters = %w( <[^>]+> \[\[[^\]]+\]\] \{\{[^}]+\}\} \s+ )
|
110
106
|
@disjunction_pattern = /^\s/
|
111
107
|
@summary ||= Summary.new opts[:summary]
|
112
|
-
if
|
108
|
+
if !old_text
|
113
109
|
list = split_and_preprocess(new_text)
|
114
110
|
if @exclude_pattern
|
115
|
-
list = list.reject{ |word| word.match @exclude_pattern }
|
111
|
+
list = list.reject { |word| word.match @exclude_pattern }
|
116
112
|
end
|
117
113
|
text = postprocess list.join
|
118
114
|
@result = added_chunk text
|
@@ -153,17 +149,18 @@ module Card::Diff
|
|
153
149
|
def run_diff
|
154
150
|
prev_action = nil
|
155
151
|
::Diff::LCS.traverse_balanced(@words[:old], @words[:new]) do |word|
|
156
|
-
|
157
152
|
if prev_action
|
158
|
-
if prev_action != word.action
|
159
|
-
|
160
|
-
|
153
|
+
if prev_action != word.action &&
|
154
|
+
!(prev_action == '-' && word.action == '!') &&
|
155
|
+
!(prev_action == '!' && word.action == '+')
|
161
156
|
|
162
157
|
# delete and/or add section stops here; write changes to result
|
163
158
|
write_dels
|
164
159
|
write_adds
|
165
160
|
|
166
|
-
|
161
|
+
# new neutral section starts
|
162
|
+
# we can just write excludees to result
|
163
|
+
write_excludees
|
167
164
|
|
168
165
|
else # current word belongs to edit of previous word
|
169
166
|
case word.action
|
@@ -192,7 +189,6 @@ module Card::Diff
|
|
192
189
|
@result = postprocess @result
|
193
190
|
end
|
194
191
|
|
195
|
-
|
196
192
|
def added_chunk text, count=true
|
197
193
|
@adds_cnt += 1 if count
|
198
194
|
Card::Diff.render_added_chunk text
|
@@ -203,14 +199,13 @@ module Card::Diff
|
|
203
199
|
Card::Diff.render_deleted_chunk text
|
204
200
|
end
|
205
201
|
|
206
|
-
|
207
202
|
def write_unchanged text
|
208
203
|
@result << text
|
209
204
|
@summary.omit
|
210
205
|
end
|
211
206
|
|
212
207
|
def write_dels
|
213
|
-
|
208
|
+
unless @dels.empty?
|
214
209
|
@result << deleted_chunk(@dels.join)
|
215
210
|
@summary.delete @dels.join
|
216
211
|
@dels = []
|
@@ -218,7 +213,7 @@ module Card::Diff
|
|
218
213
|
end
|
219
214
|
|
220
215
|
def write_adds
|
221
|
-
|
216
|
+
unless @adds.empty?
|
222
217
|
@result << added_chunk(@adds.join)
|
223
218
|
@summary.add @adds.join
|
224
219
|
@adds = []
|
@@ -226,13 +221,13 @@ module Card::Diff
|
|
226
221
|
end
|
227
222
|
|
228
223
|
def write_excludees
|
229
|
-
while ex = @excludees[:new].next
|
224
|
+
while (ex = @excludees[:new].next)
|
230
225
|
@result << ex[:element]
|
231
226
|
end
|
232
227
|
end
|
233
228
|
|
234
229
|
def del_old_excludees
|
235
|
-
while ex = @excludees[:old].next
|
230
|
+
while (ex = @excludees[:old].next)
|
236
231
|
if ex[:type] == :disjunction
|
237
232
|
@dels << ex[:element]
|
238
233
|
else
|
@@ -243,7 +238,7 @@ module Card::Diff
|
|
243
238
|
end
|
244
239
|
|
245
240
|
def add_new_excludees
|
246
|
-
while ex = @excludees[:new].next
|
241
|
+
while (ex = @excludees[:new].next)
|
247
242
|
if ex[:type] == :disjunction
|
248
243
|
@adds << ex[:element]
|
249
244
|
else
|
@@ -260,47 +255,59 @@ module Card::Diff
|
|
260
255
|
def process_element old_element, new_element, action
|
261
256
|
case action
|
262
257
|
when '-'
|
263
|
-
|
264
|
-
@excludees[:old].word_step
|
258
|
+
minus old_element
|
265
259
|
when '+'
|
266
|
-
|
267
|
-
@excludees[:new].word_step
|
260
|
+
plus new_element
|
268
261
|
when '!'
|
269
|
-
|
270
|
-
|
271
|
-
@excludees[:old].word_step
|
272
|
-
@excludees[:new].word_step
|
262
|
+
minus old_element
|
263
|
+
plus new_element
|
273
264
|
else
|
274
265
|
write_unchanged new_element
|
275
266
|
@excludees[:new].word_step
|
276
267
|
end
|
277
268
|
end
|
278
269
|
|
270
|
+
def plus new_element
|
271
|
+
@adds << new_element
|
272
|
+
@excludees[:new].word_step
|
273
|
+
end
|
274
|
+
|
275
|
+
def minus old_element
|
276
|
+
@dels << old_element
|
277
|
+
@excludees[:old].word_step
|
278
|
+
end
|
279
|
+
|
279
280
|
def separate_comparables_from_excludees text
|
280
|
-
# return two arrays, one with all words, one with pairs
|
281
|
+
# return two arrays, one with all words, one with pairs
|
282
|
+
# (index in word list, html_tag)
|
281
283
|
list = split_and_preprocess text
|
282
284
|
if @exclude_pattern
|
283
|
-
list
|
284
|
-
element, index = pair
|
285
|
-
if element.match @disjunction_pattern
|
286
|
-
res[1] << {chunk_index: index, element: element, type: :disjunction}
|
287
|
-
elsif element.match @exclude_pattern
|
288
|
-
res[1] << {chunk_index: index, element: element, type: :excludee}
|
289
|
-
else
|
290
|
-
res[0] << element
|
291
|
-
end
|
292
|
-
res
|
293
|
-
end
|
285
|
+
check_exclude_and_disjunction_pattern list
|
294
286
|
else
|
295
287
|
[list, []]
|
296
288
|
end
|
297
289
|
end
|
298
290
|
|
291
|
+
def check_exclude_and_disjunction_pattern list
|
292
|
+
list.each_with_index.each_with_object([[], []]) do |pair, res|
|
293
|
+
element, index = pair
|
294
|
+
if element.match @disjunction_pattern
|
295
|
+
res[1] << { chunk_index: index, element: element,
|
296
|
+
type: :disjunction }
|
297
|
+
elsif element.match @exclude_pattern
|
298
|
+
res[1] << { chunk_index: index, element: element, type:
|
299
|
+
:excludee }
|
300
|
+
else
|
301
|
+
res[0] << element
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
299
306
|
def split_and_preprocess text
|
300
307
|
splitted = split_to_list_of_words(text).select do |s|
|
301
|
-
s.
|
308
|
+
!s.empty? && (!@reject_pattern || !s.match(@reject_pattern))
|
302
309
|
end
|
303
|
-
@preprocess ? splitted.map {|s| @preprocess.call(s) } : splitted
|
310
|
+
@preprocess ? splitted.map { |s| @preprocess.call(s) } : splitted
|
304
311
|
end
|
305
312
|
|
306
313
|
def split_to_list_of_words text
|
@@ -324,7 +331,6 @@ module Card::Diff
|
|
324
331
|
end
|
325
332
|
end
|
326
333
|
|
327
|
-
|
328
334
|
class Summary
|
329
335
|
def initialize opts
|
330
336
|
opts ||= {}
|
@@ -348,7 +354,7 @@ module Card::Diff
|
|
348
354
|
end
|
349
355
|
|
350
356
|
def omit
|
351
|
-
|
357
|
+
if @chunks.empty? || @chunks.last[:action] != :ellipsis
|
352
358
|
add_chunk @joint, :ellipsis
|
353
359
|
end
|
354
360
|
end
|
@@ -357,7 +363,7 @@ module Card::Diff
|
|
357
363
|
|
358
364
|
def add_chunk text, action
|
359
365
|
if @remaining_chars > 0
|
360
|
-
@chunks << {action: action, text: text}
|
366
|
+
@chunks << { action: action, text: text }
|
361
367
|
@remaining_chars -= text.size
|
362
368
|
end
|
363
369
|
end
|
@@ -365,7 +371,7 @@ module Card::Diff
|
|
365
371
|
def render_chunks
|
366
372
|
truncate_overlap
|
367
373
|
@chunks.map do |chunk|
|
368
|
-
|
374
|
+
Card::Diff.render_chunk chunk[:action], chunk[:text]
|
369
375
|
end.join
|
370
376
|
end
|
371
377
|
|
@@ -377,20 +383,12 @@ module Card::Diff
|
|
377
383
|
end
|
378
384
|
|
379
385
|
index = @chunks.size - 1
|
380
|
-
while @remaining_chars < @joint.size
|
381
|
-
if @remaining_chars + @chunks[index][:text].size == @joint.size
|
382
|
-
|
383
|
-
if index-1 >= 0
|
384
|
-
if @chunks[index-1][:action] == :added
|
385
|
-
@chunks << {action: :ellipsis, text: @joint}
|
386
|
-
elsif @chunks[index-1][:action] == :deleted
|
387
|
-
@chunks << {action: :added, text: @joint}
|
388
|
-
end
|
389
|
-
end
|
386
|
+
while @remaining_chars < @joint.size && index >= 0
|
387
|
+
if @remaining_chars + @chunks[index][:text].size == @joint.size
|
388
|
+
replace_with_joint index
|
390
389
|
break
|
391
390
|
elsif @remaining_chars + @chunks[index][:text].size > @joint.size
|
392
|
-
|
393
|
-
@chunks[index][:text] += @joint
|
391
|
+
cut_with_joint index
|
394
392
|
break
|
395
393
|
else
|
396
394
|
@remaining_chars += @chunks[index][:text].size
|
@@ -401,6 +399,22 @@ module Card::Diff
|
|
401
399
|
end
|
402
400
|
end
|
403
401
|
|
402
|
+
def cut_with_joint index
|
403
|
+
@chunks[index][:text] =
|
404
|
+
@chunks[index][:text][0..(@remaining_chars - @joint.size - 1)]
|
405
|
+
@chunks[index][:text] += @joint
|
406
|
+
end
|
407
|
+
|
408
|
+
def replace_with_joint index
|
409
|
+
@chunks.pop
|
410
|
+
if index - 1 >= 0
|
411
|
+
if @chunks[index - 1][:action] == :added
|
412
|
+
@chunks << { action: :ellipsis, text: @joint }
|
413
|
+
elsif @chunks[index - 1][:action] == :deleted
|
414
|
+
@chunks << { action: :added, text: @joint }
|
415
|
+
end
|
416
|
+
end
|
417
|
+
end
|
404
418
|
end
|
405
419
|
|
406
420
|
class ExcludeeIterator
|
@@ -415,16 +429,14 @@ module Card::Diff
|
|
415
429
|
end
|
416
430
|
|
417
431
|
def next
|
418
|
-
if @index < @list.size
|
432
|
+
if @index < @list.size && @list[@index][:chunk_index] == @chunk_index
|
419
433
|
res = @list[@index]
|
420
434
|
@index += 1
|
421
|
-
@chunk_index +=1
|
435
|
+
@chunk_index += 1
|
422
436
|
res
|
423
437
|
end
|
424
438
|
end
|
425
439
|
end
|
426
|
-
|
427
440
|
end
|
428
441
|
end
|
429
442
|
end
|
430
|
-
|