databaseformalizer 0.3.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 (267) hide show
  1. data/.project +18 -0
  2. data/README +256 -0
  3. data/README.md +2 -0
  4. data/Rakefile +21 -0
  5. data/app/controllers/databaseformalizer/attr_defs_controller.rb +98 -0
  6. data/app/controllers/databaseformalizer/attr_vals_controller.rb +85 -0
  7. data/app/controllers/databaseformalizer/dbformahome_controller.rb +7 -0
  8. data/app/controllers/databaseformalizer/entities_controller.rb +105 -0
  9. data/app/controllers/databaseformalizer/entity_defs_controller.rb +90 -0
  10. data/app/helpers/application_helper.rb +2 -0
  11. data/app/helpers/databaseformalizer/application_helper.rb +4 -0
  12. data/app/helpers/databaseformalizer/attr_defs_helper.rb +4 -0
  13. data/app/helpers/databaseformalizer/attr_vals_helper.rb +4 -0
  14. data/app/helpers/databaseformalizer/dbformahome_helper.rb +4 -0
  15. data/app/helpers/databaseformalizer/entities_helper.rb +160 -0
  16. data/app/helpers/databaseformalizer/entity_defs_helper.rb +68 -0
  17. data/app/models/databaseformalizer/attr_def.rb +48 -0
  18. data/app/models/databaseformalizer/attr_list_join_def.rb +17 -0
  19. data/app/models/databaseformalizer/attr_list_join_val.rb +18 -0
  20. data/app/models/databaseformalizer/attr_val.rb +36 -0
  21. data/app/models/databaseformalizer/attr_vals_entity.rb +18 -0
  22. data/app/models/databaseformalizer/entity.rb +27 -0
  23. data/app/models/databaseformalizer/entity_def.rb +24 -0
  24. data/app/models/databaseformalizer/entity_def_attr_def.rb +18 -0
  25. data/app/views/databaseformalizer/attr_defs/_form.html.erb +74 -0
  26. data/app/views/databaseformalizer/attr_defs/edit.html.erb +7 -0
  27. data/app/views/databaseformalizer/attr_defs/index.html.erb +38 -0
  28. data/app/views/databaseformalizer/attr_defs/new.html.erb +6 -0
  29. data/app/views/databaseformalizer/attr_defs/show.html.erb +50 -0
  30. data/app/views/databaseformalizer/attr_vals/_form.html.erb +29 -0
  31. data/app/views/databaseformalizer/attr_vals/edit.html.erb +7 -0
  32. data/app/views/databaseformalizer/attr_vals/index.html.erb +28 -0
  33. data/app/views/databaseformalizer/attr_vals/new.html.erb +6 -0
  34. data/app/views/databaseformalizer/attr_vals/show.html.erb +20 -0
  35. data/app/views/databaseformalizer/dbformahome/index.html.erb +19 -0
  36. data/app/views/databaseformalizer/entities/_attr_val_boolean_form.html.erb +7 -0
  37. data/app/views/databaseformalizer/entities/_attr_val_checkList_form.html.erb +22 -0
  38. data/app/views/databaseformalizer/entities/_attr_val_datetime_form.html.erb +15 -0
  39. data/app/views/databaseformalizer/entities/_attr_val_entityDef_form.html.erb +14 -0
  40. data/app/views/databaseformalizer/entities/_attr_val_form_all.html.erb +4 -0
  41. data/app/views/databaseformalizer/entities/_attr_val_form_one.html.erb +6 -0
  42. data/app/views/databaseformalizer/entities/_attr_val_integer_form.html.erb +10 -0
  43. data/app/views/databaseformalizer/entities/_attr_val_openList_element_form.html.erb +16 -0
  44. data/app/views/databaseformalizer/entities/_attr_val_openList_form.html.erb +12 -0
  45. data/app/views/databaseformalizer/entities/_attr_val_selectOneInList_form.html.erb +20 -0
  46. data/app/views/databaseformalizer/entities/_attr_val_string_form.html.erb +10 -0
  47. data/app/views/databaseformalizer/entities/_attr_val_text_form.html.erb +10 -0
  48. data/app/views/databaseformalizer/entities/_form.html.erb +54 -0
  49. data/app/views/databaseformalizer/entities/edit.html.erb +8 -0
  50. data/app/views/databaseformalizer/entities/index.html.erb +45 -0
  51. data/app/views/databaseformalizer/entities/new.html.erb +10 -0
  52. data/app/views/databaseformalizer/entities/new.js.erb +1 -0
  53. data/app/views/databaseformalizer/entities/show.html.erb +50 -0
  54. data/app/views/databaseformalizer/entity_defs/_form.html.erb +51 -0
  55. data/app/views/databaseformalizer/entity_defs/edit.html.erb +7 -0
  56. data/app/views/databaseformalizer/entity_defs/index.html.erb +57 -0
  57. data/app/views/databaseformalizer/entity_defs/new.html.erb +6 -0
  58. data/app/views/databaseformalizer/entity_defs/show.html.erb +30 -0
  59. data/app/views/databaseformalizer/layouts/application.html.erb +134 -0
  60. data/databaseformalizer.gemspec +34 -0
  61. data/lib/acts_as_entity/base.rb +101 -0
  62. data/lib/application_controller.rb +21 -0
  63. data/lib/application_helper.rb +3 -0
  64. data/lib/databaseformalizer.rb +27 -0
  65. data/lib/engine.rb +23 -0
  66. data/lib/generators/entity_def/USAGE +8 -0
  67. data/lib/generators/entity_def/entity_def_generator.rb +39 -0
  68. data/lib/generators/entity_def/templates/controller.rb +98 -0
  69. data/lib/generators/entity_def/templates/helper.rb +2 -0
  70. data/lib/generators/entity_def/templates/model.rb +3 -0
  71. data/lib/generators/entity_def/templates/view/_form.html.erb +35 -0
  72. data/lib/generators/entity_def/templates/view/edit.html.erb +6 -0
  73. data/lib/generators/entity_def/templates/view/index.html.erb +27 -0
  74. data/lib/generators/entity_def/templates/view/new.html.erb +5 -0
  75. data/lib/generators/entity_def/templates/view/show.html.erb +3 -0
  76. data/lib/rails/generators/databaseformalizer/databaseformalizer_generator.rb +52 -0
  77. data/lib/rails/generators/databaseformalizer/templates/initializer.rb +8 -0
  78. data/lib/rails/generators/databaseformalizer/templates/migration.rb +9 -0
  79. data/lib/rails/generators/databaseformalizer/templates/migration.rb.bak +9 -0
  80. data/lib/rails/generators/databaseformalizer/templates/schema.rb +84 -0
  81. data/lib/rails/railties/tasks.rake +8 -0
  82. data/public/bootstrap/css/bootstrap-fixed-header.css +15 -0
  83. data/public/bootstrap/css/bootstrap-responsive.css +808 -0
  84. data/public/bootstrap/css/bootstrap-responsive.min.css +9 -0
  85. data/public/bootstrap/css/bootstrap-toggle.css +242 -0
  86. data/public/bootstrap/css/cerulean/bootstrap.min.css +740 -0
  87. data/public/bootstrap/css/img/glyphicons-halflings-white.png +0 -0
  88. data/public/bootstrap/css/img/glyphicons-halflings.png +0 -0
  89. data/public/bootstrap/js/bootstrap-alert.js +90 -0
  90. data/public/bootstrap/js/bootstrap-collapse.js +157 -0
  91. data/public/bootstrap/js/bootstrap-dropdown.js +100 -0
  92. data/public/bootstrap/js/bootstrap-fixed-header.js +54 -0
  93. data/public/bootstrap/js/bootstrap-modal.js +218 -0
  94. data/public/bootstrap/js/bootstrap-popover.js +98 -0
  95. data/public/bootstrap/js/bootstrap-tab.js +135 -0
  96. data/public/bootstrap/js/bootstrap-toggle.js +104 -0
  97. data/public/bootstrap/js/bootstrap-tooltip.js +275 -0
  98. data/public/bootstrap/js/bootstrap-transition.js +61 -0
  99. data/public/bootstrap/js/bootstrap.js +1824 -0
  100. data/public/bootstrap/js/bootstrap.min.js +6 -0
  101. data/public/images/Thumbs.db +0 -0
  102. data/public/images/bootstrap/Thumbs.db +0 -0
  103. data/public/images/bootstrap/glyphicons-halflings.png +0 -0
  104. data/public/images/databaseformalizer.jpg +0 -0
  105. data/public/images/metamodel.png +0 -0
  106. data/public/images/model.png +0 -0
  107. data/public/javascripts/databaseformalizer.js +13 -0
  108. data/public/javascripts/jquery.js +9252 -0
  109. data/public/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  110. data/public/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  111. data/public/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  112. data/public/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  113. data/public/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  114. data/public/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  115. data/public/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  116. data/public/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  117. data/public/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  118. data/public/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  119. data/public/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  120. data/public/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  121. data/public/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  122. data/public/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  123. data/public/jquery-ui/css/ui-lightness/jquery-ui-1.8.21.custom.css +565 -0
  124. data/public/jquery-ui/js/jquery-1.7.2.min.js +4 -0
  125. data/public/jquery-ui/js/jquery-ui-1.8.21.custom.min.js +125 -0
  126. data/public/jquery-validation/README.md +8 -0
  127. data/public/jquery-validation/additional-methods.js +300 -0
  128. data/public/jquery-validation/additional-methods.min.js +29 -0
  129. data/public/jquery-validation/changelog.txt +277 -0
  130. data/public/jquery-validation/jquery.validate.js +1188 -0
  131. data/public/jquery-validation/jquery.validate.min.js +51 -0
  132. data/public/jquery-validation/lib/jquery-1.3.2.js +4376 -0
  133. data/public/jquery-validation/lib/jquery-1.4.2.js +6240 -0
  134. data/public/jquery-validation/lib/jquery-1.4.4.js +7179 -0
  135. data/public/jquery-validation/lib/jquery-1.5.2.js +8374 -0
  136. data/public/jquery-validation/lib/jquery-1.6.1.js +8936 -0
  137. data/public/jquery-validation/lib/jquery.form.js +660 -0
  138. data/public/jquery-validation/lib/jquery.js +4376 -0
  139. data/public/jquery-validation/lib/jquery.metadata.js +122 -0
  140. data/public/jquery-validation/lib/jquery.mockjax.js +382 -0
  141. data/public/jquery-validation/localization/messages_ar.js +24 -0
  142. data/public/jquery-validation/localization/messages_bg.js +23 -0
  143. data/public/jquery-validation/localization/messages_ca.js +23 -0
  144. data/public/jquery-validation/localization/messages_cn.js +23 -0
  145. data/public/jquery-validation/localization/messages_cs.js +23 -0
  146. data/public/jquery-validation/localization/messages_da.js +20 -0
  147. data/public/jquery-validation/localization/messages_de.js +20 -0
  148. data/public/jquery-validation/localization/messages_el.js +24 -0
  149. data/public/jquery-validation/localization/messages_es.js +23 -0
  150. data/public/jquery-validation/localization/messages_eu.js +23 -0
  151. data/public/jquery-validation/localization/messages_fa.js +23 -0
  152. data/public/jquery-validation/localization/messages_fi.js +21 -0
  153. data/public/jquery-validation/localization/messages_fr.js +23 -0
  154. data/public/jquery-validation/localization/messages_ge.js +23 -0
  155. data/public/jquery-validation/localization/messages_he.js +23 -0
  156. data/public/jquery-validation/localization/messages_hu.js +20 -0
  157. data/public/jquery-validation/localization/messages_it.js +23 -0
  158. data/public/jquery-validation/localization/messages_ja.js +23 -0
  159. data/public/jquery-validation/localization/messages_kk.js +23 -0
  160. data/public/jquery-validation/localization/messages_lt.js +23 -0
  161. data/public/jquery-validation/localization/messages_lv.js +23 -0
  162. data/public/jquery-validation/localization/messages_nl.js +23 -0
  163. data/public/jquery-validation/localization/messages_no.js +23 -0
  164. data/public/jquery-validation/localization/messages_pl.js +23 -0
  165. data/public/jquery-validation/localization/messages_ptbr.js +23 -0
  166. data/public/jquery-validation/localization/messages_ptpt.js +23 -0
  167. data/public/jquery-validation/localization/messages_ro.js +23 -0
  168. data/public/jquery-validation/localization/messages_ru.js +23 -0
  169. data/public/jquery-validation/localization/messages_se.js +21 -0
  170. data/public/jquery-validation/localization/messages_si.js +23 -0
  171. data/public/jquery-validation/localization/messages_sk.js +20 -0
  172. data/public/jquery-validation/localization/messages_sl.js +23 -0
  173. data/public/jquery-validation/localization/messages_sr.js +23 -0
  174. data/public/jquery-validation/localization/messages_th.js +23 -0
  175. data/public/jquery-validation/localization/messages_tr.js +23 -0
  176. data/public/jquery-validation/localization/messages_tw.js +23 -0
  177. data/public/jquery-validation/localization/messages_ua.js +23 -0
  178. data/public/jquery-validation/localization/messages_vi.js +23 -0
  179. data/public/jquery-validation/localization/methods_de.js +12 -0
  180. data/public/jquery-validation/localization/methods_nl.js +9 -0
  181. data/public/jquery-validation/localization/methods_pt.js +9 -0
  182. data/public/jquery-validation/todo +172 -0
  183. data/public/jquery-validation/version.txt +1 -0
  184. data/public/stylesheets/databaseformalizer.css +64 -0
  185. data/public/stylesheets/scaffold.css +56 -0
  186. data/public/tablesorter/addons/.svn/all-wcprops +5 -0
  187. data/public/tablesorter/addons/.svn/entries +31 -0
  188. data/public/tablesorter/addons/pager/.svn/all-wcprops +17 -0
  189. data/public/tablesorter/addons/pager/.svn/entries +96 -0
  190. data/public/tablesorter/addons/pager/.svn/prop-base/jquery.tablesorter.pager.css.svn-base +5 -0
  191. data/public/tablesorter/addons/pager/.svn/prop-base/jquery.tablesorter.pager.js.svn-base +5 -0
  192. data/public/tablesorter/addons/pager/.svn/text-base/jquery.tablesorter.pager.css.svn-base +25 -0
  193. data/public/tablesorter/addons/pager/.svn/text-base/jquery.tablesorter.pager.js.svn-base +184 -0
  194. data/public/tablesorter/addons/pager/jquery.tablesorter.pager.css +25 -0
  195. data/public/tablesorter/addons/pager/jquery.tablesorter.pager.js +184 -0
  196. data/public/tablesorter/build/.svn/all-wcprops +47 -0
  197. data/public/tablesorter/build/.svn/entries +266 -0
  198. data/public/tablesorter/build/.svn/prop-base/ParseMaster.js.svn-base +5 -0
  199. data/public/tablesorter/build/.svn/prop-base/js.jar.svn-base +5 -0
  200. data/public/tablesorter/build/.svn/prop-base/jsmin.js.svn-base +5 -0
  201. data/public/tablesorter/build/.svn/prop-base/min.js.svn-base +5 -0
  202. data/public/tablesorter/build/.svn/prop-base/pack.js.svn-base +5 -0
  203. data/public/tablesorter/build/.svn/prop-base/packer.js.svn-base +5 -0
  204. data/public/tablesorter/build/.svn/prop-base/writeFile.js.svn-base +5 -0
  205. data/public/tablesorter/build/.svn/text-base/ParseMaster.js.svn-base +106 -0
  206. data/public/tablesorter/build/.svn/text-base/js.jar.svn-base +0 -0
  207. data/public/tablesorter/build/.svn/text-base/jsmin.js.svn-base +316 -0
  208. data/public/tablesorter/build/.svn/text-base/min.js.svn-base +5 -0
  209. data/public/tablesorter/build/.svn/text-base/pack.js.svn-base +5 -0
  210. data/public/tablesorter/build/.svn/text-base/packer.js.svn-base +316 -0
  211. data/public/tablesorter/build/.svn/text-base/writeFile.js.svn-base +19 -0
  212. data/public/tablesorter/build/ParseMaster.js +106 -0
  213. data/public/tablesorter/build/js.jar +0 -0
  214. data/public/tablesorter/build/jsmin.js +316 -0
  215. data/public/tablesorter/build/min.js +5 -0
  216. data/public/tablesorter/build/pack.js +5 -0
  217. data/public/tablesorter/build/packer.js +316 -0
  218. data/public/tablesorter/build/writeFile.js +19 -0
  219. data/public/tablesorter/build.xml +26 -0
  220. data/public/tablesorter/changelog +41 -0
  221. data/public/tablesorter/jquery-latest.js +154 -0
  222. data/public/tablesorter/jquery.metadata.js +122 -0
  223. data/public/tablesorter/jquery.tablesorter.js +1031 -0
  224. data/public/tablesorter/jquery.tablesorter.min.js +4 -0
  225. data/public/tablesorter/jquery.tablesorter.widgets.js +433 -0
  226. data/public/tablesorter/jquery.ui.datepicker.js +1727 -0
  227. data/public/tablesorter/style.css +110 -0
  228. data/public/tablesorter/themes/.svn/all-wcprops +5 -0
  229. data/public/tablesorter/themes/.svn/entries +34 -0
  230. data/public/tablesorter/themes/blue/.svn/all-wcprops +35 -0
  231. data/public/tablesorter/themes/blue/.svn/entries +198 -0
  232. data/public/tablesorter/themes/blue/.svn/prop-base/asc.gif.svn-base +5 -0
  233. data/public/tablesorter/themes/blue/.svn/prop-base/bg.gif.svn-base +5 -0
  234. data/public/tablesorter/themes/blue/.svn/prop-base/blue.zip.svn-base +5 -0
  235. data/public/tablesorter/themes/blue/.svn/prop-base/desc.gif.svn-base +5 -0
  236. data/public/tablesorter/themes/blue/.svn/prop-base/style.css.svn-base +5 -0
  237. data/public/tablesorter/themes/blue/.svn/text-base/asc.gif.svn-base +0 -0
  238. data/public/tablesorter/themes/blue/.svn/text-base/bg.gif.svn-base +0 -0
  239. data/public/tablesorter/themes/blue/.svn/text-base/blue.zip.svn-base +0 -0
  240. data/public/tablesorter/themes/blue/.svn/text-base/desc.gif.svn-base +0 -0
  241. data/public/tablesorter/themes/blue/.svn/text-base/style.css.svn-base +39 -0
  242. data/public/tablesorter/themes/blue/asc.gif +0 -0
  243. data/public/tablesorter/themes/blue/bg.gif +0 -0
  244. data/public/tablesorter/themes/blue/blue.zip +0 -0
  245. data/public/tablesorter/themes/blue/desc.gif +0 -0
  246. data/public/tablesorter/themes/blue/style.css +39 -0
  247. data/public/tablesorter/themes/green/.svn/all-wcprops +35 -0
  248. data/public/tablesorter/themes/green/.svn/entries +198 -0
  249. data/public/tablesorter/themes/green/.svn/prop-base/asc.png.svn-base +5 -0
  250. data/public/tablesorter/themes/green/.svn/prop-base/bg.png.svn-base +5 -0
  251. data/public/tablesorter/themes/green/.svn/prop-base/desc.png.svn-base +5 -0
  252. data/public/tablesorter/themes/green/.svn/prop-base/green.zip.svn-base +5 -0
  253. data/public/tablesorter/themes/green/.svn/prop-base/style.css.svn-base +5 -0
  254. data/public/tablesorter/themes/green/.svn/text-base/asc.png.svn-base +0 -0
  255. data/public/tablesorter/themes/green/.svn/text-base/bg.png.svn-base +0 -0
  256. data/public/tablesorter/themes/green/.svn/text-base/desc.png.svn-base +0 -0
  257. data/public/tablesorter/themes/green/.svn/text-base/green.zip.svn-base +0 -0
  258. data/public/tablesorter/themes/green/.svn/text-base/style.css.svn-base +39 -0
  259. data/public/tablesorter/themes/green/asc.png +0 -0
  260. data/public/tablesorter/themes/green/bg.png +0 -0
  261. data/public/tablesorter/themes/green/desc.png +0 -0
  262. data/public/tablesorter/themes/green/green.zip +0 -0
  263. data/public/tablesorter/themes/green/style.css +39 -0
  264. data/test/database.yml +5 -0
  265. data/test/test_helper.rb +56 -0
  266. data/test/unit/databaseformalizer_test.rb +11 -0
  267. metadata +332 -0
