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.
Files changed (360) hide show
  1. data/History.txt +8 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +81 -0
  4. data/{README → README.txt} +0 -0
  5. data/Rakefile +58 -59
  6. data/lib/activerecord/base.rb +0 -2
  7. data/lib/magic_model_generator.rb +0 -2
  8. data/lib/magic_model_generator/schema.rb +1 -5
  9. data/lib/magic_model_generator/validations.rb +1 -0
  10. data/lib/magic_model_generator/version.rb +1 -1
  11. data/scripts/txt2html +67 -0
  12. data/setup.rb +1585 -0
  13. data/tasks/build_db.rake +85 -0
  14. data/test/connections/native_db2/connection.rb +25 -0
  15. data/test/connections/native_firebird/connection.rb +26 -0
  16. data/test/connections/native_frontbase/connection.rb +27 -0
  17. data/test/connections/native_mysql/connection.rb +27 -0
  18. data/test/connections/native_openbase/connection.rb +21 -0
  19. data/test/connections/native_oracle/connection.rb +27 -0
  20. data/test/connections/native_postgresql/connection.rb +23 -0
  21. data/test/connections/native_sqlite/connection.rb +25 -0
  22. data/test/connections/native_sqlite3/connection.rb +25 -0
  23. data/test/connections/native_sqlite3/in_memory_connection.rb +18 -0
  24. data/test/connections/native_sqlserver/connection.rb +23 -0
  25. data/test/connections/native_sqlserver_odbc/connection.rb +25 -0
  26. data/test/connections/native_sybase/connection.rb +23 -0
  27. data/test/fixtures/db_definitions/db2.drop.sql +32 -0
  28. data/test/fixtures/db_definitions/db2.sql +231 -0
  29. data/test/fixtures/db_definitions/db22.drop.sql +2 -0
  30. data/test/fixtures/db_definitions/db22.sql +5 -0
  31. data/test/fixtures/db_definitions/firebird.drop.sql +63 -0
  32. data/test/fixtures/db_definitions/firebird.sql +304 -0
  33. data/test/fixtures/db_definitions/firebird2.drop.sql +2 -0
  34. data/test/fixtures/db_definitions/firebird2.sql +6 -0
  35. data/test/fixtures/db_definitions/frontbase.drop.sql +32 -0
  36. data/test/fixtures/db_definitions/frontbase.sql +268 -0
  37. data/test/fixtures/db_definitions/frontbase2.drop.sql +1 -0
  38. data/test/fixtures/db_definitions/frontbase2.sql +4 -0
  39. data/test/fixtures/db_definitions/mysql.drop.sql +32 -0
  40. data/test/fixtures/db_definitions/mysql.sql +234 -0
  41. data/test/fixtures/db_definitions/mysql2.drop.sql +2 -0
  42. data/test/fixtures/db_definitions/mysql2.sql +5 -0
  43. data/test/fixtures/db_definitions/openbase.drop.sql +2 -0
  44. data/test/fixtures/db_definitions/openbase.sql +302 -0
  45. data/test/fixtures/db_definitions/openbase2.drop.sql +2 -0
  46. data/test/fixtures/db_definitions/openbase2.sql +7 -0
  47. data/test/fixtures/db_definitions/oracle.drop.sql +65 -0
  48. data/test/fixtures/db_definitions/oracle.sql +325 -0
  49. data/test/fixtures/db_definitions/oracle2.drop.sql +2 -0
  50. data/test/fixtures/db_definitions/oracle2.sql +6 -0
  51. data/test/fixtures/db_definitions/postgresql.drop.sql +37 -0
  52. data/test/fixtures/db_definitions/postgresql.sql +247 -0
  53. data/test/fixtures/db_definitions/postgresql2.drop.sql +2 -0
  54. data/test/fixtures/db_definitions/postgresql2.sql +4 -0
  55. data/test/fixtures/db_definitions/schema.rb +74 -0
  56. data/test/fixtures/db_definitions/sqlite.drop.sql +32 -0
  57. data/test/fixtures/db_definitions/sqlite.sql +215 -0
  58. data/test/fixtures/db_definitions/sqlite2.drop.sql +2 -0
  59. data/test/fixtures/db_definitions/sqlite2.sql +5 -0
  60. data/test/fixtures/db_definitions/sqlserver.drop.sql +34 -0
  61. data/test/fixtures/db_definitions/sqlserver.sql +243 -0
  62. data/test/fixtures/db_definitions/sqlserver2.drop.sql +2 -0
  63. data/test/fixtures/db_definitions/sqlserver2.sql +5 -0
  64. data/test/fixtures/db_definitions/sybase.drop.sql +34 -0
  65. data/test/fixtures/db_definitions/sybase.sql +218 -0
  66. data/test/fixtures/db_definitions/sybase2.drop.sql +4 -0
  67. data/test/fixtures/db_definitions/sybase2.sql +5 -0
  68. data/test/{magic_model_generator_test.rb → test_magic_model_generator.rb} +1 -1
  69. data/test/test_rails_app/test/test_helper.rb +36 -0
  70. data/website/index.html +165 -0
  71. data/website/index.txt +83 -0
  72. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  73. data/website/stylesheets/screen.css +138 -0
  74. data/website/template.js +3 -0
  75. data/website/template.rhtml +53 -0
  76. metadata +96 -329
  77. data/examples/singleview/account.rb +0 -94
  78. data/examples/singleview/account_history.rb +0 -21
  79. data/examples/singleview/account_reservation.rb +0 -26
  80. data/examples/singleview/account_type.rb +0 -54
  81. data/examples/singleview/account_type_aging.rb +0 -17
  82. data/examples/singleview/account_type_variable.rb +0 -8
  83. data/examples/singleview/address.rb +0 -8
  84. data/examples/singleview/address_format.rb +0 -49
  85. data/examples/singleview/address_history.rb +0 -28
  86. data/examples/singleview/adjustment.rb +0 -97
  87. data/examples/singleview/adjustment_batch.rb +0 -42
  88. data/examples/singleview/adjustment_invoice.rb +0 -17
  89. data/examples/singleview/adjustment_type.rb +0 -54
  90. data/examples/singleview/adjustment_type_variable.rb +0 -8
  91. data/examples/singleview/archive_lock_t.rb +0 -11
  92. data/examples/singleview/archive_result.rb +0 -15
  93. data/examples/singleview/archive_type.rb +0 -31
  94. data/examples/singleview/archive_type_table_list.rb +0 -15
  95. data/examples/singleview/atai_error_name.rb +0 -7
  96. data/examples/singleview/atlanta_form.rb +0 -23
  97. data/examples/singleview/atlanta_form_field.rb +0 -12
  98. data/examples/singleview/atlanta_group.rb +0 -285
  99. data/examples/singleview/atlanta_help_entry.rb +0 -32
  100. data/examples/singleview/atlanta_operator.rb +0 -356
  101. data/examples/singleview/atlanta_profile.rb +0 -47
  102. data/examples/singleview/atlanta_profile_func_map.rb +0 -8
  103. data/examples/singleview/atlanta_profile_group_map.rb +0 -10
  104. data/examples/singleview/atlanta_profile_role_map.rb +0 -8
  105. data/examples/singleview/atlanta_profile_wf_map.rb +0 -10
  106. data/examples/singleview/atlanta_role.rb +0 -23
  107. data/examples/singleview/atlanta_table_partition.rb +0 -39
  108. data/examples/singleview/attribute_type.rb +0 -75
  109. data/examples/singleview/attribute_type_variable.rb +0 -8
  110. data/examples/singleview/bill_run.rb +0 -93
  111. data/examples/singleview/bill_run_operation.rb +0 -54
  112. data/examples/singleview/bill_run_type.rb +0 -39
  113. data/examples/singleview/bill_run_type_status.rb +0 -12
  114. data/examples/singleview/bill_run_type_task.rb +0 -12
  115. data/examples/singleview/cache.rb +0 -23
  116. data/examples/singleview/cache_field.rb +0 -13
  117. data/examples/singleview/can_act_charge.rb +0 -16
  118. data/examples/singleview/charge.rb +0 -67
  119. data/examples/singleview/charge_category.rb +0 -45
  120. data/examples/singleview/charge_output_defn.rb +0 -13
  121. data/examples/singleview/charge_output_defn_history.rb +0 -22
  122. data/examples/singleview/charge_output_defn_var.rb +0 -10
  123. data/examples/singleview/configuration_attr_type.rb +0 -22
  124. data/examples/singleview/configuration_attribute.rb +0 -11
  125. data/examples/singleview/configuration_item.rb +0 -26
  126. data/examples/singleview/configuration_item_type.rb +0 -29
  127. data/examples/singleview/contract.rb +0 -35
  128. data/examples/singleview/contract_history.rb +0 -48
  129. data/examples/singleview/contract_type.rb +0 -58
  130. data/examples/singleview/contract_type_product.rb +0 -11
  131. data/examples/singleview/conversion_rate.rb +0 -14
  132. data/examples/singleview/currency.rb +0 -118
  133. data/examples/singleview/currency_history.rb +0 -28
  134. data/examples/singleview/customer_contact.rb +0 -12
  135. data/examples/singleview/customer_node.rb +0 -166
  136. data/examples/singleview/customer_node_bill_run.rb +0 -12
  137. data/examples/singleview/customer_node_charge_cat.rb +0 -22
  138. data/examples/singleview/customer_node_correspond.rb +0 -12
  139. data/examples/singleview/customer_node_da.rb +0 -11
  140. data/examples/singleview/customer_node_da_array.rb +0 -35
  141. data/examples/singleview/customer_node_history.rb +0 -86
  142. data/examples/singleview/customer_node_inv_format.rb +0 -33
  143. data/examples/singleview/customer_node_type.rb +0 -89
  144. data/examples/singleview/customer_node_type_cc.rb +0 -18
  145. data/examples/singleview/customer_node_type_da.rb +0 -8
  146. data/examples/singleview/customer_node_type_var.rb +0 -8
  147. data/examples/singleview/customer_query.rb +0 -80
  148. data/examples/singleview/customer_query_progress.rb +0 -20
  149. data/examples/singleview/customer_query_type.rb +0 -49
  150. data/examples/singleview/customer_query_type_var.rb +0 -8
  151. data/examples/singleview/delete_cascade.rb +0 -13
  152. data/examples/singleview/delete_cascade_group.rb +0 -21
  153. data/examples/singleview/delete_constraint.rb +0 -9
  154. data/examples/singleview/derived_attribute.rb +0 -32
  155. data/examples/singleview/derived_attribute_array.rb +0 -32
  156. data/examples/singleview/derived_attribute_history.rb +0 -41
  157. data/examples/singleview/derived_attribute_index.rb +0 -13
  158. data/examples/singleview/derived_attribute_value.rb +0 -19
  159. data/examples/singleview/dil.rb +0 -18
  160. data/examples/singleview/dil_history.rb +0 -24
  161. data/examples/singleview/dil_reference.rb +0 -9
  162. data/examples/singleview/dil_validation_t.rb +0 -6
  163. data/examples/singleview/dil_variable.rb +0 -10
  164. data/examples/singleview/dunning_t.rb +0 -14
  165. data/examples/singleview/entity_mapping.rb +0 -11
  166. data/examples/singleview/entity_remap.rb +0 -22
  167. data/examples/singleview/entity_validation.rb +0 -70
  168. data/examples/singleview/entity_validation_list.rb +0 -15
  169. data/examples/singleview/entity_validation_variable.rb +0 -8
  170. data/examples/singleview/equipment.rb +0 -28
  171. data/examples/singleview/equipment_history.rb +0 -62
  172. data/examples/singleview/equipment_type.rb +0 -57
  173. data/examples/singleview/equipment_type_variable.rb +0 -8
  174. data/examples/singleview/error_group.rb +0 -18
  175. data/examples/singleview/error_message.rb +0 -65
  176. data/examples/singleview/evs_address_equiv.rb +0 -17
  177. data/examples/singleview/evs_alias.rb +0 -12
  178. data/examples/singleview/evs_attribute_type_key.rb +0 -7
  179. data/examples/singleview/evt_equipment_changeover.rb +0 -9
  180. data/examples/singleview/expression_list.rb +0 -27
  181. data/examples/singleview/expression_list_value.rb +0 -17
  182. data/examples/singleview/fac_group_compatibility.rb +0 -11
  183. data/examples/singleview/fac_group_instance.rb +0 -19
  184. data/examples/singleview/fac_group_instance_hist.rb +0 -16
  185. data/examples/singleview/facility.rb +0 -9
  186. data/examples/singleview/facility_group.rb +0 -21
  187. data/examples/singleview/facility_group_history.rb +0 -21
  188. data/examples/singleview/foreign_key.rb +0 -9
  189. data/examples/singleview/function_defn.rb +0 -16
  190. data/examples/singleview/function_defn_history.rb +0 -35
  191. data/examples/singleview/function_role.rb +0 -24
  192. data/examples/singleview/function_role_map.rb +0 -10
  193. data/examples/singleview/gl_code.rb +0 -65
  194. data/examples/singleview/gl_code_history.rb +0 -20
  195. data/examples/singleview/gl_upload.rb +0 -10
  196. data/examples/singleview/icon.rb +0 -64
  197. data/examples/singleview/inv_loop_t.rb +0 -4
  198. data/examples/singleview/inv_report_accounts_t.rb +0 -25
  199. data/examples/singleview/invoice.rb +0 -134
  200. data/examples/singleview/invoice_contents.rb +0 -14
  201. data/examples/singleview/invoice_format.rb +0 -31
  202. data/examples/singleview/invoice_format_history.rb +0 -29
  203. data/examples/singleview/invoice_message.rb +0 -17
  204. data/examples/singleview/invoice_message_history.rb +0 -31
  205. data/examples/singleview/invoice_message_variable.rb +0 -10
  206. data/examples/singleview/invoice_receivable_type.rb +0 -13
  207. data/examples/singleview/invoice_type.rb +0 -23
  208. data/examples/singleview/invoice_type_history.rb +0 -26
  209. data/examples/singleview/invoice_type_variable.rb +0 -10
  210. data/examples/singleview/isp_email_address.rb +0 -17
  211. data/examples/singleview/licence_current_values.rb +0 -12
  212. data/examples/singleview/menu_role_map.rb +0 -10
  213. data/examples/singleview/normalised_event.rb +0 -119
  214. data/examples/singleview/normalised_event_error.rb +0 -91
  215. data/examples/singleview/normalised_event_file.rb +0 -75
  216. data/examples/singleview/normalised_event_ft.rb +0 -18
  217. data/examples/singleview/normalised_event_ft_hist.rb +0 -25
  218. data/examples/singleview/normalised_event_ft_var.rb +0 -10
  219. data/examples/singleview/normalised_event_type.rb +0 -54
  220. data/examples/singleview/output_device.rb +0 -37
  221. data/examples/singleview/output_method.rb +0 -32
  222. data/examples/singleview/output_method_type.rb +0 -38
  223. data/examples/singleview/output_select.rb +0 -17
  224. data/examples/singleview/payment.rb +0 -102
  225. data/examples/singleview/payment_batch.rb +0 -43
  226. data/examples/singleview/payment_invoice.rb +0 -17
  227. data/examples/singleview/payment_item.rb +0 -15
  228. data/examples/singleview/payment_type.rb +0 -57
  229. data/examples/singleview/payment_type_variable.rb +0 -8
  230. data/examples/singleview/person.rb +0 -60
  231. data/examples/singleview/person_history.rb +0 -69
  232. data/examples/singleview/person_type.rb +0 -39
  233. data/examples/singleview/plan_table.rb +0 -27
  234. data/examples/singleview/product.rb +0 -45
  235. data/examples/singleview/product_compatibility.rb +0 -13
  236. data/examples/singleview/product_derived_attribute.rb +0 -10
  237. data/examples/singleview/product_facility_group.rb +0 -16
  238. data/examples/singleview/product_group.rb +0 -12
  239. data/examples/singleview/product_group_history.rb +0 -20
  240. data/examples/singleview/product_history.rb +0 -35
  241. data/examples/singleview/product_in_product_group.rb +0 -12
  242. data/examples/singleview/product_instance.rb +0 -41
  243. data/examples/singleview/product_instance_equip.rb +0 -21
  244. data/examples/singleview/product_instance_history.rb +0 -37
  245. data/examples/singleview/product_instance_service.rb +0 -17
  246. data/examples/singleview/product_payment_item.rb +0 -19
  247. data/examples/singleview/product_service_type.rb +0 -32
  248. data/examples/singleview/product_service_type_equip.rb +0 -20
  249. data/examples/singleview/product_subtotal.rb +0 -14
  250. data/examples/singleview/product_tariff.rb +0 -16
  251. data/examples/singleview/racr_clec_t1.rb +0 -12
  252. data/examples/singleview/racr_clec_t2.rb +0 -12
  253. data/examples/singleview/racr_clec_t3.rb +0 -28
  254. data/examples/singleview/racr_t.rb +0 -29
  255. data/examples/singleview/ragd_clec_t.rb +0 -47
  256. data/examples/singleview/ragd_t.rb +0 -28
  257. data/examples/singleview/rapc_t.rb +0 -27
  258. data/examples/singleview/rdfd_cmn_t.rb +0 -17
  259. data/examples/singleview/rdfd_t.rb +0 -16
  260. data/examples/singleview/receivable_type.rb +0 -49
  261. data/examples/singleview/receivable_type_history.rb +0 -25
  262. data/examples/singleview/reference_code.rb +0 -17
  263. data/examples/singleview/reference_type.rb +0 -32
  264. data/examples/singleview/release_info.rb +0 -10
  265. data/examples/singleview/report_reference_type.rb +0 -14
  266. data/examples/singleview/report_reference_type_defs.rb +0 -12
  267. data/examples/singleview/reprocessed_file.rb +0 -32
  268. data/examples/singleview/rgp_file.rb +0 -22
  269. data/examples/singleview/rgp_normalised_event.rb +0 -78
  270. data/examples/singleview/rmag_t.rb +0 -32
  271. data/examples/singleview/rpmr_t.rb +0 -27
  272. data/examples/singleview/rpsi_t.rb +0 -24
  273. data/examples/singleview/rser_t.rb +0 -13
  274. data/examples/singleview/rshu_cmn_t.rb +0 -31
  275. data/examples/singleview/schedule.rb +0 -91
  276. data/examples/singleview/schedule_task_type.rb +0 -43
  277. data/examples/singleview/service.rb +0 -88
  278. data/examples/singleview/service_bill_run_t.rb +0 -12
  279. data/examples/singleview/service_charge_category.rb +0 -22
  280. data/examples/singleview/service_da.rb +0 -11
  281. data/examples/singleview/service_da_array.rb +0 -35
  282. data/examples/singleview/service_duplicate.rb +0 -4
  283. data/examples/singleview/service_history.rb +0 -59
  284. data/examples/singleview/service_type.rb +0 -54
  285. data/examples/singleview/service_type_cc.rb +0 -18
  286. data/examples/singleview/service_type_da.rb +0 -8
  287. data/examples/singleview/service_type_equip_type.rb +0 -11
  288. data/examples/singleview/subtotal.rb +0 -48
  289. data/examples/singleview/subtotal_history.rb +0 -59
  290. data/examples/singleview/subtotal_rating_delta.rb +0 -20
  291. data/examples/singleview/subtotal_rating_value.rb +0 -21
  292. data/examples/singleview/subtotal_term.rb +0 -16
  293. data/examples/singleview/subtotal_value.rb +0 -18
  294. data/examples/singleview/summary_of_change.rb +0 -31
  295. data/examples/singleview/summary_of_change_ev.rb +0 -18
  296. data/examples/singleview/summary_of_change_view.rb +0 -22
  297. data/examples/singleview/t2_anumber_france.rb +0 -22
  298. data/examples/singleview/t2_anumber_italy.rb +0 -22
  299. data/examples/singleview/t2_anumber_netherlands.rb +0 -24
  300. data/examples/singleview/t2_anumber_portugal.rb +0 -22
  301. data/examples/singleview/t2_anumber_spain.rb +0 -22
  302. data/examples/singleview/t2_anumber_switzerland.rb +0 -24
  303. data/examples/singleview/t2_bankreference_austria.rb +0 -7
  304. data/examples/singleview/t2_bankreference_belgium.rb +0 -6
  305. data/examples/singleview/t2_bankreference_france.rb +0 -7
  306. data/examples/singleview/t2_bankreference_germany.rb +0 -7
  307. data/examples/singleview/t2_bankreference_italy.rb +0 -7
  308. data/examples/singleview/t2_bankreference_portugal.rb +0 -7
  309. data/examples/singleview/t2_cc_provrequests.rb +0 -19
  310. data/examples/singleview/t2_emf_info.rb +0 -12
  311. data/examples/singleview/t2_ev_column_label_mapping.rb +0 -9
  312. data/examples/singleview/t2_historytable.rb +0 -26
  313. data/examples/singleview/t2_inv_revoked_invoice.rb +0 -11
  314. data/examples/singleview/t2_inv_suppress_invoice.rb +0 -13
  315. data/examples/singleview/t2_national_number_plan.rb +0 -8
  316. data/examples/singleview/t2_pay_statement.rb +0 -28
  317. data/examples/singleview/t2_prov_req_action.rb +0 -22
  318. data/examples/singleview/t2_prov_request.rb +0 -32
  319. data/examples/singleview/t2_rep_brr_t.rb +0 -19
  320. data/examples/singleview/t2_rep_trr_t.rb +0 -19
  321. data/examples/singleview/t2_rep_ubr_t.rb +0 -19
  322. data/examples/singleview/t2_taxclass.rb +0 -8
  323. data/examples/singleview/t2_zipcode_austria.rb +0 -8
  324. data/examples/singleview/t2_zipcode_france.rb +0 -8
  325. data/examples/singleview/t2_zipcode_germany.rb +0 -8
  326. data/examples/singleview/t2_zipcode_hungary.rb +0 -8
  327. data/examples/singleview/t2_zipcode_luxembourg.rb +0 -8
  328. data/examples/singleview/t2_zipcode_netherlands.rb +0 -8
  329. data/examples/singleview/t2_zipcode_portugal.rb +0 -9
  330. data/examples/singleview/t2_zipcode_spain.rb +0 -8
  331. data/examples/singleview/t2_zipcode_switzerland.rb +0 -8
  332. data/examples/singleview/table_import_order.rb +0 -6
  333. data/examples/singleview/tariff.rb +0 -51
  334. data/examples/singleview/tariff_charge.rb +0 -33
  335. data/examples/singleview/tariff_charge_defn.rb +0 -18
  336. data/examples/singleview/tariff_condition_defn.rb +0 -19
  337. data/examples/singleview/tariff_history.rb +0 -70
  338. data/examples/singleview/tariff_recurring.rb +0 -36
  339. data/examples/singleview/task_queue.rb +0 -130
  340. data/examples/singleview/task_queue_result.rb +0 -10
  341. data/examples/singleview/template.rb +0 -18
  342. data/examples/singleview/template_history.rb +0 -30
  343. data/examples/singleview/template_reference.rb +0 -9
  344. data/examples/singleview/template_variable.rb +0 -10
  345. data/examples/singleview/trt_clec_treatment.rb +0 -13
  346. data/examples/singleview/variable_defn.rb +0 -48
  347. data/examples/singleview/variable_defn_dependency.rb +0 -11
  348. data/examples/singleview/variable_defn_direct.rb +0 -15
  349. data/examples/singleview/variable_defn_history.rb +0 -22
  350. data/examples/singleview/work_force.rb +0 -25
  351. data/examples/singleview/xpsi_addr_val_commtax21.rb +0 -24
  352. data/examples/singleview/xpsi_addr_val_msag.rb +0 -24
  353. data/examples/singleview/xpsi_addr_val_zip.rb +0 -14
  354. data/examples/singleview/xpsi_ne_batch.rb +0 -20
  355. data/examples/singleview/xpsi_product_batch.rb +0 -18
  356. data/examples/singleview/xpsi_product_status.rb +0 -14
  357. data/examples/singleview/xpsi_tax_error.rb +0 -34
  358. data/examples/singleview/xpsi_trt_revoke.rb +0 -68
  359. data/examples/singleview/xpsi_trt_revoke_prod_inst.rb +0 -12
  360. data/examples/singleview/xpsi_update_capture.rb +0 -35
@@ -0,0 +1,4 @@
1
+ DROP TABLE courses
2
+ go
3
+
4
+
@@ -0,0 +1,5 @@
1
+ CREATE TABLE courses (
2
+ id int NOT NULL PRIMARY KEY,
3
+ name varchar(255) NOT NULL
4
+ )
5
+ go
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
- class MagicModelGeneratorTest < Test::Unit::TestCase
3
+ class MagicModelsGeneratorTest < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
6
  end
@@ -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
@@ -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="/">&#x21A9; 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&#8217;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 &#8211; <code>activerecord_unittest</code>. If you&#8217;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&#8217;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&#38;hl=en" flashvars=""> </embed>
124
+
125
+ <h2>Dr Nic&#8217;s Blog</h2>
126
+
127
+
128
+ <p><a href="http://www.drnicwilliams.com">http://www.drnicwilliams.com</a> &#8211; 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>
@@ -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 &#8211; <code>activerecord_unittest</code>. If you&#8217;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&#8217;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&#38;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
+ }