rtml 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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,52 @@
|
|
1
|
+
class Rtml::Validation::DomTag
|
2
|
+
attr_accessor :name
|
3
|
+
attr_accessor :children
|
4
|
+
attr_accessor :child_order
|
5
|
+
attr_writer :root
|
6
|
+
|
7
|
+
def root?; @root end
|
8
|
+
|
9
|
+
def initialize(name)
|
10
|
+
@name = name.to_s
|
11
|
+
@children = []
|
12
|
+
@child_order = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def validate(validator, ruleset, xml)
|
16
|
+
# note that validate does NOT validate *this* element -- only children!
|
17
|
+
tml_elements = xml/"/#{self.name}"
|
18
|
+
tml_elements.each do |element|
|
19
|
+
#validate that children specified are present
|
20
|
+
children.each do |set|
|
21
|
+
for chele in set[0]
|
22
|
+
chele = ruleset.tags.find_by_name(chele) if chele.kind_of? Symbol or chele.kind_of? String
|
23
|
+
options = set[1].reverse_merge(:minimum => 0)
|
24
|
+
found = chele.validate(validator, ruleset, element).length
|
25
|
+
|
26
|
+
validator.test_case.assert_operator found, ">=", options[:minimum],
|
27
|
+
"Found #{found} occurrances of #{chele.name}; expected to find at least #{options[:minimum]}"
|
28
|
+
|
29
|
+
if options[:maximum]
|
30
|
+
validator.test_case.assert_operator found, "<=", options[:maximum],
|
31
|
+
"Found #{found} occurrances of #{chele.name}; expected to find at most #{options[:maximum]}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# validate that children not specified are not present
|
37
|
+
acceptable = children.collect { |c| c[0] }.flatten.collect do |c|
|
38
|
+
((c.kind_of? Symbol or c.kind_of? String) ? ruleset.tags.find_by_name(c) : c)
|
39
|
+
end
|
40
|
+
forbidden = ruleset.tags - acceptable
|
41
|
+
forbidden.each do |tag|
|
42
|
+
count = (element/"/#{tag.name}").length
|
43
|
+
validator.test_case.assert_equal count, 0,
|
44
|
+
"Element #{tag.name} is not allowed to appear within parent #{element.name}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_s
|
50
|
+
name
|
51
|
+
end
|
52
|
+
end
|
data/app_generators/rtml/templates/rtml/lib/rtml/validation/predefined_variable_rule_parser.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
class Rtml::Validation::PredefinedVariableRuleParser
|
2
|
+
class VariableNamespace
|
3
|
+
VAR_INHERITABLE_OPTIONS = [ :type, :default, :values, :perms ]
|
4
|
+
attr_reader :children, :name
|
5
|
+
attr_accessor :filename, :fail_if_file_missing, :base_path, :parent_path
|
6
|
+
attr_writer *VAR_INHERITABLE_OPTIONS
|
7
|
+
attr_writer :desc
|
8
|
+
delegate :to_s, :to => :name
|
9
|
+
|
10
|
+
def initialize(name, options = {}, &block)
|
11
|
+
@name = name
|
12
|
+
@children = HashWithIndifferentAccess.new
|
13
|
+
@variables = []
|
14
|
+
@base_path = File.join(File.dirname(__FILE__), "../../../rules")
|
15
|
+
@parent_path = ""
|
16
|
+
@search_path = ""
|
17
|
+
|
18
|
+
options.each { |k,v| self.send("#{k}=", v) }
|
19
|
+
self.filename ||= @name
|
20
|
+
#self.search_path = File.join(search_path.to_s, filename.to_s)
|
21
|
+
process(options, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def _vardcl(name, options = {})
|
25
|
+
options.reverse_merge!({:type => type, :default => default, :values => values, :perms => perms})
|
26
|
+
options[:name] = name
|
27
|
+
@variables << options
|
28
|
+
options
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_a
|
32
|
+
(@variables + @children.collect { |i| i[1].to_a }).flatten.collect do |i|
|
33
|
+
r = i.dup
|
34
|
+
unless self.name.blank?
|
35
|
+
r[:name] = "#{self.name}.#{r[:name]}"
|
36
|
+
else
|
37
|
+
r[:name] = "#{r[:name]}"
|
38
|
+
end
|
39
|
+
r
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def respond_to?(*a); super; end
|
44
|
+
def method_missing(name, *args, &block)
|
45
|
+
options = args.extract_options!
|
46
|
+
if args.length == 1
|
47
|
+
options[:desc] = args[0]
|
48
|
+
elsif args.length == 0
|
49
|
+
options[:desc] = name.to_s.titleize
|
50
|
+
else
|
51
|
+
raise "Invalid number of arguments: Expected 0 or 1"
|
52
|
+
end
|
53
|
+
_vardcl(name, options)
|
54
|
+
end
|
55
|
+
|
56
|
+
(VAR_INHERITABLE_OPTIONS + [:desc, :search_path]).each do |t|
|
57
|
+
attr_writer t
|
58
|
+
eval "def #{t}(a = nil); @#{t} = a if a; @#{t}; end", binding, __FILE__, __LINE__
|
59
|
+
end
|
60
|
+
|
61
|
+
def namespace(name, options = {}, &block)
|
62
|
+
name = name.to_s
|
63
|
+
o = { :base_path => base_path, :parent_path => File.join(parent_path, search_path, self.name.to_s) }
|
64
|
+
VAR_INHERITABLE_OPTIONS.each { |i| o[i] = self.send(i) }
|
65
|
+
if children[name]
|
66
|
+
children[name].process(options.merge(o), &block)
|
67
|
+
else
|
68
|
+
children[name] = VariableNamespace.new(name, options.merge(o), &block)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
def process(options = {}, &block)
|
74
|
+
if filename
|
75
|
+
fn = File.join("", parent_path.to_s, search_path, "#{filename}.rb")
|
76
|
+
print "Searching for namespace: #{fn}... " if $DEBUG
|
77
|
+
if File.exist?(File.join(base_path, fn))
|
78
|
+
puts "Found!" if $DEBUG
|
79
|
+
eval File.read(File.join(base_path, fn)), binding, fn, 1
|
80
|
+
else
|
81
|
+
puts "not found." if $DEBUG
|
82
|
+
raise "File not found: #{fn}" if fail_if_file_missing
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
instance_eval &block if block_given?
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def initialize(filename, &block)
|
91
|
+
@root_namespace = VariableNamespace.new(nil, :fail_if_file_missing => true, :filename => filename, &block)
|
92
|
+
end
|
93
|
+
|
94
|
+
def to_a
|
95
|
+
@root_namespace.to_a
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Rtml::Validation::TmlValidator
|
2
|
+
attr_reader :test_case
|
3
|
+
|
4
|
+
def initialize(tc, tml)
|
5
|
+
tc = tc.test_case if tc.respond_to? :test_case
|
6
|
+
@test_case = tc
|
7
|
+
@tml = tml
|
8
|
+
@parser = Rtml::Validation::DomRuleParser.new
|
9
|
+
@parser.parse! File.join(File.dirname(__FILE__), "../../../rules", "tml_document_structure.rb")
|
10
|
+
validate
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate(root = nil)
|
14
|
+
@parser.validate(self, @tml, root)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Rtml::Widgets::PropertyAccessors
|
2
|
+
# Ensures that all properties currently contain valid values.
|
3
|
+
# If a property has been declared to REQUIRE a value, and its
|
4
|
+
# current value is nil, an exception will be raised.
|
5
|
+
#
|
6
|
+
def validate_properties
|
7
|
+
properties.each do |name, prop|
|
8
|
+
raise "Value for property #{name.inspect} in Widget #{self.class.name} was not set" if prop.value == :required
|
9
|
+
end
|
10
|
+
1
|
11
|
+
end
|
12
|
+
|
13
|
+
# Sets or gets the value of the specified property. If no arguments are specified, the
|
14
|
+
# current value is returned. Otherwise, the arguments are assigned and the new value is
|
15
|
+
# returned. If a block is given, it is passed into the callbacks for the property.
|
16
|
+
def access_property(prop_name, *args, &block)
|
17
|
+
if args.length == 0 and not block_given? then get_property_value prop_name
|
18
|
+
else set_property_value prop_name, args[0], &block
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns the current value for the specified property
|
23
|
+
def get_property_value(prop_name)
|
24
|
+
get_property(prop_name).value
|
25
|
+
end
|
26
|
+
|
27
|
+
# Sets the specified property to the given value. Block is passed into the callbacks, if any.
|
28
|
+
def set_property_value(prop_name, value, &block)
|
29
|
+
self.class.callbacks_for(prop_name).each { |c| value = self.send(c, value, &block) }
|
30
|
+
get_property(prop_name).value = value
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns the Property object with the given property name. This is the actual
|
34
|
+
# RTML Property object, not the value of the specified property.
|
35
|
+
def get_property(prop_name)
|
36
|
+
properties[prop_name] ||= Rtml::Widgets::Property.new(prop_name)
|
37
|
+
end
|
38
|
+
|
39
|
+
# An optional callback to be called immediately after initialization. Should be used
|
40
|
+
# to set up default values for properties.
|
41
|
+
#
|
42
|
+
# If a property is given the value :required, then an exception will be raised if no
|
43
|
+
# overriding value is set before to_tml is called.
|
44
|
+
#
|
45
|
+
# Example:
|
46
|
+
# property :first_name, :password
|
47
|
+
#
|
48
|
+
# def init_properties
|
49
|
+
# first_name "Joe"
|
50
|
+
# password :required
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
def init_properties; end
|
54
|
+
|
55
|
+
# Returns the hash of properties for this Widget.
|
56
|
+
def properties
|
57
|
+
@properties ||= HashWithIndifferentAccess.new
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,251 @@
|
|
1
|
+
require 'find'
|
2
|
+
|
3
|
+
module Rtml::Widgets
|
4
|
+
# All RTML Widgets should extend this class.
|
5
|
+
#
|
6
|
+
# The simplest definition of an RTML \Widget is "an object which generates raw TML code".
|
7
|
+
# Widgets are responsible for the vast majority of the heavy lifting in RTML, and are
|
8
|
+
# indispensable.
|
9
|
+
#
|
10
|
+
# It is important to realize that "core" RTML – that is, RTML without Widgets -- is entirely
|
11
|
+
# unable to accommodate an acceptable TML application. This is because "core" RTML consists
|
12
|
+
# of the TMLDocument object, which is responsible for creating the highest level only of the
|
13
|
+
# document object model, and the Screen object, which is responsible for creating the
|
14
|
+
# individual screens within that document. All other content -- such as displays, views,
|
15
|
+
# credit card parsers, and so forth -- is brought to you by Widgets.
|
16
|
+
#
|
17
|
+
# By default, you can create new Widgets in your lib/rtml/widgets directory. If you
|
18
|
+
# need to change this load path or add more directories to it, you can do so by modifying
|
19
|
+
# the Widget.load_paths array via your environment.rb file:
|
20
|
+
#
|
21
|
+
# Rtml::Widgets::Widget.load_paths << "lib/rtml/third_party/widgets"
|
22
|
+
#
|
23
|
+
# The simplest way to create a Widget is to use the command line generator:
|
24
|
+
#
|
25
|
+
# script/generate rtml_widget my_test
|
26
|
+
#
|
27
|
+
# This will create a Widget called MyTestWidget in the lib/rtml/widgets directory.
|
28
|
+
# By default, there will be lots of comments in this file to help you get started. If
|
29
|
+
# you wish to generate a Widget without the comments, disable them:
|
30
|
+
#
|
31
|
+
# script/generate rtml_widget my_test --no-help
|
32
|
+
#
|
33
|
+
# There are required components to your Widget. First, it <strong>must</code> list at least
|
34
|
+
# one Accessor. An Accessor is the class name of an object that is going to be allowed to
|
35
|
+
# make use of this Widget. For instance, if you want a user to be able to use your Widget
|
36
|
+
# from the TMLDocument object itself, you would say:
|
37
|
+
#
|
38
|
+
# accessor TMLDocument
|
39
|
+
#
|
40
|
+
# The usage of the MyTestWidget with a TML helper, then, would look like:
|
41
|
+
#
|
42
|
+
# Rtml::actions_for MyTestController do
|
43
|
+
# def index
|
44
|
+
# my_test { . . . }
|
45
|
+
# end
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
# To make this Widget accessible to a Screen, you would specify Screen as the accessor.
|
49
|
+
# Then, usage would look like:
|
50
|
+
#
|
51
|
+
# Rtml::actions_for MyTestController do
|
52
|
+
# def index
|
53
|
+
# screen :index, :next => :next_scr do
|
54
|
+
# my_test { . . . }
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# You can also specify other Widgets as accessors directly. For instance, you could specify
|
60
|
+
# the Display Widget as an accessor to make this Widget available from within the Display
|
61
|
+
# builder. Likewise, you can specify the Widget class itself as an accessor, which would make
|
62
|
+
# your Widget accessible to <strong>all</code> other Widgets. This wouldn't include TMLDocument
|
63
|
+
# or Screen, however, because they are not Widgets. You can also specify multiple accessors:
|
64
|
+
#
|
65
|
+
# accessor Widget
|
66
|
+
# accessor TMLDocument, Screen
|
67
|
+
#
|
68
|
+
# This would, in effect, make this Widget accessible from any context whatsoever.
|
69
|
+
#
|
70
|
+
#
|
71
|
+
# The other required component of a Widget is a #to_tml method. This method most often returns
|
72
|
+
# a String, and if it does not, the value it does return will be converted to one. It can, for
|
73
|
+
# instance, return a reference to another Widget. Its #to_tml method would be called automatically,
|
74
|
+
# and then the String value of that would be substituted for the Widget itself. The #to_tml
|
75
|
+
# method is in charge of actually building the TML content of a document. Without this method,
|
76
|
+
# there is no content.
|
77
|
+
#
|
78
|
+
# See the rest of this page for information on the non-required elements of a Widget, or the
|
79
|
+
# RTML Wiki ( at http://wiki.rubytml.com ) for complete tutorials.
|
80
|
+
#
|
81
|
+
# Many of the methods available to a Widget are defined in WidgetSupport, so be sure to take a
|
82
|
+
# look at that class as well.
|
83
|
+
#
|
84
|
+
class Widget < Rtml::Element
|
85
|
+
include Rtml::Core
|
86
|
+
include Rtml::Helpers
|
87
|
+
|
88
|
+
include Rtml::Widgets::PropertyAccessors
|
89
|
+
extend Rtml::Widgets::WidgetClassMethods
|
90
|
+
|
91
|
+
# Provides access to the RTML object which this Widget was added to.
|
92
|
+
attr_reader :parent
|
93
|
+
attr_writer :layout
|
94
|
+
|
95
|
+
# The return value of the block given during initialization, or nil if no
|
96
|
+
# block was supplied.
|
97
|
+
attr_reader :block_value
|
98
|
+
|
99
|
+
# Provides access to the RTML Layout in use, if any. This will be assigned
|
100
|
+
# prior to render, but may not necessarily be assigned during initialization.
|
101
|
+
# If a screen Layout is applied to the entire document, it will be applied to this
|
102
|
+
# Widget.
|
103
|
+
#
|
104
|
+
# However, if this Widget resides within a Screen object and an explicit Layout
|
105
|
+
# is applied to that Screen, then this will override the TMLDocument Layout
|
106
|
+
# and be applied to this Widget instead. This sequence is behind-the-scenes
|
107
|
+
# and is not something the author of the Widget should ever have to think about.
|
108
|
+
#
|
109
|
+
# Regardless, it is up to the author of the Widget whether or not to take
|
110
|
+
# advantage of the supplied Layout.
|
111
|
+
#
|
112
|
+
# Note that any Widgets underneath this one will also inherit its Layout, so
|
113
|
+
# even if this particular Widget does not make use of a Layout, yielding to
|
114
|
+
# child Widgets may result in a Layout being rendered anyways. If this Widget
|
115
|
+
# is going to disallow layouts, it should also iterate through its children
|
116
|
+
# and clear their Layouts as well.
|
117
|
+
def layout
|
118
|
+
return @layout if @layout
|
119
|
+
return parent.layout if parent
|
120
|
+
return nil
|
121
|
+
end
|
122
|
+
|
123
|
+
# A Widget is initialized with a reference to its parent object (for instance, Screen)
|
124
|
+
# and a Hash of options. It is optionally constructed with a block which can also set these
|
125
|
+
# options. The constructor assigns the values specified in the options Hash and yields to
|
126
|
+
# the block (if given).
|
127
|
+
def initialize(parent, *arguments, &block)
|
128
|
+
super(nil, nil, nil, parent)
|
129
|
+
@arguments = arguments.dup
|
130
|
+
@options = arguments.extract_options!
|
131
|
+
@parent = parent
|
132
|
+
protect_all_instance_variables!
|
133
|
+
protected_instance_variables << "@block_value"
|
134
|
+
wrap_view(parent.action_view) if parent
|
135
|
+
if self.methods.include? 'init_properties'
|
136
|
+
if self.method(:init_properties).arity == 0 then self.init_properties
|
137
|
+
else self.init_properties(options.first)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
if self.class.assign_properties?
|
142
|
+
(arguments + [@options]).each do |o|
|
143
|
+
if o.kind_of? Hash
|
144
|
+
o.each { |n,v| self.send("#{n}=", v) if self.respond_to? "#{n}=" }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
self.send :after_initialize if self.respond_to? :after_initialize
|
150
|
+
|
151
|
+
@block_value = yield_with_optional_param self, &block if block_given?
|
152
|
+
end
|
153
|
+
|
154
|
+
# Returns the array of load paths to look for Widget definitions in.
|
155
|
+
# You can modify this array directly This is probably best done
|
156
|
+
# from config/environment.rb.
|
157
|
+
def Widget.load_paths
|
158
|
+
@@load_paths ||= [ File.join(RAILS_ROOT, "lib", "rtml", "widgets"),
|
159
|
+
File.join(PLUGIN_BASE, "components", "rtml", "widgets")]
|
160
|
+
end
|
161
|
+
|
162
|
+
def Widget.load_widgets(unused = __FILE__)#:nodoc:
|
163
|
+
default_widget_constants = Rtml::Widgets.constants
|
164
|
+
Widget.load_paths.each do |dir|
|
165
|
+
Dir.glob(File.join(dir, "**", "*.rb")) do |file|
|
166
|
+
require_dependency(file) unless file =~ /[\\\/]\.svn[\\\/]/
|
167
|
+
end
|
168
|
+
end
|
169
|
+
(Rtml::Widgets.constants - default_widget_constants).each do |konst|
|
170
|
+
klass = Rtml::Widgets.const_get(konst)
|
171
|
+
# When it's done, do this...
|
172
|
+
if klass.accessor_list.empty? and klass != self
|
173
|
+
raise "Error: Widget #{klass.name} is not accessible"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
true
|
177
|
+
end
|
178
|
+
|
179
|
+
# Returns the ID for the current screen, or raises an error if it can't be found.
|
180
|
+
def current_screen_id
|
181
|
+
current_screen.id
|
182
|
+
end
|
183
|
+
|
184
|
+
def current_screen
|
185
|
+
ancestors.each { |p| return p if p.kind_of? Rtml::Core::Screen }
|
186
|
+
raise "Can't find any screen in parent hierarchy"
|
187
|
+
end
|
188
|
+
|
189
|
+
# Renders this Widget. This method should always be called instead
|
190
|
+
# of to_tml when dealing with Widgets, because it takes care of
|
191
|
+
# :before_render validation and ensures that a layout, if available,
|
192
|
+
# has been assigned. This method is also in charge of constructing
|
193
|
+
# the block which is passed to #to_tml.
|
194
|
+
#
|
195
|
+
# For content generation, this method takes 3 steps:
|
196
|
+
# 1. The current Widget's to_tml method is called with a block
|
197
|
+
# which, when yielded to, will call #render_widget_tml.
|
198
|
+
# 2. The return value of to_tml is tested for 3 conditions:
|
199
|
+
# a. If the returned object contains a #render_tml method,
|
200
|
+
# that method is called and this second return value will be
|
201
|
+
# returned as a String.
|
202
|
+
# b. If the #render_tml method does not exist but the #to_tml
|
203
|
+
# method does exist, it is called with no block and returned
|
204
|
+
# as a String.
|
205
|
+
# c. If neither of these two methods exist, the current value
|
206
|
+
# is returned as a String.
|
207
|
+
#
|
208
|
+
# In normal RTML generation, you should never have to directly reference
|
209
|
+
# this method; it is called internally, but is made available to you in
|
210
|
+
# case you need to circumvent the built-in functionality for some reason.
|
211
|
+
#
|
212
|
+
def render_tml
|
213
|
+
validate_properties
|
214
|
+
to_tml { render_widget_tml }.to_s.strip
|
215
|
+
end
|
216
|
+
|
217
|
+
# This method can be called in any way that Rtml::Helpers::WidgetSupport#content_of_view
|
218
|
+
# can be called. You should see that method for usage examples, because there are a lot
|
219
|
+
# of them. Arguments include a String, nil or no arguments, a Block, a Hash or another
|
220
|
+
# RTML argument.
|
221
|
+
#
|
222
|
+
# The #display method will call Rtml::Helpers::WidgetSupport#content_of_view on the
|
223
|
+
# input arguments and then call Widget#do_layout on the return value. The result
|
224
|
+
# is a set of content that has had the current layout, if any, applied to it.
|
225
|
+
# That content is then concatenated to the current element using the #concat
|
226
|
+
# method, which adds the content to the output buffer of this Widget. Finally,
|
227
|
+
# nil is returned. This is useful because there are some cases where a Widget's
|
228
|
+
# return value is concatenated to the element being generated. By returning nil,
|
229
|
+
# this method ensures that its content will not be added twice.
|
230
|
+
#
|
231
|
+
def display(*a, &b)
|
232
|
+
c = content_of_view(*a, &b).to_s
|
233
|
+
r = ((layout.nil? or layout == false) ? c : (layout.to_tml { c.indent })).to_s.indent
|
234
|
+
concat r
|
235
|
+
nil
|
236
|
+
end
|
237
|
+
|
238
|
+
# This method is in charge of producing the TML which will be sent to your Widget's parent
|
239
|
+
# object. Obviously, this return value must be a String. An exception will be raised if
|
240
|
+
# to_tml is referenced and is not overridden in your Widget.
|
241
|
+
def to_tml
|
242
|
+
raise "Implement method to_tml to return a String or Widget to be rendered in the TML document"
|
243
|
+
end
|
244
|
+
|
245
|
+
protected
|
246
|
+
# Returns the list of arguments this Widget was constructed with.
|
247
|
+
attr_reader :arguments
|
248
|
+
# Returns the options hash this Widget was constructed with.
|
249
|
+
attr_reader :options
|
250
|
+
end
|
251
|
+
end
|