@@ -0,0 +1,4 @@
1
+ module Databaseformalizer
2
+ module AttrDefsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Databaseformalizer
2
+ module AttrValsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Databaseformalizer
2
+ module DbformahomeHelper
3
+ end
4
+ end
@@ -0,0 +1,160 @@
1
+ module Databaseformalizer
2
+ module EntitiesHelper
3
+ def EntitiesHelper.initAttrVals(entity)
4
+ entityDef = entity.entity_def
5
+
6
+ entityDef.attrDefs.each do |attrDef|
7
+ attrVal = AttrVal.new(:attrDef => attrDef)
8
+ entity.attr_vals << attrVal
9
+ attrVal.save
10
+ end
11
+ end
12
+ def EntitiesHelper.setAttrVals(params, entity, parent = nil )
13
+
14
+ if params == nil; params = []; end
15
+ params.each do |attrType,attrFormValue|
16
+ attrDef = AttrDef.find(attrType);
17
+ attrVal = entity.attr_vals.find_by_attr_def_name(attrType)
18
+ #check if item exist or if is in an insert or update
19
+ if attrVal == nil || (attrVal != nil && parent != nil && parent.attrDef.dataType == "openList" )
20
+ attrVal = AttrVal.new(:attrDef => attrDef)
21
+ entity.attr_vals << attrVal
22
+ if parent != nil
23
+ parent.attrValChilds << attrVal
24
+ end
25
+ end
26
+
27
+ case attrVal.attrDef.dataType
28
+ when "String"
29
+ attrVal.value = attrFormValue
30
+ when "Date"
31
+ attrVal.value = "25/10/2010"
32
+ when "aChoice"
33
+ attrVal.value = "selected"
34
+ when "checkList"
35
+ #first, we remove unselected items
36
+ attrFormValue.reject!{ |k,val| val == "0" }
37
+ EntitiesHelper.setAttrVals(attrFormValue, entity, attrVal)
38
+ attrVal.value = "isList"
39
+ when "selectOneInList"
40
+ EntitiesHelper.setAttrVals({ attrFormValue => 1 }, entity, attrVal)
41
+ attrVal.value = "isList"
42
+ when "openList"
43
+ attrFormValue.delete("_destroy")
44
+ map = attrFormValue.map{|a| [a[0][0..-14], a[1]]}
45
+
46
+ EntitiesHelper.setAttrVals(map, entity, attrVal)
47
+ attrVal.value = "isList"
48
+ when "entityDef"
49
+ attrVal.value = attrFormValue
50
+ else
51
+ attrVal.value = attrFormValue
52
+ end
53
+ attrVal.save
54
+ end
55
+ end
56
+
57
+ def EntitiesHelper.removeAttrVals(params, entity)
58
+ if params == nil; params = []; end
59
+ params.each do |attrType,attrFormValue|
60
+ attrDef = AttrDef.find(attrType);
61
+ attrVal = entity.attr_vals.find_all_by_attr_def_name(attrType)
62
+ if attrVal.size > 1
63
+ attrVal = entity.attr_vals.find(:first, :conditions => ["attr_def_name = ? and value = ?", attrType, attrFormValue])
64
+ else
65
+ attrVal = attrVal[0]
66
+ end
67
+ case attrVal.attrDef.dataType
68
+ when "String" || "Date" || "aChoice"
69
+ attrVal.destroy
70
+ when "checkList"
71
+ EntitiesHelper.removeAttrVals(attrFormValue, entity)
72
+ attrVal.destroy
73
+ when "selectOneInList"
74
+ #TODO implement
75
+ when "openList"
76
+ attrFormValue.delete("_destroy")
77
+ map = attrFormValue.map{|a| [a[0][0..-14], a[1]]}
78
+
79
+ EntitiesHelper.removeAttrVals(map, entity)
80
+ attrVal.value = "isList"
81
+ when "entityDef"
82
+ attrVal.destroy
83
+ end
84
+ end
85
+ end
86
+
87
+ def link_to_add_attrlistvalue(name, f, parent)
88
+ #fields = f.fields_for parent.id do |builder|
89
+ fields = render("attr_val_openList_element_form", :f => f, :parent => parent)
90
+ #end
91
+ link_to_function(name, "add_attrlistvalues(this, \"#{parent.attr_def_name}\", \"#{escape_javascript(fields)}\")")
92
+ end
93
+
94
+ def EntitiesHelper.setModelGraph(uri )
95
+ require 'graphviz'
96
+ # Create a new graph
97
+ g = GraphViz.new( :G, :type => :digraph )
98
+
99
+ # Graph configuration
100
+ g.node[:color] = "#ddaa66"
101
+ g.node[:style] = "filled"
102
+ g.node[:shape] = "box"
103
+ g.node[:penwidth] = "1"
104
+ g.node[:fontname] = "Trebuchet MS"
105
+ g.node[:fontsize] = "8"
106
+ g.node[:fillcolor]= "#ffeecc"
107
+ g.node[:fontcolor]= "#000000"
108
+ g.node[:margin] = "0.05"
109
+
110
+ # set global edge options
111
+ g.edge[:color] = "#999999"
112
+ g.edge[:weight] = "1"
113
+ g.edge[:fontsize] = "6"
114
+ g.edge[:fontcolor]= "#444444"
115
+ g.edge[:fontname] = "Verdana"
116
+
117
+ # Create two nodes
118
+ nodesMap = {}
119
+ @links = Array.new
120
+ Entity.all.each do |entity|
121
+ if entity.entity_def == nil
122
+ next
123
+ end
124
+ attrs = '';
125
+ entity.attr_vals.each do |attrVal|
126
+ if attrVal.attrDef.dataType == "entityDef"
127
+ #we need to add a link
128
+ if attrVal.attrDef.childEntityDef != nil
129
+ @links.push([attrVal.value,entity.id.to_s])
130
+ begin
131
+ attrs += attrVal.attrDef.label+':'+attrVal.attrDef.dataType+'="'+CGI.escapeHTML(attrVal.value)+'"\l'
132
+ rescue
133
+ end
134
+ else
135
+ attrs += '+ '+attrVal.attrDef.label+' : null\l'
136
+ end
137
+ else
138
+ begin
139
+ attrs += attrVal.attrDef.label+':'+attrVal.attrDef.dataType+'="'+CGI.escapeHTML(attrVal.value)+'"\l'
140
+ rescue
141
+ end
142
+ end
143
+ end
144
+ begin
145
+ nodesMap[entity.id.to_s] = g.add_nodes( entity.id.to_s, "shape" => "record", "label" => '{'+entity.label+':'+entity.entity_def.id.to_s+'|'+attrs+'}' )
146
+ g.add_nodes( entity.id.to_s,"shape" => "record", "label" => '{'+entity.label+':'+entity.entity_def.id.to_s+'|'+attrs+'}' )
147
+ rescue
148
+ end
149
+ end
150
+ @links.each do |link|
151
+ begin
152
+ g.add_edges( nodesMap[link[0]], nodesMap[link[1]])
153
+ rescue
154
+ end
155
+ end
156
+ # Generate output image
157
+ g.output( :png => uri )
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,68 @@
1
+ module Databaseformalizer
2
+ module EntityDefsHelper
3
+ def EntityDefsHelper.setMetaModelGraph(uri )
4
+ require 'graphviz'
5
+ # Create a new graph
6
+ g = GraphViz.new( :G, :type => :digraph )
7
+
8
+ # Graph configuration
9
+ g.node[:color] = "#ddaa66"
10
+ g.node[:style] = "filled"
11
+ g.node[:shape] = "box"
12
+ g.node[:penwidth] = "1"
13
+ g.node[:fontname] = "Trebuchet MS"
14
+ g.node[:fontsize] = "8"
15
+ g.node[:fillcolor]= "#ffeecc"
16
+ g.node[:fontcolor]= "#000000"
17
+ g.node[:margin] = "0.05"
18
+
19
+ # set global edge options
20
+ g.edge[:color] = "#999999"
21
+ g.edge[:weight] = "1"
22
+ g.edge[:fontsize] = "6"
23
+ g.edge[:fontcolor]= "#444444"
24
+ g.edge[:fontname] = "Verdana"
25
+ #g.edge[:dir] = "forward"
26
+ #g.edge[:arrowsize]= "0"
27
+
28
+ nodesMap = {}
29
+ @links = Array.new
30
+ EntityDef.all.each do |entityDef|
31
+ attrs = '';
32
+ entityDef.attrDefs.each do |attrDef|
33
+ if attrDef.dataType == "selectOneInList" || attrDef.dataType == "checkList" || attrDef.dataType == "openList"
34
+ attrs += '+ '+attrDef.label+' : '+attrDef.dataType+'\l'
35
+ childs =''
36
+ attrDef.attrDefChilds.each do |child|
37
+ childs += '+ '+child.label+' : '+child.childEntityDef.entity_def_name+' \n'
38
+ link = [child.childEntityDef.entity_def_name, attrDef.label+'_enum']
39
+ if !@links.include? link
40
+ @links.push(link)
41
+ end
42
+ end
43
+ enum = g.add_nodes( attrDef.label+'_enum', "shape" => "record", "label" => '{enumeration('+attrDef.label+')|'+childs+'}' )
44
+ g.add_edges(enum,entityDef.entity_def_name, "arrowhead" => "vee" )
45
+ elsif attrDef.dataType == "entityDef"
46
+ if attrDef.childEntityDef != nil
47
+ @links.push([attrDef.childEntityDef.entity_def_name,entityDef.entity_def_name])
48
+ attrs += '+ '+attrDef.label+' : '+attrDef.childEntityDef.label+'\l'
49
+ else
50
+ attrs += '+ '+attrDef.label+' : null\l'
51
+ end
52
+ else
53
+ attrs += '+ '+attrDef.label+' : '+attrDef.dataType+'\l'
54
+ end
55
+ end
56
+ nodesMap[entityDef.entity_def_name] = g.add_nodes( entityDef.entity_def_name, "shape" => "record", "label" => '{'+(entityDef.label|| "")+'|'+attrs+'|}' )
57
+ end
58
+
59
+ @links.each do |link|
60
+ edge = g.add_edges( link[0], link[1], "arrowhead" => "vee" )
61
+
62
+
63
+ end
64
+ # Generate output image
65
+ g.output( :png => uri )
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,48 @@
1
+ module Databaseformalizer
2
+ class AttrDef < ActiveRecord::Base
3
+ set_table_name "databaseformalizer_attr_defs"
4
+ set_primary_key :attr_def_name
5
+ attr_accessible :attr_def_name, :label, :description, :mandatory, :category, :dataType, :attrDefChild_ids
6
+
7
+ #Getting Entity
8
+ has_many :entityDefs, :through => :entityDefAttrDefs
9
+ has_many :entityDefAttrDefs, :foreign_key => "attr_def_name"
10
+
11
+
12
+ #getting parent Attribut
13
+ has_many :attrDefParents, :through => :attrJoinDefParent, :source => :attrJoinDefParent
14
+ has_many :attrJoinDefParent, :foreign_key => "child_name", :class_name => "AttrListJoinDef"
15
+
16
+ #getting childs (only for AttrListDef)
17
+ has_many :attrDefChilds, :through => :attrJoinDefChild, :source => :attrJoinDefChild
18
+ has_many :attrJoinDefChild, :foreign_key => "parent_name", :class_name => "AttrListJoinDef"
19
+
20
+ #gettin the entity def attribut
21
+ belongs_to :childEntityDef, :foreign_key => "child_entity_def_name", :class_name => "EntityDef"
22
+ end
23
+
24
+ #class AttrListDef < AttrDef
25
+ #getting childs
26
+ # has_many :attrDefChilds, :through => :attrListJoinDefs
27
+ # has_many :attrListJoinDefs, :foreign_key => "attrDef_name"
28
+ #end
29
+
30
+ #class AttrSimpleDef < AttrDef
31
+
32
+ #end
33
+
34
+ # == Schema Information
35
+ #
36
+ # Table name: attr_defs
37
+ #
38
+ # attr_def_name :string(255) primary key
39
+ # label :string(255)
40
+ # description :string(255)
41
+ # mandatory :boolean(1)
42
+ # category :string(255)
43
+ # dataType :string(255)
44
+ # created_at :datetime not null
45
+ # updated_at :datetime not null
46
+ # child_entity_def_name :string(255)
47
+ #
48
+ end
@@ -0,0 +1,17 @@
1
+ module Databaseformalizer
2
+ class AttrListJoinDef < ActiveRecord::Base
3
+ set_table_name "databaseformalizer_attr_list_join_defs"
4
+ belongs_to :attrJoinDefChild, :foreign_key => "child_name", :class_name => "AttrDef"
5
+ belongs_to :attrJoinDefParent , :foreign_key => "parent_name" , :class_name => "AttrDef"
6
+ end
7
+ end
8
+ # == Schema Information
9
+ #
10
+ # Table name: attr_list_join_defs
11
+ #
12
+ # parent_name :string(255) not null
13
+ # child_name :string(255) not null
14
+ # created_at :datetime not null
15
+ # updated_at :datetime not null
16
+ #
17
+
@@ -0,0 +1,18 @@
1
+ module Databaseformalizer
2
+ class AttrListJoinVal < ActiveRecord::Base
3
+ set_table_name "databaseformalizer_attr_list_join_vals"
4
+ belongs_to :attrJoinValChild, :foreign_key => "child_name_id", :class_name => "AttrVal"
5
+ belongs_to :attrJoinValParent , :foreign_key => "parent_name_id" , :class_name => "AttrVal"
6
+ end
7
+ end
8
+ # == Schema Information
9
+ #
10
+ # Table name: attr_list_join_vals
11
+ #
12
+ # id :integer(4) not null, primary key
13
+ # parent_name_id :integer(4)
14
+ # child_name_id :integer(4)
15
+ # created_at :datetime not null
16
+ # updated_at :datetime not null
17
+ #
18
+
@@ -0,0 +1,36 @@
1
+ module Databaseformalizer
2
+ class AttrVal < ActiveRecord::Base
3
+ set_table_name "databaseformalizer_attr_vals"
4
+ belongs_to :attrDef, :foreign_key => "attr_def_name", :class_name => "AttrDef"
5
+
6
+ has_many :attrValsEntities, :class_name => "AttrValsEntity"#, :source => :attr_val
7
+ has_many :entities, :through => :attrValsEntities
8
+
9
+ #getting parent Attribut
10
+ has_many :attrValParents, :through => :attrListJoinVal, :source => :attrJoinValParent
11
+ has_many :attrListJoinVal, :foreign_key => "child_name_id", :class_name => "AttrListJoinVal"
12
+
13
+ #gettind childs (only for AttrListDef)
14
+ has_many :attrValChilds, :through => :attrJoinValChild, :source => :attrJoinValChild
15
+ has_many :attrJoinValChild, :foreign_key => "parent_name_id", :class_name => "AttrListJoinVal"
16
+ end
17
+ # def AttrVal.get_or_create_attrVal(attrDef)
18
+ # attrVal = self.find_by_attr_def_name(attrDef)
19
+ # if attrVal == nil
20
+ # attrVal = AttrVal.new
21
+ # end
22
+ # attrVal
23
+ # end
24
+
25
+ end
26
+
27
+ # == Schema Information
28
+ #
29
+ # Table name: attr_vals
30
+ #
31
+ # id :integer(4) not null, primary key
32
+ # value :string(255)
33
+ # attr_def_name :string(255)
34
+ # created_at :datetime not null
35
+ # updated_at :datetime not null
36
+ #
@@ -0,0 +1,18 @@
1
+ module Databaseformalizer
2
+ class AttrValsEntity < ActiveRecord::Base
3
+ set_table_name "databaseformalizer_attr_vals_entities"
4
+ belongs_to :entity, :foreign_key => "entity_id"
5
+ belongs_to :attr_val, :foreign_key => "attr_val_id"
6
+ end
7
+ end
8
+
9
+ # == Schema Information
10
+ #
11
+ # Table name: attr_vals_entities
12
+ #
13
+ # entity_id :integer(4)
14
+ # attr_val_id :integer(4)
15
+ # created_at :datetime not null
16
+ # updated_at :datetime not null
17
+ #
18
+
@@ -0,0 +1,27 @@
1
+ module Databaseformalizer
2
+ class Entity < ActiveRecord::Base
3
+ set_table_name "databaseformalizer_entities"
4
+
5
+ belongs_to :entity_def
6
+
7
+ has_many :attr_vals, :through => :attr_vals_entities
8
+ has_many :attr_vals_entities, :class_name => "AttrValsEntity"
9
+
10
+ accepts_nested_attributes_for :attr_vals, :reject_if => lambda { |a| a[:value].blank? }, :allow_destroy => true
11
+
12
+ end
13
+
14
+ end
15
+
16
+ # == Schema Information
17
+ #
18
+ # Table name: entities
19
+ #
20
+ # id :integer(4) not null, primary key
21
+ # label :string(255)
22
+ # description :string(255)
23
+ # entity_def_id :string(255)
24
+ # created_at :datetime not null
25
+ # updated_at :datetime not null
26
+ #
27
+
@@ -0,0 +1,24 @@
1
+ module Databaseformalizer
2
+ class EntityDef < ActiveRecord::Base
3
+ set_table_name "databaseformalizer_entity_defs"
4
+ set_primary_key :entity_def_name
5
+ attr_accessible :entity_def_name, :label, :description, :attrDef_ids
6
+
7
+ has_many :attrDefs, :through => :entityDefAttrDefs
8
+ has_many :entityDefAttrDefs, :foreign_key => "entity_def_name", :dependent => :delete_all
9
+
10
+ has_many :entities, :dependent => :delete_all
11
+ #has_many :childAttrDefs, :foreign_key => "child_entity_def_name"
12
+ end
13
+ end
14
+ # == Schema Information
15
+ #
16
+ # Table name: entity_defs
17
+ #
18
+ # entity_def_name :string(255) not null, primary key
19
+ # label :string(255)
20
+ # description :string(255)
21
+ # created_at :datetime not null
22
+ # updated_at :datetime not null
23
+ #
24
+
@@ -0,0 +1,18 @@
1
+ module Databaseformalizer
2
+ class EntityDefAttrDef < ActiveRecord::Base
3
+ set_table_name "databaseformalizer_entity_def_attr_defs"
4
+ belongs_to :entityDef, :foreign_key => "entity_def_name"
5
+ belongs_to :attrDef, :foreign_key => "attr_def_name"
6
+ end
7
+ end
8
+ # == Schema Information
9
+ #
10
+ # Table name: entity_def_attr_defs
11
+ #
12
+ # id :integer(4) not null, primary key
13
+ # entity_def_name :string(255)
14
+ # attr_def_name :string(255)
15
+ # created_at :datetime not null
16
+ # updated_at :datetime not null
17
+ #
18
+
@@ -0,0 +1,74 @@
1
+ <%= form_for(@attr_def, :html => { :class => "form-horizontal"}) do |f| %>
2
+ <% if @attr_def.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@attr_def.errors.count, "error") %> prohibited this attr_def from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @attr_def.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="field">
15
+ <%= f.label :attr_def_name %><br />
16
+ <%= f.text_field :attr_def_name %>
17
+ </div>
18
+ <div class="field">
19
+ <%= f.label :label %><br />
20
+ <%= f.text_field :label %>
21
+ </div>
22
+ <div class="field">
23
+ <%= f.label :description %><br />
24
+ <%= f.text_field :description %>
25
+ </div>
26
+ <div class="field">
27
+ <%= f.label :mandatory %><br />
28
+ <%= f.check_box :mandatory %>
29
+ </div>
30
+ <div class="field">
31
+ <%= f.label :category %><br />
32
+ <%= f.text_field :category %>
33
+ </div>
34
+ <div class="dataType">
35
+ <%= f.label :dataType %><br />
36
+ <% types = ["string","integer","datetime","text","boolean","openList","entityDef","aChoice","selectOneInList"] %>
37
+ <%= f.select :dataType, types, {:selected => @attr_def.dataType}, html_options = {:onchange =>
38
+ "
39
+ jQuery('#childsEntityDef').hide();
40
+ jQuery('#childAttributs').hide();
41
+ if(this.value == 'openList' || this.value == 'selectOneInList')
42
+ jQuery('#childAttributs').show();
43
+ else if(this.value == 'entityDef')
44
+ jQuery('#childsEntityDef').show();
45
+ "} %>
46
+ </div>
47
+
48
+ <div id="childAttributs" class="input" style="display: none;">Child attributs choice:
49
+ <ul class="inputs-list">
50
+ <% Databaseformalizer::AttrDef.all.each do |attrdef| %>
51
+ <li>
52
+ <label>
53
+ <%= check_box_tag "databaseformalizer_attr_def[attrDefChild_ids][]", attrdef.id,@attr_def.attrDefChilds.include?(attrdef) -%>
54
+ <span><%= attrdef.label %></span>
55
+ </label>
56
+ </li>
57
+ <% end %>
58
+ <li><%= link_to 'New Attrdef', new_databaseformalizer_attr_def_path %></li>
59
+ </div>
60
+
61
+ <div id="childsEntityDef" style="display: none;">Entity def choice:
62
+ <%= collection_select(:databaseformalizer_attr_def, :child_entity_def_name, Databaseformalizer::EntityDef.all, :id, :label) %>
63
+ </div>
64
+
65
+ <div class="actions">
66
+ <%= f.submit %>
67
+ </div>
68
+ <% end %>
69
+ <script language="JavaScript">
70
+ if('<%=@attr_def.dataType%>' == 'openList' || '<%=@attr_def.dataType%>' == 'selectOneInList')
71
+ jQuery('#childAttributs').show();
72
+ else if('<%=@attr_def.dataType%>' == 'entityDef')
73
+ jQuery('#childsEntityDef').show();
74
+ </script>
@@ -0,0 +1,7 @@
1
+ <div id="metaModelPicture"></div>
2
+ <h1>Editing attr_def</h1>
3
+
4
+ <%= render 'form' %>
5
+
6
+ <%= link_to 'Show', @attr_def %> |
7
+ <%= link_to 'Back', databaseformalizer_attr_defs_path %>
@@ -0,0 +1,38 @@
1
+ <div id="metaModelPicture"></div>
2
+
3
+ <% content_for :title, "All AttrDefs" %>
4
+ <h1>Listing attr_defs</h1>
5
+
6
+ <table class="table table-striped table-bordered table-condensed table-sorter">
7
+ <tr>
8
+ <th>Name</th>
9
+ <th>Label</th>
10
+ <th>Description</th>
11
+ <th>Mandatory</th>
12
+ <th>Category</th>
13
+ <th>Datatype</th>
14
+ <th></th>
15
+ </tr>
16
+
17
+ <% @attr_defs.each do |attr_def| %>
18
+ <tr>
19
+ <td><%= attr_def.attr_def_name %></td>
20
+ <td><%= attr_def.label %></td>
21
+ <td><%= attr_def.description %></td>
22
+ <td><%= attr_def.mandatory %></td>
23
+ <td><%= attr_def.category %></td>
24
+ <td><%= attr_def.dataType %></td>
25
+ <td class="td-button-menu">
26
+ <div class="btn-group">
27
+ <%= link_to 'Show', attr_def, :class => 'btn btn-info btn-mini' %>
28
+ <%= link_to 'Edit', edit_databaseformalizer_attr_def_path(attr_def), :class => 'btn btn-warning btn-mini' %>
29
+ </div>
30
+ <%= button_to 'Destroy', attr_def, :method=>:delete, :class=>'btn btn-danger btn-mini' %>
31
+ </td>
32
+ </tr>
33
+ <% end %>
34
+ </table>
35
+
36
+ <br />
37
+
38
+ <%= link_to 'New Attr def', new_databaseformalizer_attr_def_path, :class => 'btn btn-primary' %>
@@ -0,0 +1,6 @@
1
+ <div id="metaModelPicture"></div>
2
+ <h1>New attr_def</h1>
3
+
4
+ <%= render 'form' %>
5
+
6
+ <%= link_to 'Back', databaseformalizer_attr_defs_path %>
@@ -0,0 +1,50 @@
1
+ <div id="metaModelPicture"></div>
2
+
3
+ <p>
4
+ <b>Name:</b>
5
+ <%= @attr_def.attr_def_name %>
6
+ </p>
7
+
8
+ <p>
9
+ <b>Label:</b>
10
+ <%= @attr_def.label %>
11
+ </p>
12
+
13
+ <p>
14
+ <b>Description:</b>
15
+ <%= @attr_def.description %>
16
+ </p>
17
+
18
+ <p>
19
+ <b>Mandatory:</b>
20
+ <%= @attr_def.mandatory %>
21
+ </p>
22
+
23
+ <p>
24
+ <b>Category:</b>
25
+ <%= @attr_def.category %>
26
+ </p>
27
+
28
+ <p>
29
+ <b>Datatype:</b>
30
+ <%= @attr_def.dataType %>
31
+ </p>
32
+ <% if @attr_def.childEntityDef != nil %>
33
+ <p>
34
+ <b>Child EntityDef: </b>
35
+ <%= link_to @attr_def.childEntityDef.label, @attr_def.childEntityDef %>
36
+ </p>
37
+ <%end%>
38
+ <p>
39
+ <b>Attrdef childs</b>
40
+ <ol><% @attr_def.attrDefChilds.each do |attrDef| %><li><%= link_to attrDef.label, attrDef %></li><%end%></ol>
41
+ </p>
42
+
43
+ <p>
44
+ <b>Attrdef parents</b>
45
+ <ol><% @attr_def.attrDefParents.each do |attrDef| %><li><%= link_to attrDef.label, attrDef %></li><%end%></ol>
46
+ </p>
47
+
48
+ <%= link_to 'Edit', edit_databaseformalizer_attr_def_path(@attr_def) %> |
49
+ <%= link_to 'Back', databaseformalizer_attr_defs_path %> |
50
+ <%= link_to 'New', new_databaseformalizer_attr_def_path %>
@@ -0,0 +1,29 @@
1
+ <%= form_for(@attr_val) do |f| %>
2
+ <% if @attr_val.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@attr_val.errors.count, "error") %> prohibited this attr_val from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @attr_val.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="field">
15
+ <%= f.label :value %><br />
16
+ <%= f.text_field :value %>
17
+ </div>
18
+ <div class="field">
19
+ <%= f.label :entity %><br />
20
+ <%= f.text_field :entity %>
21
+ </div>
22
+ <div class="field">
23
+ <%= f.label :attr_def_name %><br />
24
+ <%= f.text_field :attr_def_name %>
25
+ </div>
26
+ <div class="actions">
27
+ <%= f.submit %>
28
+ </div>
29
+ <% end %>