rtml 1.2.2
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.
- data/History.txt +4 -0
- data/Manifest.txt +396 -0
- data/PostInstall.txt +2 -0
- data/README.rdoc +42 -0
- data/Rakefile +33 -0
- data/app_generators/rtml/USAGE +5 -0
- data/app_generators/rtml/rtml_generator.rb +78 -0
- data/app_generators/rtml/templates/rails_template.rb +36 -0
- data/app_generators/rtml/templates/rtml/MIT-LICENSE +20 -0
- data/app_generators/rtml/templates/rtml/README +109 -0
- data/app_generators/rtml/templates/rtml/Rakefile +38 -0
- data/app_generators/rtml/templates/rtml/app/controllers/beryl_controller.rb +70 -0
- data/app_generators/rtml/templates/rtml/app/controllers/rtml/magcard_demo_controller.rb +9 -0
- data/app_generators/rtml/templates/rtml/app/controllers/rtml/oe/btmlpa_controller.rb +158 -0
- data/app_generators/rtml/templates/rtml/app/controllers/rtml/rtml_app_controller.rb +252 -0
- data/app_generators/rtml/templates/rtml/app/controllers/rtml/tml_app_controller.rb +418 -0
- data/app_generators/rtml/templates/rtml/app/helpers/beryl_helper.rb +72 -0
- data/app_generators/rtml/templates/rtml/app/helpers/beryl_tml_helpers/auth_result.rb +56 -0
- data/app_generators/rtml/templates/rtml/app/helpers/beryl_tml_helpers/common.rb +19 -0
- data/app_generators/rtml/templates/rtml/app/helpers/beryl_tml_helpers/index.rb +82 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/magcard_demo_helper.rb +2 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/magcard_demo_tml_helpers/authorized.rb +10 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/magcard_demo_tml_helpers/common.rb +20 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/magcard_demo_tml_helpers/index.rb +33 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/oe/btmlpa_helper.rb +2 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/oe/btmlpa_tml_helpers/auth_result.rb +23 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/oe/btmlpa_tml_helpers/common.rb +23 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/oe/btmlpa_tml_helpers/dynamic.rb +11 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/oe/btmlpa_tml_helpers/icc.rb +384 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/oe/btmlpa_tml_helpers/index.rb +191 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/oe/btmlpa_tml_helpers/receipt.rb +152 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/rtml_app_helper.rb +74 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/rtml_app_tml_helpers/common.rb +9 -0
- data/app_generators/rtml/templates/rtml/app/helpers/rtml/tml_app_helper.rb +43 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/card.rb +83 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/card_avs.rb +14 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/card_cvv.rb +14 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/card_parser.rb +21 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/card_pin.rb +18 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/emv_card_data.rb +25 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/mag_card_data.rb +21 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/reference_code.rb +26 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/state.rb +12 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/terminal.rb +8 -0
- data/app_generators/rtml/templates/rtml/app/models/rtml/transaction.rb +68 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/auth_result/another_rcpt.rtml.erb +15 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/auth_result/receipt.rtml.erb +108 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/auth_result/receipt_single_column.rtml.erb +106 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/index/about.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/index/admin.rtml.erb +4 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/index/construction.rtml.erb +10 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/index/idle.rtml.erb +13 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/index/main_menu.rtml.erb +12 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/index/menu_credit.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/app/views/beryl/index/menu_debit.rtml.erb +3 -0
- data/app_generators/rtml/templates/rtml/app/views/layouts/rtml/beryl_color.rtml.erb +24 -0
- data/app_generators/rtml/templates/rtml/app/views/layouts/rtml/beryl_mono.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/app/views/layouts/rtml/magcard_demo_color.rtml.erb +24 -0
- data/app_generators/rtml/templates/rtml/app/views/layouts/rtml/magcard_demo_mono.rtml.erb +3 -0
- data/app_generators/rtml/templates/rtml/app/views/layouts/rtml/oe/btmlpa_i5100.rtml.erb +3 -0
- data/app_generators/rtml/templates/rtml/app/views/layouts/rtml/oe/btmlpa_i8550.rtml.erb +17 -0
- data/app_generators/rtml/templates/rtml/app/views/layouts/rtml/uml.html.erb +11 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/magcard_demo/authorized.html.erb +15 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/magcard_demo/authorized/main.rtml.erb +5 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/magcard_demo/index.html.erb +15 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/magcard_demo/index/_error.rtml.erb +2 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/magcard_demo/index/enter_amount.rtml.erb +5 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/magcard_demo/index/main.rtml.erb +4 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/dynamic/response.rtml.erb +2 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/icc.rtml.erb +760 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_enter_amount.rtml.erb +4 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_about.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_duplicate.rtml.erb +9 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_examples.rtml.erb +9 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_logo.rtml.erb +11 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_other.rtml.erb +20 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_refund.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_reversal.rtml.erb +9 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_sale.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/_menu_sale_cashback.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/about.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/assert.rtml.erb +2 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/card_nmb.rtml.erb +19 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/compl_txn.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/confirm_rev.rtml.erb +3 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/duplicate_na.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/error_scr.rtml.erb +4 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/main_menu.rtml.bak +31 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/main_menu.rtml.erb +40 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/print_pf.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/rd_sale_disp.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/read_refund.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/read_scb.rtml.erb +10 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/reject_trans.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/remove_card.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/rev_bad.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/scb_check_f.rtml.erb +2 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/sign_check.rtml.erb +3 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/subm_err.rtml.erb +2 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/to_man_entry.rtml.erb +2 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/trans_abrt.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/index/void_trans.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/receipt/_receipt.rtml.erb +29 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/oe/btmlpa/receipt/error_paper.rtml.erb +3 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/rtml_app/_default_development.html.erb +167 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/rtml_app/_default_header.html.erb +12 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/rtml_app/_default_production.html.erb +8 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/rtml_app/charts.html.erb +14 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/tml_app/do_tml_redirect.rtml.erb +7 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/tml_app/get_terminal_info.rtml.erb +26 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/tml_app/rescue_action_in_public.rtml.erb +9 -0
- data/app_generators/rtml/templates/rtml/app/views/rtml/tml_app/rescue_action_locally.rtml.erb +42 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/common.rb +303 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/force.rb +46 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/return.rb +22 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/sale.rb +49 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/_confirmation.rtml.erb +10 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/_receipt_agreement.rtml.erb +3 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/_receipt_footer.rtml.erb +2 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/_receipt_header.rtml.erb +4 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/ask_cashback.rtml.erb +11 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/card_imprint.rtml.erb +7 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/check_cb.rtml.erb +11 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/conf_debit.rtml.erb +5 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/confirm_sale.rtml.erb +4 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/confrm_force.rtml.erb +4 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/cvv_skipped.rtml.erb +10 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/disp_avs.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/do_avs_zip.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/enter_amount.rtml.erb +12 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/enter_card.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/enter_cashbk.rtml.erb +10 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/enter_cvv2.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/enter_expiry.rtml.erb +9 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/fraud_check1.rtml.erb +6 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/fraud_check2.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/frc_aprvl.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/frc_avs_zip.rtml.erb +8 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/frc_bad_aprv.rtml.erb +5 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/frd_chk_fail.rtml.erb +5 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/invalid_exp.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/no_entr_crd.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/remove_card.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/swipe_card.rtml.erb +7 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/trans_abort.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/trans_reject.rtml.erb +1 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/views/void_ref.rtml.erb +10 -0
- data/app_generators/rtml/templates/rtml/components/rtml/features/void.rb +30 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/card_parser_widget.rb +90 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/display_widget.rb +66 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/element_builder_widget.rb +123 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/emv_support_widget.rb +365 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/form_submit_widget.rb +65 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/get_transaction_variables_widget.rb +33 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/get_variable_widget.rb +39 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/receipt_widget.rb +66 -0
- data/app_generators/rtml/templates/rtml/components/rtml/widgets/screen_builder_widget.rb +49 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090825132217_create_rtml_states.rb +15 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090825132401_create_rtml_terminals.rb +16 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090825132530_create_rtml_transactions.rb +24 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090825134118_create_rtml_cards.rb +23 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090825134622_create_rtml_emv_card_data.rb +20 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090825134629_create_rtml_mag_card_data.rb +17 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090825135838_create_rtml_card_parsers.rb +19 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090826103509_create_reference_codes.rb +14 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090915030044_add_batch_to_rtml_transactions.rb +10 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090915031155_add_additional_data_to_rtml_transactions.rb +10 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20090915031156_add_hidden_data_to_rtml_transactions.rb +10 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20091016133313_create_rtml_card_avs.rb +16 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20091016135800_create_rtml_card_cvvs.rb +16 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20091016135810_create_rtml_card_pins.rb +16 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20091016135820_reverse_card_transaction_relationship.rb +11 -0
- data/app_generators/rtml/templates/rtml/db/migrate/20100127115105_convert_rtml_migrations_to_rails_migrations.rb +31 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/USAGE +25 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/rtml_controller_generator.rb +49 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/common_tml_helper.rb +20 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/controller.rb +3 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/css_color.css +37 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/css_mono.css +12 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/functional_test.rb +11 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/helper.rb +2 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/layout_color.rtml.erb +24 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/layout_mono.rtml.erb +3 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/tml_helper.rb +16 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/view.html.erb +15 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_controller/templates/view.rtml.erb +2 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_document/USAGE +8 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_document/rtml_document_generator.rb +45 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_document/templates/controller.rb +7 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_document/templates/functional_test.rb +10 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_document/templates/helper.rb +2 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_document/templates/view.rtml.erb +11 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_widget/USAGE +8 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_widget/rtml_widget_generator.rb +66 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_widget/templates/basic_widget.rb +57 -0
- data/app_generators/rtml/templates/rtml/generators/rtml_widget/templates/basic_widget_no_help.rb +27 -0
- data/app_generators/rtml/templates/rtml/init.rb +40 -0
- data/app_generators/rtml/templates/rtml/install.rb +18 -0
- data/app_generators/rtml/templates/rtml/lib/environment.rb +61 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/action_controller/request.rb +9 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/action_controller/routing/route_set.rb +34 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/action_view/base.rb +74 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/action_view/partial_template.rb +24 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/active_record.rb +13 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/active_support/dependencies.rb +25 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/array.rb +15 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/attr_boolean.rb +10 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/hash.rb +28 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/nil_class.rb +20 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/rake.rb +19 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/regexp.rb +16 -0
- data/app_generators/rtml/templates/rtml/lib/extensions/string.rb +37 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins.rb +23 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/MIT-LICENSE +20 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/README +36 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/Rakefile +44 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/init.rb +25 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/lib/action_controller/filters/before_render_filter.rb +30 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/lib/before_render.rb +43 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/lib/before_render_instance.rb +45 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/lib/filter_chain_has_many_types_of_filters.rb +87 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/lib/filter_has_before_render.rb +26 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/tasks/before_render_tasks.rake +25 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/test/before_render_test.rb +29 -0
- data/app_generators/rtml/templates/rtml/lib/other_plugins/before_render/test/test_helper.rb +24 -0
- data/app_generators/rtml/templates/rtml/lib/rtml.rb +77 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/beryl/constants.rb +12 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/beryl/version.rb +11 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/common/renderable.rb +13 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/include.rb +30 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/layout.rb +59 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/next.rb +188 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/screen.rb +91 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/screen/iterators.rb +63 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/screen/next_screen_methods.rb +70 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/screen/variable_methods.rb +73 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/support/importer.rb +55 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/tml_document.rb +318 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/tml_document/screen_methods.rb +79 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/tml_document/variable_methods.rb +83 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/core/variable.rb +123 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/debug/browser_emulator.rb +59 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/debug/rtml_controller_test_case.rb +7 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/debug/rtml_core_unit_test.rb +11 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/debug/unit_test.rb +3 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/delegation.rb +8 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/doc.rb +12 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/element.rb +75 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/errors/widget_accessor_failure.rb +9 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/events/event_handler.rb +79 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/events/event_processor.rb +106 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/events/processors.rb +10 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/events/processors/defaults_processor.rb +18 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/events/processors/key_processor.rb +21 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/feature.rb +32 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/feature_config.rb +195 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/features.rb +18 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/features/array_of_feature_instances.rb +17 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/features/controller_class_methods.rb +30 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/features/controller_instance_methods.rb +35 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers.rb +21 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/controller_helpers.rb +59 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/controller_helpers/menu_helpers.rb +193 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/core_helpers/action_view_wrapper.rb +23 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/core_helpers/event_helpers.rb +28 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/core_helpers/layout_helpers.rb +47 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/core_helpers/widget_support.rb +181 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/core_helpers/widget_support/class_methods.rb +28 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/core_helpers/yield_helpers.rb +33 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/proxy_helpers/feature_helpers.rb +17 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/render_helper.rb +71 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/terminal_helpers.rb +21 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/test_helpers.rb +6 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/test_helpers/tml_validation_assertions.rb +10 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/test_helpers/variable_assertions.rb +27 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/view_helpers/form_helpers.rb +70 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/helpers/view_helpers/rtml_form_builder.rb +174 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/oe/btmlpa_constants.rb +48 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/proxying/method_missing_methods.rb +14 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/proxying/rtml_interface.rb +33 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/proxying/sandbox.rb +18 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/text_utils.rb +51 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/tml_param_parser.rb +95 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/validation/dom_rule_parser.rb +61 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/validation/dom_tag.rb +52 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/validation/predefined_variable_rule_parser.rb +97 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/validation/tml_validator.rb +16 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/version.rb +11 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/widgets/property.rb +11 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/widgets/property_accessors.rb +59 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/widgets/widget.rb +251 -0
- data/app_generators/rtml/templates/rtml/lib/rtml/widgets/widget_class_methods.rb +213 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/dot.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_can.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_cand.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_en.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_end.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_i.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_icd.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_icl.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_icr.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_ics.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_icsw.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_icv.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_int.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_int2.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_men.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_mend.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_next.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_no.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_nod.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_ok.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_okd.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_pic1.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_pic2.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_pic3.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_pic4.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_top.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_txn.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_yes.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/btmlpa/nbg_yesd.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/btmlpa.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/can_dn.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/can_up.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/conf.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/iccemv.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/images.lib +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/magcard.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/no_dn.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/no_up.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/ok_dn.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/ok_up.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/top.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/yes_dn.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/images/rtml/oe/examples/yes_up.gif +0 -0
- data/app_generators/rtml/templates/rtml/public/stylesheets/rtml/beryl_color.css +37 -0
- data/app_generators/rtml/templates/rtml/public/stylesheets/rtml/beryl_mono.css +17 -0
- data/app_generators/rtml/templates/rtml/public/stylesheets/rtml/charts.css +0 -0
- data/app_generators/rtml/templates/rtml/public/stylesheets/rtml/oe/btmlpa/i5100.css +12 -0
- data/app_generators/rtml/templates/rtml/public/stylesheets/rtml/oe/btmlpa/i8550.css +37 -0
- data/app_generators/rtml/templates/rtml/public/stylesheets/rtml/oe/btmlpa/receipt.css +4 -0
- data/app_generators/rtml/templates/rtml/public/stylesheets/rtml/oe/examples/i5100.css +12 -0
- data/app_generators/rtml/templates/rtml/public/stylesheets/rtml/oe/examples/i8550.css +37 -0
- data/app_generators/rtml/templates/rtml/reporting/110409 +227 -0
- data/app_generators/rtml/templates/rtml/reporting/linecount.rb +42 -0
- data/app_generators/rtml/templates/rtml/rules/predefined_tml_variables.rb +63 -0
- data/app_generators/rtml/templates/rtml/rules/tml_document_structure.rb +84 -0
- data/app_generators/rtml/templates/rtml/rules/varns/audio.rb +30 -0
- data/app_generators/rtml/templates/rtml/rules/varns/card.rb +17 -0
- data/app_generators/rtml/templates/rtml/rules/varns/card/emv.rb +31 -0
- data/app_generators/rtml/templates/rtml/rules/varns/card/mag.rb +8 -0
- data/app_generators/rtml/templates/rtml/rules/varns/card/parser.rb +7 -0
- data/app_generators/rtml/templates/rtml/rules/varns/card/pin.rb +6 -0
- data/app_generators/rtml/templates/rtml/rules/varns/cfgm.rb +15 -0
- data/app_generators/rtml/templates/rtml/rules/varns/com.rb +9 -0
- data/app_generators/rtml/templates/rtml/rules/varns/err.rb +14 -0
- data/app_generators/rtml/templates/rtml/rules/varns/gma/event.rb +13 -0
- data/app_generators/rtml/templates/rtml/rules/varns/gprs.rb +8 -0
- data/app_generators/rtml/templates/rtml/rules/varns/imager.rb +8 -0
- data/app_generators/rtml/templates/rtml/rules/varns/ip.rb +15 -0
- data/app_generators/rtml/templates/rtml/rules/varns/oebr.rb +42 -0
- data/app_generators/rtml/templates/rtml/rules/varns/oebr/3rdparty.rb +7 -0
- data/app_generators/rtml/templates/rtml/rules/varns/oebr/backlight.rb +4 -0
- data/app_generators/rtml/templates/rtml/rules/varns/oebr/cache.rb +1 -0
- data/app_generators/rtml/templates/rtml/rules/varns/oebr/connect.rb +5 -0
- data/app_generators/rtml/templates/rtml/rules/varns/oebr/connection.rb +5 -0
- data/app_generators/rtml/templates/rtml/rules/varns/oebr/offline.rb +5 -0
- data/app_generators/rtml/templates/rtml/rules/varns/oegw.rb +12 -0
- data/app_generators/rtml/templates/rtml/rules/varns/payment.rb +21 -0
- data/app_generators/rtml/templates/rtml/rules/varns/ppp.rb +11 -0
- data/app_generators/rtml/templates/rtml/rules/varns/terminal.rb +29 -0
- data/app_generators/rtml/templates/rtml/tasks/rtml_tasks.rake +78 -0
- data/app_generators/rtml/templates/rtml/template.rb +64 -0
- data/app_generators/rtml/templates/rtml/test/core/element_test.rb +17 -0
- data/app_generators/rtml/templates/rtml/test/core/screen_test.rb +91 -0
- data/app_generators/rtml/templates/rtml/test/core/tml_document_test.rb +53 -0
- data/app_generators/rtml/templates/rtml/test/functional/beryl_controller_test.rb +13 -0
- data/app_generators/rtml/templates/rtml/test/functional/btmlpa_controller_test.rb +13 -0
- data/app_generators/rtml/templates/rtml/test/functional/magcard_demo_controller_test.rb +20 -0
- data/app_generators/rtml/templates/rtml/test/functional/rtml_app_controller_test.rb +9 -0
- data/app_generators/rtml/templates/rtml/test/functional/rtml_routing_test.rb +19 -0
- data/app_generators/rtml/templates/rtml/test/functional/tml_controller_params_test.rb +20 -0
- data/app_generators/rtml/templates/rtml/test/rtml_test_helper.rb +44 -0
- data/app_generators/rtml/templates/rtml/test/validation/predefined_variable_rule_parser_test.rb +11 -0
- data/app_generators/rtml/templates/rtml/uninstall.rb +1 -0
- data/app_generators/rtml/templates/rtml/update.rb +57 -0
- data/bin/rtml +36 -0
- data/lib/rtml.rb +4 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/tasks/reglob.rake +28 -0
- data/test/test_generator_helper.rb +29 -0
- data/test/test_helper.rb +3 -0
- data/test/test_rtml.rb +11 -0
- data/test/test_rtml_generator.rb +43 -0
- metadata +516 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
module Rtml
|
|
2
|
+
module Core
|
|
3
|
+
# Constructs a new TML Screen to be added to a document.
|
|
4
|
+
class Screen < Element
|
|
5
|
+
attr_accessor :id
|
|
6
|
+
include Rtml::Helpers::CoreHelpers::LayoutHelpers
|
|
7
|
+
include Rtml::Core::Screen::Iterators
|
|
8
|
+
include Rtml::Core::Screen::VariableMethods
|
|
9
|
+
include Rtml::Core::Screen::NextScreenMethods
|
|
10
|
+
|
|
11
|
+
# Initializes a new Screen object. An exception is raised if the given ID is longer than 12 characters.
|
|
12
|
+
def initialize(view = nil, id = nil, parent = nil, &blk)
|
|
13
|
+
raise "ID '#{id}' is too long by #{(id.to_s.length - 12)} characters" if id.to_s.length > 12
|
|
14
|
+
@id = id
|
|
15
|
+
super(view,id,nil,parent)
|
|
16
|
+
@css_class = nil
|
|
17
|
+
@content = nil
|
|
18
|
+
@on_cancel = nil
|
|
19
|
+
@on_menu = nil
|
|
20
|
+
@setvars = [ ]
|
|
21
|
+
@timeout = -1
|
|
22
|
+
@next = Core::Next.new
|
|
23
|
+
layout parent.layout if parent
|
|
24
|
+
protect_all_instance_variables!
|
|
25
|
+
|
|
26
|
+
assert
|
|
27
|
+
yield_with_optional_param self, &blk if block_given?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Gets or sets the CSS class to use for this Screen
|
|
31
|
+
def css_class(*a)
|
|
32
|
+
with_first_argument(*a) { |arg| @css_class = arg }
|
|
33
|
+
@css_class
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# If the specified conditions are true, sends the user to the target screen.
|
|
37
|
+
# If all assertions for this screen fail, an assertion error will be raised.
|
|
38
|
+
# If no target is given, or no conditions are given, the assertion will always fail.
|
|
39
|
+
def assert(target = nil, *conditions)
|
|
40
|
+
unless document.screens.screen_defined?(:assert) or self.id == :assert
|
|
41
|
+
document.screen :assert, :next => ((document.default_screen.blank?) ? url_for(:action => params[:action]) :
|
|
42
|
+
document.default_screen) do |scr|
|
|
43
|
+
scr.display <<-end_tml
|
|
44
|
+
<h1>Assertion Failure</h1>
|
|
45
|
+
on screen "<getvar name='oebr.prev_screen' />"<br/>
|
|
46
|
+
(Did you define a #next_screen?)
|
|
47
|
+
end_tml
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
next_screen((conditions.empty?) ? (target || :assert) : :assert)
|
|
52
|
+
next_screen target, *conditions unless target.nil? or conditions.length == 0
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Sets the timeout length, in seconds, before the user is forwarded to the Next screen.
|
|
56
|
+
# If set to -1, there is no timeout.
|
|
57
|
+
# If there are any links on the current screen, this will have no effect.
|
|
58
|
+
def timeout(*a)
|
|
59
|
+
with_first_argument(*a) { |arg| @timeout = arg }
|
|
60
|
+
@timeout
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Defines what screen to go to next if the user presses the "cancel" button on the terminal.
|
|
64
|
+
# If no parameter is specified, no change is made and the current value is returned.
|
|
65
|
+
def on_cancel(*a); on :cancel => a[0]; end
|
|
66
|
+
|
|
67
|
+
# Defines what screen to go to next if the user presses the "menu" button on the terminal.
|
|
68
|
+
# If no parameter is specified, no change is made and the current value is returned.
|
|
69
|
+
def on_menu(*a); on :menu => a[0]; end
|
|
70
|
+
|
|
71
|
+
# Constructs the TML representation of this Screen object.
|
|
72
|
+
def to_tml
|
|
73
|
+
rtml = render_widget_tml
|
|
74
|
+
|
|
75
|
+
c = properties.to_s
|
|
76
|
+
c.concat " timeout='#{@timeout}'" unless @timeout == -1
|
|
77
|
+
c.concat " class='#{@css_class}'" unless @css_class.blank?
|
|
78
|
+
|
|
79
|
+
nxt = @next.to_tml
|
|
80
|
+
nxt += "\n" unless nxt.blank?
|
|
81
|
+
svars = @setvars.join("\n")
|
|
82
|
+
svars += "\n" unless svars.blank?
|
|
83
|
+
content = svars + nxt + rtml
|
|
84
|
+
|
|
85
|
+
"<screen id='#{@id}'#{c}>\n" +
|
|
86
|
+
content.strip.indent + "\n" +
|
|
87
|
+
"</screen>"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Rtml::Core::Screen::Iterators
|
|
2
|
+
def each_hyperlink
|
|
3
|
+
# process hyperlinks
|
|
4
|
+
base = controller.url_for(:anchor => "", :only_path => true)
|
|
5
|
+
unless widgets.select { |c| c.kind_of? Rtml::Widgets::DisplayWidget }.empty?
|
|
6
|
+
rx = /href=["']([^"']*)['"]/
|
|
7
|
+
rx.each_match(self.to_tml) do |match|
|
|
8
|
+
# determine whether it's a screen name or an external link
|
|
9
|
+
s = document.screens.find(match[1])
|
|
10
|
+
y = (s ? s.id : match[1])
|
|
11
|
+
yield y
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Iterates through and yields each conditional variant associated with this screen.
|
|
17
|
+
# This does not include hyperlinks or event listeners.
|
|
18
|
+
def each_condition(&block)
|
|
19
|
+
self.next.each &block
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Returns a hash of every possible variant. Each value is the condition under which
|
|
23
|
+
# that path can be chosen, and its key is the ID or URL of the destination.
|
|
24
|
+
#
|
|
25
|
+
# If a block is given, it is passed each condition and destination before returning.
|
|
26
|
+
#
|
|
27
|
+
# There are two special keys, :hyperlink and :default, representing a destination that
|
|
28
|
+
# must be manually selected by the user and the default destination (if no other conditions
|
|
29
|
+
# are met), respectively. These are both Symbols. Any other key will be a String, so it
|
|
30
|
+
# is trivial to check these:
|
|
31
|
+
#
|
|
32
|
+
# @screen.every_possible_variant do |condition, destination|
|
|
33
|
+
# case condition
|
|
34
|
+
# when :hyperlink
|
|
35
|
+
# puts "found hyperlink: #{destination}"
|
|
36
|
+
# when :default
|
|
37
|
+
# puts "found default destination: #{destination}"
|
|
38
|
+
# else
|
|
39
|
+
# puts "When #{condition}, goto #{destination}"
|
|
40
|
+
# end
|
|
41
|
+
# end
|
|
42
|
+
#
|
|
43
|
+
def every_possible_variant
|
|
44
|
+
ret = ActiveSupport::OrderedHash.new
|
|
45
|
+
each_hyperlink do |href|
|
|
46
|
+
ret[href] = :hyperlink
|
|
47
|
+
yield :hyperlink, href if block_given?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
@next.each do |condition, dest|
|
|
51
|
+
if condition.blank?
|
|
52
|
+
ret[dest] = :default
|
|
53
|
+
else
|
|
54
|
+
ret[dest] = condition
|
|
55
|
+
end
|
|
56
|
+
yield ret[dest], dest if block_given?
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
ret
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
alias each_possible_variant every_possible_variant
|
|
63
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module Rtml::Core::Screen::NextScreenMethods
|
|
2
|
+
# Specifies the next screen for the user to visit. The options can specify conditions
|
|
3
|
+
# under which the screen will be visited. If next_screen is called twice with exactly
|
|
4
|
+
# the same options (or options that equate to the same value), an exception will be raised.
|
|
5
|
+
# Examples:
|
|
6
|
+
# screen.next_screen :address # Will go to :address if all other conditions fail
|
|
7
|
+
# screen.next_screen :zip, :if => "tmlvar:address != ''" # Will go to :zip if the address variable is not blank
|
|
8
|
+
# screen.next_screen :phone, :unless => "tmlvar:phone_required == 1" #Will go to :phone if phone_required != 1
|
|
9
|
+
# screen.next_screen :name, :key => :f1 # Will go to :name if the user presses F1
|
|
10
|
+
#
|
|
11
|
+
# The :if and :unless conditions can be specified as Strings, as in the example above,
|
|
12
|
+
# or as Arrays of Strings (["tmlvar:address", "!=", ""]). In either case, they must
|
|
13
|
+
# equate to three parameters -- a left operand, an operator, and a right operand.
|
|
14
|
+
#
|
|
15
|
+
# There is an alias for next_screen, "next", which can be used instead. However,
|
|
16
|
+
# "next" is also a Ruby keyword, so it may not be available depending on your context.
|
|
17
|
+
# (The "screen.next" format should be allowed, but simply calling "next" will result in an error.)
|
|
18
|
+
#
|
|
19
|
+
def next_screen(*args)#scrid, options = {})
|
|
20
|
+
if args.length > 0
|
|
21
|
+
scrid = args[0]
|
|
22
|
+
options = args[1] || {}
|
|
23
|
+
if scrid.kind_of? Hash
|
|
24
|
+
if options.empty?
|
|
25
|
+
options[:if] = scrid.delete :if
|
|
26
|
+
options[:unless] = scrid.delete :unless
|
|
27
|
+
options[:key] = scrid.delete :key
|
|
28
|
+
end
|
|
29
|
+
scrid = url_for scrid
|
|
30
|
+
end
|
|
31
|
+
@next.variant(scrid, options)
|
|
32
|
+
else
|
|
33
|
+
@next.for_variant({})
|
|
34
|
+
end
|
|
35
|
+
@next
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
alias next next_screen
|
|
39
|
+
alias goto next_screen
|
|
40
|
+
|
|
41
|
+
# Constructs a set of variants (conditional next_screen calls)
|
|
42
|
+
# Takes a hash of conditions => screen_names.
|
|
43
|
+
# For example:
|
|
44
|
+
#
|
|
45
|
+
# variants "tmlvar:scrid == 1" => :scr1,
|
|
46
|
+
# "tmlvar:scrid == 2" => :scr2
|
|
47
|
+
#
|
|
48
|
+
# Produces the same output as:
|
|
49
|
+
#
|
|
50
|
+
# next_screen :scr1, :if => "tmlvar:scrid == 1"
|
|
51
|
+
# next_screen :scr2, :if => "tmlvar:scrid == 2"
|
|
52
|
+
#
|
|
53
|
+
# You can also specify an Array for the conditions, in order
|
|
54
|
+
# to point more than one condition to the same screen.
|
|
55
|
+
def variants(hash)
|
|
56
|
+
hash.each do |cond,scr|
|
|
57
|
+
cond = [ cond ] unless cond.respond_to? :each
|
|
58
|
+
cond.each do |c|
|
|
59
|
+
next_screen scr, :if => c
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def variants_for(scrid, hash)
|
|
65
|
+
next_screen scrid
|
|
66
|
+
variants hash
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
alias variant_for variants_for
|
|
70
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module Rtml::Core::Screen::VariableMethods
|
|
2
|
+
# Returns an array of strings, containing the name of each variable used in this document
|
|
3
|
+
def variables_used
|
|
4
|
+
tml = self.to_tml
|
|
5
|
+
r = []
|
|
6
|
+
/setvar name=['"]([^'"]+)['"]/.each_match(tml) { |match| r << find_or_register_variable(match[1]).name }
|
|
7
|
+
/getvar name=['"]([^'"]+)['"]/.each_match(tml) { |match| r << find_or_register_variable(match[1]).name }
|
|
8
|
+
/input[^<>]*name=['"]([^'"]+)['"]/.each_match(tml) { |match| r << find_or_register_variable(match[1]).name }
|
|
9
|
+
/[lr]o=['"]tmlvar:([^'"]+)['"]/.each_match(tml) { |match| r << find_or_register_variable(match[1]).name }
|
|
10
|
+
r
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Returns true if the specified variable or variable name has been used by this screen.
|
|
14
|
+
def uses_variable?(var_or_name)
|
|
15
|
+
var = var_or_name
|
|
16
|
+
var = document.variables.find_by_name(var) if var.kind_of? Symbol or var.kind_of? String
|
|
17
|
+
tml = self.to_tml
|
|
18
|
+
|
|
19
|
+
return true if tml =~ /name=['"]#{Regexp::escape var.name}['"]/ or
|
|
20
|
+
tml =~ /input[^<>]*name=['"]([^'"]+)['"]/ or
|
|
21
|
+
tml =~ /[lr]o=['"]tmlvar:#{Regexp::escape var.name}['"]/
|
|
22
|
+
false
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Sets the specified variable to a given value. The value can be a single parameter,
|
|
26
|
+
# or can be a three-part assignment in the form of an Array, Hash or String.
|
|
27
|
+
# Examples:
|
|
28
|
+
# screen.set :i, [ "tmlvar:i", "+", "1" ]
|
|
29
|
+
# screen.set :i, "tmlvar:i"
|
|
30
|
+
# screen.set :i, :true
|
|
31
|
+
# screen.set :i, "tmlvar:i + 1"
|
|
32
|
+
# screen.set :i, :to => [ "tmlvar:i", "+", "1" ]
|
|
33
|
+
# screen.set :i, :to => "tmlvar:i + 1"
|
|
34
|
+
# screen.set :i, :to => true
|
|
35
|
+
# screen.set :i, :value => [ "tmlvar:i", "+", "1" ]
|
|
36
|
+
# screen.set :i, :value => "tmlvar:i + 1"
|
|
37
|
+
# screen.set :i, :value => "tmlvar:i"
|
|
38
|
+
# screen.set :name, 'Joe'
|
|
39
|
+
# screen.set :name, :to => "Joe"
|
|
40
|
+
# screen.set :name, :value => "Joe"
|
|
41
|
+
#
|
|
42
|
+
# screen.set :name => "Joe"
|
|
43
|
+
# screen.set :i => "tmlvar:i + 1"
|
|
44
|
+
# screen.set :i => [ "tmlvar:i", "+", "1" ]
|
|
45
|
+
#
|
|
46
|
+
# set_variable is an alias for the this method.
|
|
47
|
+
def set(*args)#varn, ops)
|
|
48
|
+
if args.length == 2
|
|
49
|
+
varn, ops = args
|
|
50
|
+
varn.each { |v| set v, ops } and return if varn.kind_of? Array
|
|
51
|
+
#varn = qualified_variable_name varn
|
|
52
|
+
var = find_or_register_variable(varn)
|
|
53
|
+
@setvars << var.setvar(ops)
|
|
54
|
+
else
|
|
55
|
+
args[0].each do |key,value|
|
|
56
|
+
set(key, value)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
alias set_variable set
|
|
61
|
+
|
|
62
|
+
# Finds and returns the specified variable or variable name, registering it for use with the
|
|
63
|
+
# document if it is not found and creating it if it is not a Variable object.
|
|
64
|
+
def find_or_register_variable(var_or_name)
|
|
65
|
+
var_or_name = var_or_name.name if var_or_name.kind_of? Rtml::Core::Variable
|
|
66
|
+
var = document.variables.find_by_name(var_or_name)
|
|
67
|
+
if var.nil?
|
|
68
|
+
var = Rtml::Core::Variable.new(nil, { :name => var_or_name }, self)
|
|
69
|
+
document.register_variable var
|
|
70
|
+
end
|
|
71
|
+
var
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
class Rtml::Core::Support::Importer
|
|
2
|
+
# Looks up the specified path, converts it into an instance of ActionController::Base,
|
|
3
|
+
# and executes the action in the ActionController instance against the specified TML
|
|
4
|
+
# document. The net result is to "import" the action into this TML document.
|
|
5
|
+
def initialize(tml_document, path)
|
|
6
|
+
route = ActionController::Routing::Routes.recognize_path(path)
|
|
7
|
+
root = ((defined? RAILS_ROOT) ? RAILS_ROOT : File.join(File.dirname(__FILE__), '../../../../../../..'))
|
|
8
|
+
helpers_path = File.join(root, "app", "helpers", "#{route[:controller]}_tml_helpers")
|
|
9
|
+
helpers = [ 'common', route[:action] ]
|
|
10
|
+
|
|
11
|
+
for helper in helpers
|
|
12
|
+
path = File.join helpers_path, helper
|
|
13
|
+
tml_document.controller.class.tml_helper path
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
tml_document.controller.send :add_instance_view_paths, route[:action]
|
|
17
|
+
tml_document.controller.rtml_interface.fire_action route[:action], tml_document.controller
|
|
18
|
+
|
|
19
|
+
=begin
|
|
20
|
+
env = tml_document.controller.request.env.dup
|
|
21
|
+
%W(rack. action_controller.).each do |i|
|
|
22
|
+
env.keys.each do |key|
|
|
23
|
+
env.delete key if key =~ /#{Regexp.escape i}/
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
env['PATH_INFO'] = env['REQUEST_URI'] = env['REQUEST_PATH'] = path
|
|
27
|
+
request = ActionController::Request.new(env)
|
|
28
|
+
controller_class = "#{route[:controller].camelize}Controller".constantize.new
|
|
29
|
+
controller_class.process(request, ActionController::Response.new)
|
|
30
|
+
=end
|
|
31
|
+
#ActionController::Dispatcher.new.call(env)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
#raise env.inspect.to_yaml
|
|
37
|
+
|
|
38
|
+
#raise tml_document.controller.request.env.inspect
|
|
39
|
+
#request = Rack::Request.new(env)
|
|
40
|
+
#ActionController::Routing::Routes.call(env)
|
|
41
|
+
#app = ActionController::Routing::Routes.recognize(request)
|
|
42
|
+
#app.call(env).to_a
|
|
43
|
+
|
|
44
|
+
# controller_class = "#{route[:controller].camelize}Controller".constantize.new
|
|
45
|
+
#ctrlr.send(:tml_document=, self)
|
|
46
|
+
|
|
47
|
+
#session = ActionController::Integration::Session.new
|
|
48
|
+
#session.get(path)
|
|
49
|
+
#session.controller
|
|
50
|
+
|
|
51
|
+
#action = route[:action]
|
|
52
|
+
#template = controller.send :default_template_name, action, format, ctrlr
|
|
53
|
+
#render options.merge(:file => template)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
module Rtml
|
|
2
|
+
module Core
|
|
3
|
+
# TMLDocument is the root of all RTML generation.
|
|
4
|
+
# It is called with an ActionView as a parameter, but this parameter is supplied
|
|
5
|
+
# via the Rtml::tml_document helper. So instead of embedding TMLDocument.new(. . .) { . . . }
|
|
6
|
+
# into your application's view, you simply call tml_document { |doc| . . . }
|
|
7
|
+
# See the README for a complete usage example.
|
|
8
|
+
class TMLDocument < Element
|
|
9
|
+
include Rtml::Core::TMLDocument::VariableMethods
|
|
10
|
+
include Rtml::Core::TMLDocument::ScreenMethods
|
|
11
|
+
include Rtml::Helpers::CoreHelpers::LayoutHelpers
|
|
12
|
+
|
|
13
|
+
alias variable_declarations vardecs
|
|
14
|
+
|
|
15
|
+
# Initializes a new TML document with the given ActionView.
|
|
16
|
+
# Requires a block which configures the document and adds content.
|
|
17
|
+
def initialize(view = nil, &blk)
|
|
18
|
+
Rtml::Widgets::Widget.load_widgets
|
|
19
|
+
super(view)
|
|
20
|
+
|
|
21
|
+
reset!
|
|
22
|
+
|
|
23
|
+
def @screens.screen_defined?(a)
|
|
24
|
+
return true unless self.find(a).nil?
|
|
25
|
+
false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def @screens.find(id)
|
|
29
|
+
# FIXME: False positives are possible here, because it doesn't match against the controller or action.
|
|
30
|
+
if id.kind_of? String
|
|
31
|
+
if id =~ /#/
|
|
32
|
+
self.each { |scr| return scr if scr.id.to_s == id[$~.offset(0)[1]..-1] }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
self.each { |scr| return scr if scr.id == id }
|
|
36
|
+
nil
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def @variables.find_by_name(name)
|
|
40
|
+
name = name.to_s if name.kind_of? Symbol
|
|
41
|
+
# name = document.qualified_variable_name name
|
|
42
|
+
self.each { |var| return var if var.name == name }
|
|
43
|
+
nil
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
protect_all_instance_variables!
|
|
47
|
+
process_block &blk if block_given?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Resets this document to an "unmodified" state. This will reverse ALL changes made to the document and
|
|
51
|
+
# cannot be undone!
|
|
52
|
+
def reset!
|
|
53
|
+
@tab_stop = 3
|
|
54
|
+
(@includes ||= []).clear
|
|
55
|
+
(@variables ||= []).clear
|
|
56
|
+
(@vardecs ||= []).clear
|
|
57
|
+
(@screens ||= []).clear
|
|
58
|
+
(@defaults ||= {}).clear
|
|
59
|
+
@layout = nil
|
|
60
|
+
@default_screen = nil
|
|
61
|
+
@cache = nil
|
|
62
|
+
@base = nil
|
|
63
|
+
widgets.clear
|
|
64
|
+
|
|
65
|
+
# order is important: creating the string "modifies" this document. Processing block is allowed to, though.
|
|
66
|
+
#self.string action_view.request_forgery_protection_token.to_s, :value => action_view.form_authenticity_token if action_view
|
|
67
|
+
@modified = false
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Sets the TML document to a "modified" state.
|
|
71
|
+
def modify!
|
|
72
|
+
@modified = true
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Returns true if the document has been modified.
|
|
76
|
+
def modified?
|
|
77
|
+
@modified
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Returns true if a screen with the specified ID is in this document.
|
|
81
|
+
def screen_defined?(a)
|
|
82
|
+
@screens.screen_defined? a
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Duplicates the screen with the first ID. The clone will be given the second ID.
|
|
86
|
+
def alias_screen(source, target)
|
|
87
|
+
scr = @screens.find(source).dup
|
|
88
|
+
scr.id = target
|
|
89
|
+
@screens << scr
|
|
90
|
+
scr
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Imports the specified TML document and applies everything in it to this document
|
|
94
|
+
# Valid options are:
|
|
95
|
+
# :super - imports the parent TML document (useful for only overriding a section of the parent document)
|
|
96
|
+
# [hash] - imports the TML document found at the path that the specified hash routes to when url_for is
|
|
97
|
+
# called
|
|
98
|
+
#
|
|
99
|
+
# Examples:
|
|
100
|
+
# <%=tml_document do
|
|
101
|
+
# import :super
|
|
102
|
+
# screen :main_menu, :next => :trans_abrt do
|
|
103
|
+
# display :partial => 'custom_menu_content'
|
|
104
|
+
# end
|
|
105
|
+
# end%>
|
|
106
|
+
#
|
|
107
|
+
# -or-
|
|
108
|
+
#
|
|
109
|
+
# <%=tml_document do
|
|
110
|
+
# import :controller => 'recipes', :action => 'list'
|
|
111
|
+
# . . .
|
|
112
|
+
# end%>
|
|
113
|
+
#
|
|
114
|
+
def import(p)
|
|
115
|
+
if p.kind_of? Hash then
|
|
116
|
+
# Hash could be render(options), or render(:file => url_for(options)) -- figure out which
|
|
117
|
+
# and act accordingly
|
|
118
|
+
options = { :locals => p.delete(:locals), :layout => p.delete(:layout) }
|
|
119
|
+
options.delete :locals if options[:locals].nil?
|
|
120
|
+
options.delete :layout if options[:layout].nil?
|
|
121
|
+
render_methods = ['file', 'partial', 'inline', 'text']
|
|
122
|
+
direct_render = (p.keys.select { |i| render_methods.include? i.to_s }).length > 0
|
|
123
|
+
if direct_render
|
|
124
|
+
render p.merge(options)
|
|
125
|
+
else
|
|
126
|
+
#format = controller.response.template.template_format
|
|
127
|
+
path = url_for(p.merge(:only_path => true))
|
|
128
|
+
Rtml::Core::Support::Importer.new(self, path)
|
|
129
|
+
end
|
|
130
|
+
else
|
|
131
|
+
case p
|
|
132
|
+
when :super then render :super
|
|
133
|
+
else raise "Import directive not recognized: #{p.inspect}"
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Generates the actual TML for this document. This is the root generation method
|
|
139
|
+
# to build all TML for this entire document, including the header, screens, submits,
|
|
140
|
+
# etc.
|
|
141
|
+
def to_tml
|
|
142
|
+
#TODO: We kind of need a before_render type of hook so that this sort of thing can be fired properly.
|
|
143
|
+
# force assert to the end of the list
|
|
144
|
+
assert_screen = @screens.find(:assert)
|
|
145
|
+
if assert_screen
|
|
146
|
+
@screens.delete assert_screen
|
|
147
|
+
@screens << assert_screen
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
rtml = render_widget_tml
|
|
151
|
+
on :error => url_for(:action => 'error') unless self[:on_error] or ENV['RAILS_ENV'] != 'production'
|
|
152
|
+
cache = nil
|
|
153
|
+
cache = 'deny' if @cache == false
|
|
154
|
+
cache = 'allow' if @cache
|
|
155
|
+
r = Rtml::Widgets::ElementBuilderWidget.new(self, nil) do |doc|
|
|
156
|
+
doc.drop_empty_attributes = true
|
|
157
|
+
doc.tml :xmlns => "http://www.ingenico.co.uk/tml", :cache => cache do |tml|
|
|
158
|
+
tml.build :head do |head|
|
|
159
|
+
head.concat includes.to_tml
|
|
160
|
+
head.build :base, :href => base unless base.blank?
|
|
161
|
+
build_defaults(head)
|
|
162
|
+
build_error_screen(head)
|
|
163
|
+
end
|
|
164
|
+
tml.concat @vardecs.collect { |i| i.to_s }.join("\n")
|
|
165
|
+
tml.build :name => :screen, :id => :__default do |scr|
|
|
166
|
+
scr.build :name => :next, :uri => default_screen.to_screen_ref
|
|
167
|
+
end unless default_screen.blank?
|
|
168
|
+
tml.concat @screens.to_tml
|
|
169
|
+
tml.concat rtml
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
r = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n#{r.to_s}".gsub(/\t/, ''.ljust(tab_stop))
|
|
174
|
+
r
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def base(*a)
|
|
178
|
+
with_first_argument(*a) { |arg| @base = arg }
|
|
179
|
+
@base
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Sets or retrieves whether or not this document is allowed to be cached.
|
|
183
|
+
def cache(*a)
|
|
184
|
+
with_first_argument(*a) do |arg|
|
|
185
|
+
case arg
|
|
186
|
+
when false, 'false', 'deny', :false, :deny then @cache = false #"deny"
|
|
187
|
+
when '', nil then @cache = nil
|
|
188
|
+
else @cache = true#'allow'
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
@cache
|
|
192
|
+
end
|
|
193
|
+
alias allow_cache cache
|
|
194
|
+
|
|
195
|
+
# If a parameter is supplied, the tab stop for this document is set to the given
|
|
196
|
+
# value (which should be a number). Otherwise, the current value is returned.
|
|
197
|
+
# This alters the degree of indentation used when to_tml is called.
|
|
198
|
+
def tab_stop(*a)
|
|
199
|
+
with_first_argument(*a) { |arg| @tab_stop = arg.to_i }
|
|
200
|
+
@tab_stop
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Specifies a default screen for this document. In TML, the "default" screen is
|
|
204
|
+
# simply the first screen to be encountered within the file. This method ensures
|
|
205
|
+
# that no matter what order your screens appear in, the specified screen is where
|
|
206
|
+
# the user will start. If no parameters are given, the current default screen is
|
|
207
|
+
# returned and no changes will occur. Note that if this is not set, there will
|
|
208
|
+
# be no "default" screen, and the first screen added to the document within your
|
|
209
|
+
# code will be the end user's starting point.
|
|
210
|
+
def default_screen(*a)
|
|
211
|
+
with_first_argument(*a) { |arg| @default_screen = arg }
|
|
212
|
+
@default_screen
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# Accepts a hash of options, containing :menu => 'some url' and/or :cancel => 'some url'.
|
|
216
|
+
# Both values are optional, but no other values may be specified. What this is saying
|
|
217
|
+
# is, if the user presses the "menu" button on their terminal and the screen they
|
|
218
|
+
# are viewing is not overriding this default, the user will be redirected to the
|
|
219
|
+
# :menu URL specified in this method. Similarly, if they press the "cancel" button
|
|
220
|
+
# on the terminal, they will be forwarded to the :cancel action. If they press the
|
|
221
|
+
# corresponding button but no action was supplied (you didn't call defaults or you
|
|
222
|
+
# called it with :cancel and they pressed "enter", or vice versa), then nothing happens.
|
|
223
|
+
def defaults(options)
|
|
224
|
+
on options
|
|
225
|
+
# options.each { |a,b| on a => b }
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# As of 05/08/09, this method can be called with just a String for an argument. In this
|
|
229
|
+
# case, the method will attempt to get the :css or :tml option based on the filename.
|
|
230
|
+
#
|
|
231
|
+
# Directs the terminal to include the specified file while loading this application.
|
|
232
|
+
# The first parameter specifies either :css, :stylesheet, or :tml, which is the format
|
|
233
|
+
# of the file being included. (:css and :stylesheet are for convenience, and both mean the
|
|
234
|
+
# same thing.) The properties hash should include a :source URL to the file to be included.
|
|
235
|
+
# Or, you can call this method with only a single parameter, which must be a Hash.
|
|
236
|
+
# In this case, you must specify :type => (:css or :stylesheet or :tml).
|
|
237
|
+
#
|
|
238
|
+
# Examples:
|
|
239
|
+
# tmldoc.includes :css, :source => 'pretty.css'
|
|
240
|
+
# tmldoc.includes :source => 'pretty.css', :type => :stylesheet
|
|
241
|
+
# tmldoc.includes :tml, :source => 'error_screens.tml'
|
|
242
|
+
# tmldoc.includes :rtml, :source => 'error_screens.tml'
|
|
243
|
+
#
|
|
244
|
+
# Note that you can, of course, reference Rails actions in this same way:
|
|
245
|
+
# tmldoc.includes :tml, :source => 'errors/500'
|
|
246
|
+
# tmldoc.includes :rtml, :source => 'errors/500'
|
|
247
|
+
# tmldoc.includes :action => :errors, :id => 500
|
|
248
|
+
# tmldoc.includes :tml, :source => { :action => :errors, :id => 500 }
|
|
249
|
+
#
|
|
250
|
+
# Just be sure that the controller ("errors" in this case) is rendering TML...
|
|
251
|
+
#
|
|
252
|
+
# Also note that in all forms, if type is unspecified, it defaults to :tml.
|
|
253
|
+
def includes(type = nil, properties = { })
|
|
254
|
+
# TODO: This should probably be broken into several methods, maybe even its own class.
|
|
255
|
+
if type.kind_of? Hash
|
|
256
|
+
if properties.kind_of? Hash
|
|
257
|
+
properties.merge! type
|
|
258
|
+
else
|
|
259
|
+
properties = type
|
|
260
|
+
end
|
|
261
|
+
type = nil
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
properties = { :source => properties } if properties.kind_of? String
|
|
265
|
+
return @includes if type.nil? and properties.empty?
|
|
266
|
+
type = properties.delete :type if properties.key? :type and type.nil?
|
|
267
|
+
type = properties.delete :format if properties.key? :format and type.nil?
|
|
268
|
+
if properties.kind_of? Hash
|
|
269
|
+
if type.kind_of? String and not properties.key? :source
|
|
270
|
+
properties.merge!(:source => type)
|
|
271
|
+
type = nil
|
|
272
|
+
end
|
|
273
|
+
else
|
|
274
|
+
properties = { :source => properties } unless properties.kind_of? Hash
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
type = :css if type == :stylesheet
|
|
278
|
+
type = :tml if type == :rtml
|
|
279
|
+
|
|
280
|
+
# get source
|
|
281
|
+
source = ((properties.key? :source) ? properties[:source] : url_for(properties))
|
|
282
|
+
raise "Could not build source for include directive" if source.nil? or properties.blank?
|
|
283
|
+
|
|
284
|
+
# get type
|
|
285
|
+
if type.nil?
|
|
286
|
+
# try to infer type from source
|
|
287
|
+
%W(format=tml .tml type=tml format=rtml .rtml type=rtml /tml/).each { |f| type = :tml if source[f] }
|
|
288
|
+
%W(format=css .css stylesheets/ css/ type=css).each { |f| type = :css if source[f] }
|
|
289
|
+
raise "Could not infer type from source, specify :css or :tml in include directive" unless type
|
|
290
|
+
else
|
|
291
|
+
raise "Type must be one of [ :css, :stylesheet, :tml, :rtml ]" unless [:css, :tml].include? type
|
|
292
|
+
end
|
|
293
|
+
incl = Include.new(action_view, {:source=>source,:type=>type}, self)
|
|
294
|
+
@includes << incl
|
|
295
|
+
incl
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def proc#:nodoc:
|
|
299
|
+
super
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
private
|
|
304
|
+
def build_defaults(head)
|
|
305
|
+
c = {}
|
|
306
|
+
c[:menu] = self[:on_menu] unless self[:on_menu].blank?
|
|
307
|
+
c[:cancel] = self[:on_cancel] unless self[:on_cancel].blank?
|
|
308
|
+
head.concat "<defaults #{c.to_s} />" unless c.empty?
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
def build_error_screen(head)
|
|
312
|
+
c = { }
|
|
313
|
+
c[:uri] = self[:on_error] unless self[:on_error].blank?
|
|
314
|
+
head.concat "<error #{c.to_s} />" unless c.empty?
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
end
|