magic_model_generator 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +8 -0
- data/License.txt +20 -0
- data/Manifest.txt +81 -0
- data/{README → README.txt} +0 -0
- data/Rakefile +58 -59
- data/lib/activerecord/base.rb +0 -2
- data/lib/magic_model_generator.rb +0 -2
- data/lib/magic_model_generator/schema.rb +1 -5
- data/lib/magic_model_generator/validations.rb +1 -0
- data/lib/magic_model_generator/version.rb +1 -1
- data/scripts/txt2html +67 -0
- data/setup.rb +1585 -0
- data/tasks/build_db.rake +85 -0
- data/test/connections/native_db2/connection.rb +25 -0
- data/test/connections/native_firebird/connection.rb +26 -0
- data/test/connections/native_frontbase/connection.rb +27 -0
- data/test/connections/native_mysql/connection.rb +27 -0
- data/test/connections/native_openbase/connection.rb +21 -0
- data/test/connections/native_oracle/connection.rb +27 -0
- data/test/connections/native_postgresql/connection.rb +23 -0
- data/test/connections/native_sqlite/connection.rb +25 -0
- data/test/connections/native_sqlite3/connection.rb +25 -0
- data/test/connections/native_sqlite3/in_memory_connection.rb +18 -0
- data/test/connections/native_sqlserver/connection.rb +23 -0
- data/test/connections/native_sqlserver_odbc/connection.rb +25 -0
- data/test/connections/native_sybase/connection.rb +23 -0
- data/test/fixtures/db_definitions/db2.drop.sql +32 -0
- data/test/fixtures/db_definitions/db2.sql +231 -0
- data/test/fixtures/db_definitions/db22.drop.sql +2 -0
- data/test/fixtures/db_definitions/db22.sql +5 -0
- data/test/fixtures/db_definitions/firebird.drop.sql +63 -0
- data/test/fixtures/db_definitions/firebird.sql +304 -0
- data/test/fixtures/db_definitions/firebird2.drop.sql +2 -0
- data/test/fixtures/db_definitions/firebird2.sql +6 -0
- data/test/fixtures/db_definitions/frontbase.drop.sql +32 -0
- data/test/fixtures/db_definitions/frontbase.sql +268 -0
- data/test/fixtures/db_definitions/frontbase2.drop.sql +1 -0
- data/test/fixtures/db_definitions/frontbase2.sql +4 -0
- data/test/fixtures/db_definitions/mysql.drop.sql +32 -0
- data/test/fixtures/db_definitions/mysql.sql +234 -0
- data/test/fixtures/db_definitions/mysql2.drop.sql +2 -0
- data/test/fixtures/db_definitions/mysql2.sql +5 -0
- data/test/fixtures/db_definitions/openbase.drop.sql +2 -0
- data/test/fixtures/db_definitions/openbase.sql +302 -0
- data/test/fixtures/db_definitions/openbase2.drop.sql +2 -0
- data/test/fixtures/db_definitions/openbase2.sql +7 -0
- data/test/fixtures/db_definitions/oracle.drop.sql +65 -0
- data/test/fixtures/db_definitions/oracle.sql +325 -0
- data/test/fixtures/db_definitions/oracle2.drop.sql +2 -0
- data/test/fixtures/db_definitions/oracle2.sql +6 -0
- data/test/fixtures/db_definitions/postgresql.drop.sql +37 -0
- data/test/fixtures/db_definitions/postgresql.sql +247 -0
- data/test/fixtures/db_definitions/postgresql2.drop.sql +2 -0
- data/test/fixtures/db_definitions/postgresql2.sql +4 -0
- data/test/fixtures/db_definitions/schema.rb +74 -0
- data/test/fixtures/db_definitions/sqlite.drop.sql +32 -0
- data/test/fixtures/db_definitions/sqlite.sql +215 -0
- data/test/fixtures/db_definitions/sqlite2.drop.sql +2 -0
- data/test/fixtures/db_definitions/sqlite2.sql +5 -0
- data/test/fixtures/db_definitions/sqlserver.drop.sql +34 -0
- data/test/fixtures/db_definitions/sqlserver.sql +243 -0
- data/test/fixtures/db_definitions/sqlserver2.drop.sql +2 -0
- data/test/fixtures/db_definitions/sqlserver2.sql +5 -0
- data/test/fixtures/db_definitions/sybase.drop.sql +34 -0
- data/test/fixtures/db_definitions/sybase.sql +218 -0
- data/test/fixtures/db_definitions/sybase2.drop.sql +4 -0
- data/test/fixtures/db_definitions/sybase2.sql +5 -0
- data/test/{magic_model_generator_test.rb → test_magic_model_generator.rb} +1 -1
- data/test/test_rails_app/test/test_helper.rb +36 -0
- data/website/index.html +165 -0
- data/website/index.txt +83 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.js +3 -0
- data/website/template.rhtml +53 -0
- metadata +96 -329
- data/examples/singleview/account.rb +0 -94
- data/examples/singleview/account_history.rb +0 -21
- data/examples/singleview/account_reservation.rb +0 -26
- data/examples/singleview/account_type.rb +0 -54
- data/examples/singleview/account_type_aging.rb +0 -17
- data/examples/singleview/account_type_variable.rb +0 -8
- data/examples/singleview/address.rb +0 -8
- data/examples/singleview/address_format.rb +0 -49
- data/examples/singleview/address_history.rb +0 -28
- data/examples/singleview/adjustment.rb +0 -97
- data/examples/singleview/adjustment_batch.rb +0 -42
- data/examples/singleview/adjustment_invoice.rb +0 -17
- data/examples/singleview/adjustment_type.rb +0 -54
- data/examples/singleview/adjustment_type_variable.rb +0 -8
- data/examples/singleview/archive_lock_t.rb +0 -11
- data/examples/singleview/archive_result.rb +0 -15
- data/examples/singleview/archive_type.rb +0 -31
- data/examples/singleview/archive_type_table_list.rb +0 -15
- data/examples/singleview/atai_error_name.rb +0 -7
- data/examples/singleview/atlanta_form.rb +0 -23
- data/examples/singleview/atlanta_form_field.rb +0 -12
- data/examples/singleview/atlanta_group.rb +0 -285
- data/examples/singleview/atlanta_help_entry.rb +0 -32
- data/examples/singleview/atlanta_operator.rb +0 -356
- data/examples/singleview/atlanta_profile.rb +0 -47
- data/examples/singleview/atlanta_profile_func_map.rb +0 -8
- data/examples/singleview/atlanta_profile_group_map.rb +0 -10
- data/examples/singleview/atlanta_profile_role_map.rb +0 -8
- data/examples/singleview/atlanta_profile_wf_map.rb +0 -10
- data/examples/singleview/atlanta_role.rb +0 -23
- data/examples/singleview/atlanta_table_partition.rb +0 -39
- data/examples/singleview/attribute_type.rb +0 -75
- data/examples/singleview/attribute_type_variable.rb +0 -8
- data/examples/singleview/bill_run.rb +0 -93
- data/examples/singleview/bill_run_operation.rb +0 -54
- data/examples/singleview/bill_run_type.rb +0 -39
- data/examples/singleview/bill_run_type_status.rb +0 -12
- data/examples/singleview/bill_run_type_task.rb +0 -12
- data/examples/singleview/cache.rb +0 -23
- data/examples/singleview/cache_field.rb +0 -13
- data/examples/singleview/can_act_charge.rb +0 -16
- data/examples/singleview/charge.rb +0 -67
- data/examples/singleview/charge_category.rb +0 -45
- data/examples/singleview/charge_output_defn.rb +0 -13
- data/examples/singleview/charge_output_defn_history.rb +0 -22
- data/examples/singleview/charge_output_defn_var.rb +0 -10
- data/examples/singleview/configuration_attr_type.rb +0 -22
- data/examples/singleview/configuration_attribute.rb +0 -11
- data/examples/singleview/configuration_item.rb +0 -26
- data/examples/singleview/configuration_item_type.rb +0 -29
- data/examples/singleview/contract.rb +0 -35
- data/examples/singleview/contract_history.rb +0 -48
- data/examples/singleview/contract_type.rb +0 -58
- data/examples/singleview/contract_type_product.rb +0 -11
- data/examples/singleview/conversion_rate.rb +0 -14
- data/examples/singleview/currency.rb +0 -118
- data/examples/singleview/currency_history.rb +0 -28
- data/examples/singleview/customer_contact.rb +0 -12
- data/examples/singleview/customer_node.rb +0 -166
- data/examples/singleview/customer_node_bill_run.rb +0 -12
- data/examples/singleview/customer_node_charge_cat.rb +0 -22
- data/examples/singleview/customer_node_correspond.rb +0 -12
- data/examples/singleview/customer_node_da.rb +0 -11
- data/examples/singleview/customer_node_da_array.rb +0 -35
- data/examples/singleview/customer_node_history.rb +0 -86
- data/examples/singleview/customer_node_inv_format.rb +0 -33
- data/examples/singleview/customer_node_type.rb +0 -89
- data/examples/singleview/customer_node_type_cc.rb +0 -18
- data/examples/singleview/customer_node_type_da.rb +0 -8
- data/examples/singleview/customer_node_type_var.rb +0 -8
- data/examples/singleview/customer_query.rb +0 -80
- data/examples/singleview/customer_query_progress.rb +0 -20
- data/examples/singleview/customer_query_type.rb +0 -49
- data/examples/singleview/customer_query_type_var.rb +0 -8
- data/examples/singleview/delete_cascade.rb +0 -13
- data/examples/singleview/delete_cascade_group.rb +0 -21
- data/examples/singleview/delete_constraint.rb +0 -9
- data/examples/singleview/derived_attribute.rb +0 -32
- data/examples/singleview/derived_attribute_array.rb +0 -32
- data/examples/singleview/derived_attribute_history.rb +0 -41
- data/examples/singleview/derived_attribute_index.rb +0 -13
- data/examples/singleview/derived_attribute_value.rb +0 -19
- data/examples/singleview/dil.rb +0 -18
- data/examples/singleview/dil_history.rb +0 -24
- data/examples/singleview/dil_reference.rb +0 -9
- data/examples/singleview/dil_validation_t.rb +0 -6
- data/examples/singleview/dil_variable.rb +0 -10
- data/examples/singleview/dunning_t.rb +0 -14
- data/examples/singleview/entity_mapping.rb +0 -11
- data/examples/singleview/entity_remap.rb +0 -22
- data/examples/singleview/entity_validation.rb +0 -70
- data/examples/singleview/entity_validation_list.rb +0 -15
- data/examples/singleview/entity_validation_variable.rb +0 -8
- data/examples/singleview/equipment.rb +0 -28
- data/examples/singleview/equipment_history.rb +0 -62
- data/examples/singleview/equipment_type.rb +0 -57
- data/examples/singleview/equipment_type_variable.rb +0 -8
- data/examples/singleview/error_group.rb +0 -18
- data/examples/singleview/error_message.rb +0 -65
- data/examples/singleview/evs_address_equiv.rb +0 -17
- data/examples/singleview/evs_alias.rb +0 -12
- data/examples/singleview/evs_attribute_type_key.rb +0 -7
- data/examples/singleview/evt_equipment_changeover.rb +0 -9
- data/examples/singleview/expression_list.rb +0 -27
- data/examples/singleview/expression_list_value.rb +0 -17
- data/examples/singleview/fac_group_compatibility.rb +0 -11
- data/examples/singleview/fac_group_instance.rb +0 -19
- data/examples/singleview/fac_group_instance_hist.rb +0 -16
- data/examples/singleview/facility.rb +0 -9
- data/examples/singleview/facility_group.rb +0 -21
- data/examples/singleview/facility_group_history.rb +0 -21
- data/examples/singleview/foreign_key.rb +0 -9
- data/examples/singleview/function_defn.rb +0 -16
- data/examples/singleview/function_defn_history.rb +0 -35
- data/examples/singleview/function_role.rb +0 -24
- data/examples/singleview/function_role_map.rb +0 -10
- data/examples/singleview/gl_code.rb +0 -65
- data/examples/singleview/gl_code_history.rb +0 -20
- data/examples/singleview/gl_upload.rb +0 -10
- data/examples/singleview/icon.rb +0 -64
- data/examples/singleview/inv_loop_t.rb +0 -4
- data/examples/singleview/inv_report_accounts_t.rb +0 -25
- data/examples/singleview/invoice.rb +0 -134
- data/examples/singleview/invoice_contents.rb +0 -14
- data/examples/singleview/invoice_format.rb +0 -31
- data/examples/singleview/invoice_format_history.rb +0 -29
- data/examples/singleview/invoice_message.rb +0 -17
- data/examples/singleview/invoice_message_history.rb +0 -31
- data/examples/singleview/invoice_message_variable.rb +0 -10
- data/examples/singleview/invoice_receivable_type.rb +0 -13
- data/examples/singleview/invoice_type.rb +0 -23
- data/examples/singleview/invoice_type_history.rb +0 -26
- data/examples/singleview/invoice_type_variable.rb +0 -10
- data/examples/singleview/isp_email_address.rb +0 -17
- data/examples/singleview/licence_current_values.rb +0 -12
- data/examples/singleview/menu_role_map.rb +0 -10
- data/examples/singleview/normalised_event.rb +0 -119
- data/examples/singleview/normalised_event_error.rb +0 -91
- data/examples/singleview/normalised_event_file.rb +0 -75
- data/examples/singleview/normalised_event_ft.rb +0 -18
- data/examples/singleview/normalised_event_ft_hist.rb +0 -25
- data/examples/singleview/normalised_event_ft_var.rb +0 -10
- data/examples/singleview/normalised_event_type.rb +0 -54
- data/examples/singleview/output_device.rb +0 -37
- data/examples/singleview/output_method.rb +0 -32
- data/examples/singleview/output_method_type.rb +0 -38
- data/examples/singleview/output_select.rb +0 -17
- data/examples/singleview/payment.rb +0 -102
- data/examples/singleview/payment_batch.rb +0 -43
- data/examples/singleview/payment_invoice.rb +0 -17
- data/examples/singleview/payment_item.rb +0 -15
- data/examples/singleview/payment_type.rb +0 -57
- data/examples/singleview/payment_type_variable.rb +0 -8
- data/examples/singleview/person.rb +0 -60
- data/examples/singleview/person_history.rb +0 -69
- data/examples/singleview/person_type.rb +0 -39
- data/examples/singleview/plan_table.rb +0 -27
- data/examples/singleview/product.rb +0 -45
- data/examples/singleview/product_compatibility.rb +0 -13
- data/examples/singleview/product_derived_attribute.rb +0 -10
- data/examples/singleview/product_facility_group.rb +0 -16
- data/examples/singleview/product_group.rb +0 -12
- data/examples/singleview/product_group_history.rb +0 -20
- data/examples/singleview/product_history.rb +0 -35
- data/examples/singleview/product_in_product_group.rb +0 -12
- data/examples/singleview/product_instance.rb +0 -41
- data/examples/singleview/product_instance_equip.rb +0 -21
- data/examples/singleview/product_instance_history.rb +0 -37
- data/examples/singleview/product_instance_service.rb +0 -17
- data/examples/singleview/product_payment_item.rb +0 -19
- data/examples/singleview/product_service_type.rb +0 -32
- data/examples/singleview/product_service_type_equip.rb +0 -20
- data/examples/singleview/product_subtotal.rb +0 -14
- data/examples/singleview/product_tariff.rb +0 -16
- data/examples/singleview/racr_clec_t1.rb +0 -12
- data/examples/singleview/racr_clec_t2.rb +0 -12
- data/examples/singleview/racr_clec_t3.rb +0 -28
- data/examples/singleview/racr_t.rb +0 -29
- data/examples/singleview/ragd_clec_t.rb +0 -47
- data/examples/singleview/ragd_t.rb +0 -28
- data/examples/singleview/rapc_t.rb +0 -27
- data/examples/singleview/rdfd_cmn_t.rb +0 -17
- data/examples/singleview/rdfd_t.rb +0 -16
- data/examples/singleview/receivable_type.rb +0 -49
- data/examples/singleview/receivable_type_history.rb +0 -25
- data/examples/singleview/reference_code.rb +0 -17
- data/examples/singleview/reference_type.rb +0 -32
- data/examples/singleview/release_info.rb +0 -10
- data/examples/singleview/report_reference_type.rb +0 -14
- data/examples/singleview/report_reference_type_defs.rb +0 -12
- data/examples/singleview/reprocessed_file.rb +0 -32
- data/examples/singleview/rgp_file.rb +0 -22
- data/examples/singleview/rgp_normalised_event.rb +0 -78
- data/examples/singleview/rmag_t.rb +0 -32
- data/examples/singleview/rpmr_t.rb +0 -27
- data/examples/singleview/rpsi_t.rb +0 -24
- data/examples/singleview/rser_t.rb +0 -13
- data/examples/singleview/rshu_cmn_t.rb +0 -31
- data/examples/singleview/schedule.rb +0 -91
- data/examples/singleview/schedule_task_type.rb +0 -43
- data/examples/singleview/service.rb +0 -88
- data/examples/singleview/service_bill_run_t.rb +0 -12
- data/examples/singleview/service_charge_category.rb +0 -22
- data/examples/singleview/service_da.rb +0 -11
- data/examples/singleview/service_da_array.rb +0 -35
- data/examples/singleview/service_duplicate.rb +0 -4
- data/examples/singleview/service_history.rb +0 -59
- data/examples/singleview/service_type.rb +0 -54
- data/examples/singleview/service_type_cc.rb +0 -18
- data/examples/singleview/service_type_da.rb +0 -8
- data/examples/singleview/service_type_equip_type.rb +0 -11
- data/examples/singleview/subtotal.rb +0 -48
- data/examples/singleview/subtotal_history.rb +0 -59
- data/examples/singleview/subtotal_rating_delta.rb +0 -20
- data/examples/singleview/subtotal_rating_value.rb +0 -21
- data/examples/singleview/subtotal_term.rb +0 -16
- data/examples/singleview/subtotal_value.rb +0 -18
- data/examples/singleview/summary_of_change.rb +0 -31
- data/examples/singleview/summary_of_change_ev.rb +0 -18
- data/examples/singleview/summary_of_change_view.rb +0 -22
- data/examples/singleview/t2_anumber_france.rb +0 -22
- data/examples/singleview/t2_anumber_italy.rb +0 -22
- data/examples/singleview/t2_anumber_netherlands.rb +0 -24
- data/examples/singleview/t2_anumber_portugal.rb +0 -22
- data/examples/singleview/t2_anumber_spain.rb +0 -22
- data/examples/singleview/t2_anumber_switzerland.rb +0 -24
- data/examples/singleview/t2_bankreference_austria.rb +0 -7
- data/examples/singleview/t2_bankreference_belgium.rb +0 -6
- data/examples/singleview/t2_bankreference_france.rb +0 -7
- data/examples/singleview/t2_bankreference_germany.rb +0 -7
- data/examples/singleview/t2_bankreference_italy.rb +0 -7
- data/examples/singleview/t2_bankreference_portugal.rb +0 -7
- data/examples/singleview/t2_cc_provrequests.rb +0 -19
- data/examples/singleview/t2_emf_info.rb +0 -12
- data/examples/singleview/t2_ev_column_label_mapping.rb +0 -9
- data/examples/singleview/t2_historytable.rb +0 -26
- data/examples/singleview/t2_inv_revoked_invoice.rb +0 -11
- data/examples/singleview/t2_inv_suppress_invoice.rb +0 -13
- data/examples/singleview/t2_national_number_plan.rb +0 -8
- data/examples/singleview/t2_pay_statement.rb +0 -28
- data/examples/singleview/t2_prov_req_action.rb +0 -22
- data/examples/singleview/t2_prov_request.rb +0 -32
- data/examples/singleview/t2_rep_brr_t.rb +0 -19
- data/examples/singleview/t2_rep_trr_t.rb +0 -19
- data/examples/singleview/t2_rep_ubr_t.rb +0 -19
- data/examples/singleview/t2_taxclass.rb +0 -8
- data/examples/singleview/t2_zipcode_austria.rb +0 -8
- data/examples/singleview/t2_zipcode_france.rb +0 -8
- data/examples/singleview/t2_zipcode_germany.rb +0 -8
- data/examples/singleview/t2_zipcode_hungary.rb +0 -8
- data/examples/singleview/t2_zipcode_luxembourg.rb +0 -8
- data/examples/singleview/t2_zipcode_netherlands.rb +0 -8
- data/examples/singleview/t2_zipcode_portugal.rb +0 -9
- data/examples/singleview/t2_zipcode_spain.rb +0 -8
- data/examples/singleview/t2_zipcode_switzerland.rb +0 -8
- data/examples/singleview/table_import_order.rb +0 -6
- data/examples/singleview/tariff.rb +0 -51
- data/examples/singleview/tariff_charge.rb +0 -33
- data/examples/singleview/tariff_charge_defn.rb +0 -18
- data/examples/singleview/tariff_condition_defn.rb +0 -19
- data/examples/singleview/tariff_history.rb +0 -70
- data/examples/singleview/tariff_recurring.rb +0 -36
- data/examples/singleview/task_queue.rb +0 -130
- data/examples/singleview/task_queue_result.rb +0 -10
- data/examples/singleview/template.rb +0 -18
- data/examples/singleview/template_history.rb +0 -30
- data/examples/singleview/template_reference.rb +0 -9
- data/examples/singleview/template_variable.rb +0 -10
- data/examples/singleview/trt_clec_treatment.rb +0 -13
- data/examples/singleview/variable_defn.rb +0 -48
- data/examples/singleview/variable_defn_dependency.rb +0 -11
- data/examples/singleview/variable_defn_direct.rb +0 -15
- data/examples/singleview/variable_defn_history.rb +0 -22
- data/examples/singleview/work_force.rb +0 -25
- data/examples/singleview/xpsi_addr_val_commtax21.rb +0 -24
- data/examples/singleview/xpsi_addr_val_msag.rb +0 -24
- data/examples/singleview/xpsi_addr_val_zip.rb +0 -14
- data/examples/singleview/xpsi_ne_batch.rb +0 -20
- data/examples/singleview/xpsi_product_batch.rb +0 -18
- data/examples/singleview/xpsi_product_status.rb +0 -14
- data/examples/singleview/xpsi_tax_error.rb +0 -34
- data/examples/singleview/xpsi_trt_revoke.rb +0 -68
- data/examples/singleview/xpsi_trt_revoke_prod_inst.rb +0 -12
- data/examples/singleview/xpsi_update_capture.rb +0 -35
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
|
|
3
|
+
require 'test_help'
|
|
4
|
+
|
|
5
|
+
class Test::Unit::TestCase
|
|
6
|
+
# Transactional fixtures accelerate your tests by wrapping each test method
|
|
7
|
+
# in a transaction that's rolled back on completion. This ensures that the
|
|
8
|
+
# test database remains unchanged so your fixtures don't have to be reloaded
|
|
9
|
+
# between every test method. Fewer database queries means faster tests.
|
|
10
|
+
#
|
|
11
|
+
# Read Mike Clark's excellent walkthrough at
|
|
12
|
+
# http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
|
|
13
|
+
#
|
|
14
|
+
# Every Active Record database supports transactions except MyISAM tables
|
|
15
|
+
# in MySQL. Turn off transactional fixtures in this case; however, if you
|
|
16
|
+
# don't care one way or the other, switching from MyISAM to InnoDB tables
|
|
17
|
+
# is recommended.
|
|
18
|
+
self.use_transactional_fixtures = true
|
|
19
|
+
|
|
20
|
+
# Instantiated fixtures are slow, but give you @david where otherwise you
|
|
21
|
+
# would need people(:david). If you don't want to migrate your existing
|
|
22
|
+
# test cases which use the @david style and don't mind the speed hit (each
|
|
23
|
+
# instantiated fixtures translates to a database query per test method),
|
|
24
|
+
# then set this back to true.
|
|
25
|
+
self.use_instantiated_fixtures = false
|
|
26
|
+
|
|
27
|
+
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
|
|
28
|
+
# If you need to control the loading order (due to foreign key constraints etc), you'll
|
|
29
|
+
# need to change this line to explicitly name the order you desire.
|
|
30
|
+
#
|
|
31
|
+
# Note: You'll currently still have to declare fixtures explicitly in integration tests
|
|
32
|
+
# -- they do not yet inherent this setting
|
|
33
|
+
fixtures :all
|
|
34
|
+
|
|
35
|
+
# Add more helper methods to be used by all tests here...
|
|
36
|
+
end
|
data/website/index.html
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
7
|
+
<title>
|
|
8
|
+
Magic Model Generator
|
|
9
|
+
</title>
|
|
10
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
|
11
|
+
<style>
|
|
12
|
+
|
|
13
|
+
</style>
|
|
14
|
+
<script type="text/javascript">
|
|
15
|
+
window.onload = function() {
|
|
16
|
+
settings = {
|
|
17
|
+
tl: { radius: 10 },
|
|
18
|
+
tr: { radius: 10 },
|
|
19
|
+
bl: { radius: 10 },
|
|
20
|
+
br: { radius: 10 },
|
|
21
|
+
antiAlias: true,
|
|
22
|
+
autoPad: true,
|
|
23
|
+
validTags: ["div"]
|
|
24
|
+
}
|
|
25
|
+
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
|
26
|
+
versionBox.applyCornersToAll();
|
|
27
|
+
}
|
|
28
|
+
</script>
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<div id="main">
|
|
32
|
+
<p><a href="/">↩ More Magic</a></p>
|
|
33
|
+
<h1 class=primary>Magic Model Generator</h1>
|
|
34
|
+
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/magicmodels"; return false'>
|
|
35
|
+
Get Version
|
|
36
|
+
<a href="http://rubyforge.org/projects/magicmodels" class="numbers">0.4.0</a>
|
|
37
|
+
</div>
|
|
38
|
+
<h1>./script/generate magic_model</h1>
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
<h2>What</h2>
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
<p>Imagine you get offered $5,000 to write a basic website/admin application on a legacy database that has 200 interconnected tables. You’ll need to add all the associations and validations based on the existing schema.</p>
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
<p>Imagine how long that would take! 1 day? 1 week? more?</p>
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
<p>Try 1 minute.</p>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
<p>The Magic Model Generator does all this for you automatically.</p>
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
<h2>Installing</h2>
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
<p><pre class="syntax"><span class="global">$ </span><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">magic_model_generator</span></pre></p>
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
<h2>Quick demo</h2>
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
<p>Create a rails application, and point it to your database.</p>
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
<pre>$ rails magic_show -d [mysql|sqlite|postgresql|oracle|etc|etc]
|
|
69
|
+
$ cd magic_show
|
|
70
|
+
$ cp database.yml.sample database.yml
|
|
71
|
+
and point it to your database.yml to your legacy database
|
|
72
|
+
</pre>
|
|
73
|
+
|
|
74
|
+
<p>In the video below I use the database created for the ActiveRecord test cases – <code>activerecord_unittest</code>. If you’ve never downloaded the activerecord gem, run:</p>
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
<pre>$ rake build_[mysql|sqlite|postgresql|oracle|etc|etc]_databases
|
|
78
|
+
$ rake test_[mysql|sqlite|postgresql|oracle|etc|etc]</pre>
|
|
79
|
+
|
|
80
|
+
<p>Now install the magic_model_generator gem:</p>
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
<pre>$ sudo gem install magic_model_generator</pre>
|
|
84
|
+
|
|
85
|
+
<p>By the way, that’s all the preparation I did for the video.</p>
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
<p>Now recreate the <code>schema.rb</code> file and the <code>schema_info</code> database table via</p>
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
<pre>$ rake db:migrate</pre>.
|
|
92
|
+
|
|
93
|
+
<p>Finally, run the generator:</p>
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
<pre>$ ./script/generate magic_model</pre>
|
|
97
|
+
|
|
98
|
+
<h3>Coming</h3>
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
<p>Currently rails_generators cannot merge results into existing files, only skip or overwrite. I am investigating a fix for this so that you can use the <span class="caps">MMG</span> for iterative development.</p>
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
<h2>Related articles</h2>
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
<ul>
|
|
108
|
+
<li>Original release at RejectConf -</li>
|
|
109
|
+
</ul>
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
<h3>Similar ideas</h3>
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
<ul>
|
|
116
|
+
<li>Generate models from <a href="http://www.web2expo.com/presentations/rails2007/burkhart_soren.pdf"><span class="caps">XSD</span> files</a> by Soren Burkhart at <a href="http://www.web2expo.com/pub/w/51/presentations.html">RailsConf2007</a></li>
|
|
117
|
+
</ul>
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
<h3>The Magic Show at RejectConf</h3>
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
<embed style="width:500px; height:426px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-603944638448214790&hl=en" flashvars=""> </embed>
|
|
124
|
+
|
|
125
|
+
<h2>Dr Nic’s Blog</h2>
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
<p><a href="http://www.drnicwilliams.com">http://www.drnicwilliams.com</a> – for future announcements and
|
|
129
|
+
other stories and things.</p>
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
<h2>Forum</h2>
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
<p>Discussion about the Magic Multi-Connections is on the Magic Models forum:</p>
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
<p><a href="http://groups.google.com/group/magicmodels">http://groups.google.com/group/magicmodels</a></p>
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
<h2>Licence</h2>
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
<p>This code is free to use under the terms of the <span class="caps">MIT</span> licence.</p>
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
<h2>Contact</h2>
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
<p>Comments are welcome. Send an email to <a href="mailto:drnicwilliams@gmail.com">Dr Nic Williams</a>.</p>
|
|
151
|
+
<p class="coda">
|
|
152
|
+
<a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 22nd May 2007<br>
|
|
153
|
+
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
|
154
|
+
</p>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
|
|
158
|
+
</script>
|
|
159
|
+
<script type="text/javascript">
|
|
160
|
+
_uacct = "UA-567811-2";
|
|
161
|
+
urchinTracker();
|
|
162
|
+
</script>
|
|
163
|
+
|
|
164
|
+
</body>
|
|
165
|
+
</html>
|
data/website/index.txt
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
h1. Magic Model Generator
|
|
2
|
+
|
|
3
|
+
h1. ./script/generate magic_model
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
h2. What
|
|
7
|
+
|
|
8
|
+
Imagine you get offered $5,000 to write a basic website/admin application on a legacy database that has 200 interconnected tables. You'll need to add all the associations and validations based on the existing schema.
|
|
9
|
+
|
|
10
|
+
Imagine how long that would take! 1 day? 1 week? more?
|
|
11
|
+
|
|
12
|
+
Try 1 minute.
|
|
13
|
+
|
|
14
|
+
The Magic Model Generator does all this for you automatically.
|
|
15
|
+
|
|
16
|
+
h2. Installing
|
|
17
|
+
|
|
18
|
+
<pre syntax="ruby">$ sudo gem install magic_model_generator</pre>
|
|
19
|
+
|
|
20
|
+
h2. Quick demo
|
|
21
|
+
|
|
22
|
+
Create a rails application, and point it to your database.
|
|
23
|
+
|
|
24
|
+
<pre>$ rails magic_show -d [mysql|sqlite|postgresql|oracle|etc|etc]
|
|
25
|
+
$ cd magic_show
|
|
26
|
+
$ cp database.yml.sample database.yml
|
|
27
|
+
and point it to your database.yml to your legacy database
|
|
28
|
+
</pre>
|
|
29
|
+
|
|
30
|
+
In the video below I use the database created for the ActiveRecord test cases – <code>activerecord_unittest</code>. If you’ve never downloaded the activerecord gem, run:
|
|
31
|
+
|
|
32
|
+
<pre>$ rake build_[mysql|sqlite|postgresql|oracle|etc|etc]_databases
|
|
33
|
+
$ rake test_[mysql|sqlite|postgresql|oracle|etc|etc]</pre>
|
|
34
|
+
|
|
35
|
+
Now install the magic_model_generator gem:
|
|
36
|
+
|
|
37
|
+
<pre>$ sudo gem install magic_model_generator</pre>
|
|
38
|
+
|
|
39
|
+
By the way, that’s all the preparation I did for the video.
|
|
40
|
+
|
|
41
|
+
Now recreate the <code>schema.rb</code> file and the <code>schema_info</code> database table via
|
|
42
|
+
|
|
43
|
+
<pre>$ rake db:migrate</pre>.
|
|
44
|
+
|
|
45
|
+
Finally, run the generator:
|
|
46
|
+
|
|
47
|
+
<pre>$ ./script/generate magic_model</pre>
|
|
48
|
+
|
|
49
|
+
h3. Coming
|
|
50
|
+
|
|
51
|
+
Currently rails_generators cannot merge results into existing files, only skip or overwrite. I am investigating a fix for this so that you can use the MMG for iterative development.
|
|
52
|
+
|
|
53
|
+
h2. Related articles
|
|
54
|
+
|
|
55
|
+
* Original release at RejectConf -
|
|
56
|
+
|
|
57
|
+
h3. Similar ideas
|
|
58
|
+
|
|
59
|
+
* Generate models from "XSD files":http://www.web2expo.com/presentations/rails2007/burkhart_soren.pdf by Soren Burkhart at "RailsConf2007":http://www.web2expo.com/pub/w/51/presentations.html
|
|
60
|
+
|
|
61
|
+
h3. The Magic Show at RejectConf
|
|
62
|
+
|
|
63
|
+
<embed style="width:500px; height:426px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-603944638448214790&hl=en" flashvars=""> </embed>
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
h2. Dr Nic's Blog
|
|
67
|
+
|
|
68
|
+
"http://www.drnicwilliams.com":http://www.drnicwilliams.com - for future announcements and
|
|
69
|
+
other stories and things.
|
|
70
|
+
|
|
71
|
+
h2. Forum
|
|
72
|
+
|
|
73
|
+
Discussion about the Magic Multi-Connections is on the Magic Models forum:
|
|
74
|
+
|
|
75
|
+
"http://groups.google.com/group/magicmodels":http://groups.google.com/group/magicmodels
|
|
76
|
+
|
|
77
|
+
h2. Licence
|
|
78
|
+
|
|
79
|
+
This code is free to use under the terms of the MIT licence.
|
|
80
|
+
|
|
81
|
+
h2. Contact
|
|
82
|
+
|
|
83
|
+
Comments are welcome. Send an email to "Dr Nic Williams":mailto:drnicwilliams@gmail.com.
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
|
|
2
|
+
/****************************************************************
|
|
3
|
+
* *
|
|
4
|
+
* curvyCorners *
|
|
5
|
+
* ------------ *
|
|
6
|
+
* *
|
|
7
|
+
* This script generates rounded corners for your divs. *
|
|
8
|
+
* *
|
|
9
|
+
* Version 1.2.9 *
|
|
10
|
+
* Copyright (c) 2006 Cameron Cooke *
|
|
11
|
+
* By: Cameron Cooke and Tim Hutchison. *
|
|
12
|
+
* *
|
|
13
|
+
* *
|
|
14
|
+
* Website: http://www.curvycorners.net *
|
|
15
|
+
* Email: info@totalinfinity.com *
|
|
16
|
+
* Forum: http://www.curvycorners.net/forum/ *
|
|
17
|
+
* *
|
|
18
|
+
* *
|
|
19
|
+
* This library is free software; you can redistribute *
|
|
20
|
+
* it and/or modify it under the terms of the GNU *
|
|
21
|
+
* Lesser General Public License as published by the *
|
|
22
|
+
* Free Software Foundation; either version 2.1 of the *
|
|
23
|
+
* License, or (at your option) any later version. *
|
|
24
|
+
* *
|
|
25
|
+
* This library is distributed in the hope that it will *
|
|
26
|
+
* be useful, but WITHOUT ANY WARRANTY; without even the *
|
|
27
|
+
* implied warranty of MERCHANTABILITY or FITNESS FOR A *
|
|
28
|
+
* PARTICULAR PURPOSE. See the GNU Lesser General Public *
|
|
29
|
+
* License for more details. *
|
|
30
|
+
* *
|
|
31
|
+
* You should have received a copy of the GNU Lesser *
|
|
32
|
+
* General Public License along with this library; *
|
|
33
|
+
* Inc., 59 Temple Place, Suite 330, Boston, *
|
|
34
|
+
* MA 02111-1307 USA *
|
|
35
|
+
* *
|
|
36
|
+
****************************************************************/
|
|
37
|
+
|
|
38
|
+
var isIE = navigator.userAgent.toLowerCase().indexOf("msie") > -1; var isMoz = document.implementation && document.implementation.createDocument; var isSafari = ((navigator.userAgent.toLowerCase().indexOf('safari')!=-1)&&(navigator.userAgent.toLowerCase().indexOf('mac')!=-1))?true:false; function curvyCorners()
|
|
39
|
+
{ if(typeof(arguments[0]) != "object") throw newCurvyError("First parameter of curvyCorners() must be an object."); if(typeof(arguments[1]) != "object" && typeof(arguments[1]) != "string") throw newCurvyError("Second parameter of curvyCorners() must be an object or a class name."); if(typeof(arguments[1]) == "string")
|
|
40
|
+
{ var startIndex = 0; var boxCol = getElementsByClass(arguments[1]);}
|
|
41
|
+
else
|
|
42
|
+
{ var startIndex = 1; var boxCol = arguments;}
|
|
43
|
+
var curvyCornersCol = new Array(); if(arguments[0].validTags)
|
|
44
|
+
var validElements = arguments[0].validTags; else
|
|
45
|
+
var validElements = ["div"]; for(var i = startIndex, j = boxCol.length; i < j; i++)
|
|
46
|
+
{ var currentTag = boxCol[i].tagName.toLowerCase(); if(inArray(validElements, currentTag) !== false)
|
|
47
|
+
{ curvyCornersCol[curvyCornersCol.length] = new curvyObject(arguments[0], boxCol[i]);}
|
|
48
|
+
}
|
|
49
|
+
this.objects = curvyCornersCol; this.applyCornersToAll = function()
|
|
50
|
+
{ for(var x = 0, k = this.objects.length; x < k; x++)
|
|
51
|
+
{ this.objects[x].applyCorners();}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function curvyObject()
|
|
55
|
+
{ this.box = arguments[1]; this.settings = arguments[0]; this.topContainer = null; this.bottomContainer = null; this.masterCorners = new Array(); this.contentDIV = null; var boxHeight = get_style(this.box, "height", "height"); var boxWidth = get_style(this.box, "width", "width"); var borderWidth = get_style(this.box, "borderTopWidth", "border-top-width"); var borderColour = get_style(this.box, "borderTopColor", "border-top-color"); var boxColour = get_style(this.box, "backgroundColor", "background-color"); var backgroundImage = get_style(this.box, "backgroundImage", "background-image"); var boxPosition = get_style(this.box, "position", "position"); var boxPadding = get_style(this.box, "paddingTop", "padding-top"); this.boxHeight = parseInt(((boxHeight != "" && boxHeight != "auto" && boxHeight.indexOf("%") == -1)? boxHeight.substring(0, boxHeight.indexOf("px")) : this.box.scrollHeight)); this.boxWidth = parseInt(((boxWidth != "" && boxWidth != "auto" && boxWidth.indexOf("%") == -1)? boxWidth.substring(0, boxWidth.indexOf("px")) : this.box.scrollWidth)); this.borderWidth = parseInt(((borderWidth != "" && borderWidth.indexOf("px") !== -1)? borderWidth.slice(0, borderWidth.indexOf("px")) : 0)); this.boxColour = format_colour(boxColour); this.boxPadding = parseInt(((boxPadding != "" && boxPadding.indexOf("px") !== -1)? boxPadding.slice(0, boxPadding.indexOf("px")) : 0)); this.borderColour = format_colour(borderColour); this.borderString = this.borderWidth + "px" + " solid " + this.borderColour; this.backgroundImage = ((backgroundImage != "none")? backgroundImage : ""); this.boxContent = this.box.innerHTML; if(boxPosition != "absolute") this.box.style.position = "relative"; this.box.style.padding = "0px"; if(isIE && boxWidth == "auto" && boxHeight == "auto") this.box.style.width = "100%"; if(this.settings.autoPad == true && this.boxPadding > 0)
|
|
56
|
+
this.box.innerHTML = ""; this.applyCorners = function()
|
|
57
|
+
{ for(var t = 0; t < 2; t++)
|
|
58
|
+
{ switch(t)
|
|
59
|
+
{ case 0:
|
|
60
|
+
if(this.settings.tl || this.settings.tr)
|
|
61
|
+
{ var newMainContainer = document.createElement("DIV"); newMainContainer.style.width = "100%"; newMainContainer.style.fontSize = "1px"; newMainContainer.style.overflow = "hidden"; newMainContainer.style.position = "absolute"; newMainContainer.style.paddingLeft = this.borderWidth + "px"; newMainContainer.style.paddingRight = this.borderWidth + "px"; var topMaxRadius = Math.max(this.settings.tl ? this.settings.tl.radius : 0, this.settings.tr ? this.settings.tr.radius : 0); newMainContainer.style.height = topMaxRadius + "px"; newMainContainer.style.top = 0 - topMaxRadius + "px"; newMainContainer.style.left = 0 - this.borderWidth + "px"; this.topContainer = this.box.appendChild(newMainContainer);}
|
|
62
|
+
break; case 1:
|
|
63
|
+
if(this.settings.bl || this.settings.br)
|
|
64
|
+
{ var newMainContainer = document.createElement("DIV"); newMainContainer.style.width = "100%"; newMainContainer.style.fontSize = "1px"; newMainContainer.style.overflow = "hidden"; newMainContainer.style.position = "absolute"; newMainContainer.style.paddingLeft = this.borderWidth + "px"; newMainContainer.style.paddingRight = this.borderWidth + "px"; var botMaxRadius = Math.max(this.settings.bl ? this.settings.bl.radius : 0, this.settings.br ? this.settings.br.radius : 0); newMainContainer.style.height = botMaxRadius + "px"; newMainContainer.style.bottom = 0 - botMaxRadius + "px"; newMainContainer.style.left = 0 - this.borderWidth + "px"; this.bottomContainer = this.box.appendChild(newMainContainer);}
|
|
65
|
+
break;}
|
|
66
|
+
}
|
|
67
|
+
if(this.topContainer) this.box.style.borderTopWidth = "0px"; if(this.bottomContainer) this.box.style.borderBottomWidth = "0px"; var corners = ["tr", "tl", "br", "bl"]; for(var i in corners)
|
|
68
|
+
{ if(i > -1 < 4)
|
|
69
|
+
{ var cc = corners[i]; if(!this.settings[cc])
|
|
70
|
+
{ if(((cc == "tr" || cc == "tl") && this.topContainer != null) || ((cc == "br" || cc == "bl") && this.bottomContainer != null))
|
|
71
|
+
{ var newCorner = document.createElement("DIV"); newCorner.style.position = "relative"; newCorner.style.fontSize = "1px"; newCorner.style.overflow = "hidden"; if(this.backgroundImage == "")
|
|
72
|
+
newCorner.style.backgroundColor = this.boxColour; else
|
|
73
|
+
newCorner.style.backgroundImage = this.backgroundImage; switch(cc)
|
|
74
|
+
{ case "tl":
|
|
75
|
+
newCorner.style.height = topMaxRadius - this.borderWidth + "px"; newCorner.style.marginRight = this.settings.tr.radius - (this.borderWidth*2) + "px"; newCorner.style.borderLeft = this.borderString; newCorner.style.borderTop = this.borderString; newCorner.style.left = -this.borderWidth + "px"; break; case "tr":
|
|
76
|
+
newCorner.style.height = topMaxRadius - this.borderWidth + "px"; newCorner.style.marginLeft = this.settings.tl.radius - (this.borderWidth*2) + "px"; newCorner.style.borderRight = this.borderString; newCorner.style.borderTop = this.borderString; newCorner.style.backgroundPosition = "-" + (topMaxRadius + this.borderWidth) + "px 0px"; newCorner.style.left = this.borderWidth + "px"; break; case "bl":
|
|
77
|
+
newCorner.style.height = botMaxRadius - this.borderWidth + "px"; newCorner.style.marginRight = this.settings.br.radius - (this.borderWidth*2) + "px"; newCorner.style.borderLeft = this.borderString; newCorner.style.borderBottom = this.borderString; newCorner.style.left = -this.borderWidth + "px"; newCorner.style.backgroundPosition = "-" + (this.borderWidth) + "px -" + (this.boxHeight + (botMaxRadius + this.borderWidth)) + "px"; break; case "br":
|
|
78
|
+
newCorner.style.height = botMaxRadius - this.borderWidth + "px"; newCorner.style.marginLeft = this.settings.bl.radius - (this.borderWidth*2) + "px"; newCorner.style.borderRight = this.borderString; newCorner.style.borderBottom = this.borderString; newCorner.style.left = this.borderWidth + "px"
|
|
79
|
+
newCorner.style.backgroundPosition = "-" + (botMaxRadius + this.borderWidth) + "px -" + (this.boxHeight + (botMaxRadius + this.borderWidth)) + "px"; break;}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else
|
|
83
|
+
{ if(this.masterCorners[this.settings[cc].radius])
|
|
84
|
+
{ var newCorner = this.masterCorners[this.settings[cc].radius].cloneNode(true);}
|
|
85
|
+
else
|
|
86
|
+
{ var newCorner = document.createElement("DIV"); newCorner.style.height = this.settings[cc].radius + "px"; newCorner.style.width = this.settings[cc].radius + "px"; newCorner.style.position = "absolute"; newCorner.style.fontSize = "1px"; newCorner.style.overflow = "hidden"; var borderRadius = parseInt(this.settings[cc].radius - this.borderWidth); for(var intx = 0, j = this.settings[cc].radius; intx < j; intx++)
|
|
87
|
+
{ if((intx +1) >= borderRadius)
|
|
88
|
+
var y1 = -1; else
|
|
89
|
+
var y1 = (Math.floor(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow((intx+1), 2))) - 1); if(borderRadius != j)
|
|
90
|
+
{ if((intx) >= borderRadius)
|
|
91
|
+
var y2 = -1; else
|
|
92
|
+
var y2 = Math.ceil(Math.sqrt(Math.pow(borderRadius,2) - Math.pow(intx, 2))); if((intx+1) >= j)
|
|
93
|
+
var y3 = -1; else
|
|
94
|
+
var y3 = (Math.floor(Math.sqrt(Math.pow(j ,2) - Math.pow((intx+1), 2))) - 1);}
|
|
95
|
+
if((intx) >= j)
|
|
96
|
+
var y4 = -1; else
|
|
97
|
+
var y4 = Math.ceil(Math.sqrt(Math.pow(j ,2) - Math.pow(intx, 2))); if(y1 > -1) this.drawPixel(intx, 0, this.boxColour, 100, (y1+1), newCorner, -1, this.settings[cc].radius); if(borderRadius != j)
|
|
98
|
+
{ for(var inty = (y1 + 1); inty < y2; inty++)
|
|
99
|
+
{ if(this.settings.antiAlias)
|
|
100
|
+
{ if(this.backgroundImage != "")
|
|
101
|
+
{ var borderFract = (pixelFraction(intx, inty, borderRadius) * 100); if(borderFract < 30)
|
|
102
|
+
{ this.drawPixel(intx, inty, this.borderColour, 100, 1, newCorner, 0, this.settings[cc].radius);}
|
|
103
|
+
else
|
|
104
|
+
{ this.drawPixel(intx, inty, this.borderColour, 100, 1, newCorner, -1, this.settings[cc].radius);}
|
|
105
|
+
}
|
|
106
|
+
else
|
|
107
|
+
{ var pixelcolour = BlendColour(this.boxColour, this.borderColour, pixelFraction(intx, inty, borderRadius)); this.drawPixel(intx, inty, pixelcolour, 100, 1, newCorner, 0, this.settings[cc].radius, cc);}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if(this.settings.antiAlias)
|
|
111
|
+
{ if(y3 >= y2)
|
|
112
|
+
{ if (y2 == -1) y2 = 0; this.drawPixel(intx, y2, this.borderColour, 100, (y3 - y2 + 1), newCorner, 0, 0);}
|
|
113
|
+
}
|
|
114
|
+
else
|
|
115
|
+
{ if(y3 >= y1)
|
|
116
|
+
{ this.drawPixel(intx, (y1 + 1), this.borderColour, 100, (y3 - y1), newCorner, 0, 0);}
|
|
117
|
+
}
|
|
118
|
+
var outsideColour = this.borderColour;}
|
|
119
|
+
else
|
|
120
|
+
{ var outsideColour = this.boxColour; var y3 = y1;}
|
|
121
|
+
if(this.settings.antiAlias)
|
|
122
|
+
{ for(var inty = (y3 + 1); inty < y4; inty++)
|
|
123
|
+
{ this.drawPixel(intx, inty, outsideColour, (pixelFraction(intx, inty , j) * 100), 1, newCorner, ((this.borderWidth > 0)? 0 : -1), this.settings[cc].radius);}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
this.masterCorners[this.settings[cc].radius] = newCorner.cloneNode(true);}
|
|
127
|
+
if(cc != "br")
|
|
128
|
+
{ for(var t = 0, k = newCorner.childNodes.length; t < k; t++)
|
|
129
|
+
{ var pixelBar = newCorner.childNodes[t]; var pixelBarTop = parseInt(pixelBar.style.top.substring(0, pixelBar.style.top.indexOf("px"))); var pixelBarLeft = parseInt(pixelBar.style.left.substring(0, pixelBar.style.left.indexOf("px"))); var pixelBarHeight = parseInt(pixelBar.style.height.substring(0, pixelBar.style.height.indexOf("px"))); if(cc == "tl" || cc == "bl"){ pixelBar.style.left = this.settings[cc].radius -pixelBarLeft -1 + "px";}
|
|
130
|
+
if(cc == "tr" || cc == "tl"){ pixelBar.style.top = this.settings[cc].radius -pixelBarHeight -pixelBarTop + "px";}
|
|
131
|
+
switch(cc)
|
|
132
|
+
{ case "tr":
|
|
133
|
+
pixelBar.style.backgroundPosition = "-" + Math.abs((this.boxWidth - this.settings[cc].radius + this.borderWidth) + pixelBarLeft) + "px -" + Math.abs(this.settings[cc].radius -pixelBarHeight -pixelBarTop - this.borderWidth) + "px"; break; case "tl":
|
|
134
|
+
pixelBar.style.backgroundPosition = "-" + Math.abs((this.settings[cc].radius -pixelBarLeft -1) - this.borderWidth) + "px -" + Math.abs(this.settings[cc].radius -pixelBarHeight -pixelBarTop - this.borderWidth) + "px"; break; case "bl":
|
|
135
|
+
pixelBar.style.backgroundPosition = "-" + Math.abs((this.settings[cc].radius -pixelBarLeft -1) - this.borderWidth) + "px -" + Math.abs((this.boxHeight + this.settings[cc].radius + pixelBarTop) -this.borderWidth) + "px"; break;}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if(newCorner)
|
|
140
|
+
{ switch(cc)
|
|
141
|
+
{ case "tl":
|
|
142
|
+
if(newCorner.style.position == "absolute") newCorner.style.top = "0px"; if(newCorner.style.position == "absolute") newCorner.style.left = "0px"; if(this.topContainer) this.topContainer.appendChild(newCorner); break; case "tr":
|
|
143
|
+
if(newCorner.style.position == "absolute") newCorner.style.top = "0px"; if(newCorner.style.position == "absolute") newCorner.style.right = "0px"; if(this.topContainer) this.topContainer.appendChild(newCorner); break; case "bl":
|
|
144
|
+
if(newCorner.style.position == "absolute") newCorner.style.bottom = "0px"; if(newCorner.style.position == "absolute") newCorner.style.left = "0px"; if(this.bottomContainer) this.bottomContainer.appendChild(newCorner); break; case "br":
|
|
145
|
+
if(newCorner.style.position == "absolute") newCorner.style.bottom = "0px"; if(newCorner.style.position == "absolute") newCorner.style.right = "0px"; if(this.bottomContainer) this.bottomContainer.appendChild(newCorner); break;}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
var radiusDiff = new Array(); radiusDiff["t"] = Math.abs(this.settings.tl.radius - this.settings.tr.radius)
|
|
150
|
+
radiusDiff["b"] = Math.abs(this.settings.bl.radius - this.settings.br.radius); for(z in radiusDiff)
|
|
151
|
+
{ if(z == "t" || z == "b")
|
|
152
|
+
{ if(radiusDiff[z])
|
|
153
|
+
{ var smallerCornerType = ((this.settings[z + "l"].radius < this.settings[z + "r"].radius)? z +"l" : z +"r"); var newFiller = document.createElement("DIV"); newFiller.style.height = radiusDiff[z] + "px"; newFiller.style.width = this.settings[smallerCornerType].radius+ "px"
|
|
154
|
+
newFiller.style.position = "absolute"; newFiller.style.fontSize = "1px"; newFiller.style.overflow = "hidden"; newFiller.style.backgroundColor = this.boxColour; switch(smallerCornerType)
|
|
155
|
+
{ case "tl":
|
|
156
|
+
newFiller.style.bottom = "0px"; newFiller.style.left = "0px"; newFiller.style.borderLeft = this.borderString; this.topContainer.appendChild(newFiller); break; case "tr":
|
|
157
|
+
newFiller.style.bottom = "0px"; newFiller.style.right = "0px"; newFiller.style.borderRight = this.borderString; this.topContainer.appendChild(newFiller); break; case "bl":
|
|
158
|
+
newFiller.style.top = "0px"; newFiller.style.left = "0px"; newFiller.style.borderLeft = this.borderString; this.bottomContainer.appendChild(newFiller); break; case "br":
|
|
159
|
+
newFiller.style.top = "0px"; newFiller.style.right = "0px"; newFiller.style.borderRight = this.borderString; this.bottomContainer.appendChild(newFiller); break;}
|
|
160
|
+
}
|
|
161
|
+
var newFillerBar = document.createElement("DIV"); newFillerBar.style.position = "relative"; newFillerBar.style.fontSize = "1px"; newFillerBar.style.overflow = "hidden"; newFillerBar.style.backgroundColor = this.boxColour; newFillerBar.style.backgroundImage = this.backgroundImage; switch(z)
|
|
162
|
+
{ case "t":
|
|
163
|
+
if(this.topContainer)
|
|
164
|
+
{ if(this.settings.tl.radius && this.settings.tr.radius)
|
|
165
|
+
{ newFillerBar.style.height = topMaxRadius - this.borderWidth + "px"; newFillerBar.style.marginLeft = this.settings.tl.radius - this.borderWidth + "px"; newFillerBar.style.marginRight = this.settings.tr.radius - this.borderWidth + "px"; newFillerBar.style.borderTop = this.borderString; if(this.backgroundImage != "")
|
|
166
|
+
newFillerBar.style.backgroundPosition = "-" + (topMaxRadius + this.borderWidth) + "px 0px"; this.topContainer.appendChild(newFillerBar);}
|
|
167
|
+
this.box.style.backgroundPosition = "0px -" + (topMaxRadius - this.borderWidth) + "px";}
|
|
168
|
+
break; case "b":
|
|
169
|
+
if(this.bottomContainer)
|
|
170
|
+
{ if(this.settings.bl.radius && this.settings.br.radius)
|
|
171
|
+
{ newFillerBar.style.height = botMaxRadius - this.borderWidth + "px"; newFillerBar.style.marginLeft = this.settings.bl.radius - this.borderWidth + "px"; newFillerBar.style.marginRight = this.settings.br.radius - this.borderWidth + "px"; newFillerBar.style.borderBottom = this.borderString; if(this.backgroundImage != "")
|
|
172
|
+
newFillerBar.style.backgroundPosition = "-" + (botMaxRadius + this.borderWidth) + "px -" + (this.boxHeight + (topMaxRadius + this.borderWidth)) + "px"; this.bottomContainer.appendChild(newFillerBar);}
|
|
173
|
+
}
|
|
174
|
+
break;}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if(this.settings.autoPad == true && this.boxPadding > 0)
|
|
178
|
+
{ var contentContainer = document.createElement("DIV"); contentContainer.style.position = "relative"; contentContainer.innerHTML = this.boxContent; contentContainer.className = "autoPadDiv"; var topPadding = Math.abs(topMaxRadius - this.boxPadding); var botPadding = Math.abs(botMaxRadius - this.boxPadding); if(topMaxRadius < this.boxPadding)
|
|
179
|
+
contentContainer.style.paddingTop = topPadding + "px"; if(botMaxRadius < this.boxPadding)
|
|
180
|
+
contentContainer.style.paddingBottom = botMaxRadius + "px"; contentContainer.style.paddingLeft = this.boxPadding + "px"; contentContainer.style.paddingRight = this.boxPadding + "px"; this.contentDIV = this.box.appendChild(contentContainer);}
|
|
181
|
+
}
|
|
182
|
+
this.drawPixel = function(intx, inty, colour, transAmount, height, newCorner, image, cornerRadius)
|
|
183
|
+
{ var pixel = document.createElement("DIV"); pixel.style.height = height + "px"; pixel.style.width = "1px"; pixel.style.position = "absolute"; pixel.style.fontSize = "1px"; pixel.style.overflow = "hidden"; var topMaxRadius = Math.max(this.settings["tr"].radius, this.settings["tl"].radius); if(image == -1 && this.backgroundImage != "")
|
|
184
|
+
{ pixel.style.backgroundImage = this.backgroundImage; pixel.style.backgroundPosition = "-" + (this.boxWidth - (cornerRadius - intx) + this.borderWidth) + "px -" + ((this.boxHeight + topMaxRadius + inty) -this.borderWidth) + "px";}
|
|
185
|
+
else
|
|
186
|
+
{ pixel.style.backgroundColor = colour;}
|
|
187
|
+
if (transAmount != 100)
|
|
188
|
+
setOpacity(pixel, transAmount); pixel.style.top = inty + "px"; pixel.style.left = intx + "px"; newCorner.appendChild(pixel);}
|
|
189
|
+
}
|
|
190
|
+
function insertAfter(parent, node, referenceNode)
|
|
191
|
+
{ parent.insertBefore(node, referenceNode.nextSibling);}
|
|
192
|
+
function BlendColour(Col1, Col2, Col1Fraction)
|
|
193
|
+
{ var red1 = parseInt(Col1.substr(1,2),16); var green1 = parseInt(Col1.substr(3,2),16); var blue1 = parseInt(Col1.substr(5,2),16); var red2 = parseInt(Col2.substr(1,2),16); var green2 = parseInt(Col2.substr(3,2),16); var blue2 = parseInt(Col2.substr(5,2),16); if(Col1Fraction > 1 || Col1Fraction < 0) Col1Fraction = 1; var endRed = Math.round((red1 * Col1Fraction) + (red2 * (1 - Col1Fraction))); if(endRed > 255) endRed = 255; if(endRed < 0) endRed = 0; var endGreen = Math.round((green1 * Col1Fraction) + (green2 * (1 - Col1Fraction))); if(endGreen > 255) endGreen = 255; if(endGreen < 0) endGreen = 0; var endBlue = Math.round((blue1 * Col1Fraction) + (blue2 * (1 - Col1Fraction))); if(endBlue > 255) endBlue = 255; if(endBlue < 0) endBlue = 0; return "#" + IntToHex(endRed)+ IntToHex(endGreen)+ IntToHex(endBlue);}
|
|
194
|
+
function IntToHex(strNum)
|
|
195
|
+
{ base = strNum / 16; rem = strNum % 16; base = base - (rem / 16); baseS = MakeHex(base); remS = MakeHex(rem); return baseS + '' + remS;}
|
|
196
|
+
function MakeHex(x)
|
|
197
|
+
{ if((x >= 0) && (x <= 9))
|
|
198
|
+
{ return x;}
|
|
199
|
+
else
|
|
200
|
+
{ switch(x)
|
|
201
|
+
{ case 10: return "A"; case 11: return "B"; case 12: return "C"; case 13: return "D"; case 14: return "E"; case 15: return "F";}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function pixelFraction(x, y, r)
|
|
205
|
+
{ var pixelfraction = 0; var xvalues = new Array(1); var yvalues = new Array(1); var point = 0; var whatsides = ""; var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(x,2))); if ((intersect >= y) && (intersect < (y+1)))
|
|
206
|
+
{ whatsides = "Left"; xvalues[point] = 0; yvalues[point] = intersect - y; point = point + 1;}
|
|
207
|
+
var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(y+1,2))); if ((intersect >= x) && (intersect < (x+1)))
|
|
208
|
+
{ whatsides = whatsides + "Top"; xvalues[point] = intersect - x; yvalues[point] = 1; point = point + 1;}
|
|
209
|
+
var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(x+1,2))); if ((intersect >= y) && (intersect < (y+1)))
|
|
210
|
+
{ whatsides = whatsides + "Right"; xvalues[point] = 1; yvalues[point] = intersect - y; point = point + 1;}
|
|
211
|
+
var intersect = Math.sqrt((Math.pow(r,2) - Math.pow(y,2))); if ((intersect >= x) && (intersect < (x+1)))
|
|
212
|
+
{ whatsides = whatsides + "Bottom"; xvalues[point] = intersect - x; yvalues[point] = 0;}
|
|
213
|
+
switch (whatsides)
|
|
214
|
+
{ case "LeftRight":
|
|
215
|
+
pixelfraction = Math.min(yvalues[0],yvalues[1]) + ((Math.max(yvalues[0],yvalues[1]) - Math.min(yvalues[0],yvalues[1]))/2); break; case "TopRight":
|
|
216
|
+
pixelfraction = 1-(((1-xvalues[0])*(1-yvalues[1]))/2); break; case "TopBottom":
|
|
217
|
+
pixelfraction = Math.min(xvalues[0],xvalues[1]) + ((Math.max(xvalues[0],xvalues[1]) - Math.min(xvalues[0],xvalues[1]))/2); break; case "LeftBottom":
|
|
218
|
+
pixelfraction = (yvalues[0]*xvalues[1])/2; break; default:
|
|
219
|
+
pixelfraction = 1;}
|
|
220
|
+
return pixelfraction;}
|
|
221
|
+
function rgb2Hex(rgbColour)
|
|
222
|
+
{ try{ var rgbArray = rgb2Array(rgbColour); var red = parseInt(rgbArray[0]); var green = parseInt(rgbArray[1]); var blue = parseInt(rgbArray[2]); var hexColour = "#" + IntToHex(red) + IntToHex(green) + IntToHex(blue);}
|
|
223
|
+
catch(e){ alert("There was an error converting the RGB value to Hexadecimal in function rgb2Hex");}
|
|
224
|
+
return hexColour;}
|
|
225
|
+
function rgb2Array(rgbColour)
|
|
226
|
+
{ var rgbValues = rgbColour.substring(4, rgbColour.indexOf(")")); var rgbArray = rgbValues.split(", "); return rgbArray;}
|
|
227
|
+
function setOpacity(obj, opacity)
|
|
228
|
+
{ opacity = (opacity == 100)?99.999:opacity; if(isSafari && obj.tagName != "IFRAME")
|
|
229
|
+
{ var rgbArray = rgb2Array(obj.style.backgroundColor); var red = parseInt(rgbArray[0]); var green = parseInt(rgbArray[1]); var blue = parseInt(rgbArray[2]); obj.style.backgroundColor = "rgba(" + red + ", " + green + ", " + blue + ", " + opacity/100 + ")";}
|
|
230
|
+
else if(typeof(obj.style.opacity) != "undefined")
|
|
231
|
+
{ obj.style.opacity = opacity/100;}
|
|
232
|
+
else if(typeof(obj.style.MozOpacity) != "undefined")
|
|
233
|
+
{ obj.style.MozOpacity = opacity/100;}
|
|
234
|
+
else if(typeof(obj.style.filter) != "undefined")
|
|
235
|
+
{ obj.style.filter = "alpha(opacity:" + opacity + ")";}
|
|
236
|
+
else if(typeof(obj.style.KHTMLOpacity) != "undefined")
|
|
237
|
+
{ obj.style.KHTMLOpacity = opacity/100;}
|
|
238
|
+
}
|
|
239
|
+
function inArray(array, value)
|
|
240
|
+
{ for(var i = 0; i < array.length; i++){ if (array[i] === value) return i;}
|
|
241
|
+
return false;}
|
|
242
|
+
function inArrayKey(array, value)
|
|
243
|
+
{ for(key in array){ if(key === value) return true;}
|
|
244
|
+
return false;}
|
|
245
|
+
function addEvent(elm, evType, fn, useCapture) { if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true;}
|
|
246
|
+
else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return r;}
|
|
247
|
+
else { elm['on' + evType] = fn;}
|
|
248
|
+
}
|
|
249
|
+
function removeEvent(obj, evType, fn, useCapture){ if (obj.removeEventListener){ obj.removeEventListener(evType, fn, useCapture); return true;} else if (obj.detachEvent){ var r = obj.detachEvent("on"+evType, fn); return r;} else { alert("Handler could not be removed");}
|
|
250
|
+
}
|
|
251
|
+
function format_colour(colour)
|
|
252
|
+
{ var returnColour = "#ffffff"; if(colour != "" && colour != "transparent")
|
|
253
|
+
{ if(colour.substr(0, 3) == "rgb")
|
|
254
|
+
{ returnColour = rgb2Hex(colour);}
|
|
255
|
+
else if(colour.length == 4)
|
|
256
|
+
{ returnColour = "#" + colour.substring(1, 2) + colour.substring(1, 2) + colour.substring(2, 3) + colour.substring(2, 3) + colour.substring(3, 4) + colour.substring(3, 4);}
|
|
257
|
+
else
|
|
258
|
+
{ returnColour = colour;}
|
|
259
|
+
}
|
|
260
|
+
return returnColour;}
|
|
261
|
+
function get_style(obj, property, propertyNS)
|
|
262
|
+
{ try
|
|
263
|
+
{ if(obj.currentStyle)
|
|
264
|
+
{ var returnVal = eval("obj.currentStyle." + property);}
|
|
265
|
+
else
|
|
266
|
+
{ if(isSafari && obj.style.display == "none")
|
|
267
|
+
{ obj.style.display = ""; var wasHidden = true;}
|
|
268
|
+
var returnVal = document.defaultView.getComputedStyle(obj, '').getPropertyValue(propertyNS); if(isSafari && wasHidden)
|
|
269
|
+
{ obj.style.display = "none";}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch(e)
|
|
273
|
+
{ }
|
|
274
|
+
return returnVal;}
|
|
275
|
+
function getElementsByClass(searchClass, node, tag)
|
|
276
|
+
{ var classElements = new Array(); if(node == null)
|
|
277
|
+
node = document; if(tag == null)
|
|
278
|
+
tag = '*'; var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)"); for (i = 0, j = 0; i < elsLen; i++)
|
|
279
|
+
{ if(pattern.test(els[i].className))
|
|
280
|
+
{ classElements[j] = els[i]; j++;}
|
|
281
|
+
}
|
|
282
|
+
return classElements;}
|
|
283
|
+
function newCurvyError(errorMessage)
|
|
284
|
+
{ return new Error("curvyCorners Error:\n" + errorMessage)
|
|
285
|
+
}
|