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,134 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>DATABASEFORMALIZER</title>
7
+
8
+ <%= javascript_include_tag(
9
+ "/javascripts/jquery.js",
10
+ "/javascripts/databaseformalizer.js",
11
+ "/bootstrap/js/bootstrap-transition.js",
12
+ "/bootstrap/js/bootstrap-alert.js",
13
+ "/bootstrap/js/bootstrap-modal.js",
14
+ "/bootstrap/js/bootstrap-dropdown.js",
15
+ "/bootstrap/js/bootstrap-tab.js",
16
+ "/bootstrap/js/bootstrap-toggle.js",
17
+ "/bootstrap/js/bootstrap-fixed-header.js",
18
+ "/bootstrap/js/bootstrap-collapse.js",
19
+ "/bootstrap/js/bootstrap-tooltip.js",
20
+ "/bootstrap/js/bootstrap-popover.js",
21
+ "/tablesorter/jquery.tablesorter.min.js",
22
+ "/tablesorter/jquery.tablesorter.js",
23
+ "/tablesorter/jquery.ui.datepicker.js",
24
+ "/jquery-ui/js/jquery-ui-1.8.21.custom.min.js",
25
+ "/jquery-validation/jquery.validate.min.js"
26
+ ) %>
27
+ <%= csrf_meta_tag %>
28
+ <%= stylesheet_link_tag(
29
+ "/bootstrap/css/cerulean/bootstrap.min.css",
30
+ "/bootstrap/css/bootstrap-responsive.css",
31
+ "/tablesorter/style.css",
32
+ "/bootstrap/css/bootstrap-toggle.css",
33
+ "/bootstrap/css/bootstrap-fixed-header.css",
34
+ "/jquery-ui/css/ui-lightness/jquery-ui-1.8.21.custom.css",
35
+ "/stylesheets/databaseformalizer.css") %>
36
+ <!--"/bootstrap/css/bootstrap.min.css","/bootstrap/css/amadeus.css",-->
37
+ </head>
38
+ <script language="javascript" type="text/javascript" >
39
+ $(document).ready(function(){
40
+ $('.table-fixed-header').fixedHeader();
41
+ });
42
+ </script>
43
+ <body>
44
+ <div class="navbar navbar-fixed-top">
45
+ <div class="navbar-inner">
46
+ <div class="container">
47
+ <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
48
+ <span class="icon-bar"></span>
49
+ <span class="icon-bar"></span>
50
+ <span class="icon-bar"></span>
51
+ </a>
52
+ <a class="brand" href="/databaseformalizer">Database Formalizer</a>
53
+ <div class="nav-collapse" id="main-menu"></div>
54
+
55
+
56
+ <ul class="nav pull-right">
57
+
58
+ <%= render :partial => "elise/account/header_menu" %>
59
+
60
+ <% if current_user.can_see("databaseformalizer")%>
61
+ <li class="dropdown">
62
+ <div class="btn-group">
63
+ <a class="btn dropdown-toggle btn-success" data-toggle="dropdown" href="#">
64
+ <i class="icon-wrench"></i>Administration
65
+ <span class="caret"></span>
66
+ </a>
67
+
68
+ <ul class="dropdown-menu">
69
+ <li><%= link_to "Users", users_path %></li>
70
+ <li><%= link_to "Access rights", elise_features_path %></li>
71
+ <li><%= link_to "Roles", roles_path %></li>
72
+ <li class="divider"></li>
73
+ <p class="nav-header">Databaseformalizer</p>
74
+ <li><%= link_to "entity def", databaseformalizer_entity_defs_path %></li>
75
+ <li><%= link_to "attributs def", databaseformalizer_attr_defs_path %></li>
76
+ <li><%= link_to "entities", databaseformalizer_entities_path %></li>
77
+ </ul>
78
+ </div>
79
+ </li>
80
+ <%end%>
81
+ </ul>
82
+ </div>
83
+ <%= render :partial => "shared/navigation" %>
84
+ </div>
85
+ </div>
86
+
87
+ <div class="container-fluid">
88
+ <div class="row-fluid">
89
+ <div class="span2">
90
+ <div class="sidebar-nav-fixed">
91
+ <ul id="nav-list" class="nav nav-list">
92
+ <li><%= link_to "entity def", databaseformalizer_entity_defs_path %></li>
93
+ <li><%= link_to "attributs def", databaseformalizer_attr_defs_path %></li>
94
+ <li><%= link_to "entities", databaseformalizer_entities_path %></li>
95
+ </ul>
96
+ </div>
97
+ </div>
98
+ <div class="span10">
99
+ <div class="container">
100
+ <div class="row">
101
+ <div class="span10">
102
+ <!-- Flash Display -->
103
+ <% if !flash[:error].nil? %>
104
+ <div class="alert alert-error">
105
+ <a class="close" data-dismiss="alert" href="#">×</a>
106
+ <b>Error:</b> <span id="flash_notice"><%= flash[:error] %></span>
107
+ </div>
108
+ <% end %>
109
+ <% if !flash[:notice].nil? %>
110
+ <div class="alert alert-success">
111
+ <a class="close" data-dismiss="alert" href="#">×</a>
112
+ <b>Information:</b> <span id="flash_notice"><%= flash[:notice] %></span>
113
+ </div>
114
+ <% end %>
115
+ <% if !flash[:warning].nil? %>
116
+ <div class="alert alert-info">
117
+ <a class="close" data-dismiss="alert" href="#">×</a>
118
+ <b>Warning:</b><span id="flash_notice"> <%= flash[:warning] %></span>
119
+ </div>
120
+ <% end %>
121
+ <div class="visual-border">
122
+ <%= content_for?(:content) ? yield(:content) : yield %>
123
+ </div>
124
+ </div>
125
+ <div class="span2">
126
+ <!-- Empty because we don't want the border in all the page -->
127
+ </div>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+ </div>
133
+ </body>
134
+ </html>
@@ -0,0 +1,34 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+ $LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{databaseformalizer}
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Christophe Desclaux"]
12
+ s.date = %q{2012-05-01}
13
+ s.email = %q{descl@zouig.org}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.rubygems_version = %q{1.3.7}
20
+ s.summary = %q{a gem for generating databases interaction controllers}
21
+
22
+ s.add_dependency('ruby-graphviz', '~> 1.0.5')
23
+ s.add_dependency('jquery-rails', "~> 1.0.19")
24
+
25
+ if s.respond_to? :specification_version then
26
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
+ s.specification_version = 3
28
+
29
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
30
+ else
31
+ end
32
+ else
33
+ end
34
+ end
@@ -0,0 +1,101 @@
1
+ module ActiveRecord
2
+ module ActsAsEntity
3
+
4
+ extend ActiveSupport::Concern
5
+
6
+ def self.included(base)
7
+ base.extend ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def acts_as_entity(entityDef,options = {})
12
+ after_initialize :setAttrs
13
+ class << self
14
+ alias_method :find_entities, :find#tester avec self??
15
+ end
16
+ include ActiveRecord::ActsAsEntity::InstanceMethods
17
+
18
+ # create new class methods
19
+ instance_eval <<-DEFINE_METHODS
20
+ public
21
+ def find(args)
22
+ find_entities(args, :conditions => "entity_def_id = '#{entityDef}' ")
23
+ end
24
+ def all
25
+ find_entities(:all, :conditions => "entity_def_id = '#{entityDef}' " )
26
+ end
27
+ DEFINE_METHODS
28
+ end
29
+ end
30
+
31
+ module InstanceMethods
32
+
33
+ #Used to initialize the parameters of an instance before read them in the child app
34
+ def setAttrs( args = nil)
35
+ self.attr_vals.each do |attrVal|
36
+
37
+ #if attrVal.attrDef.dataType == 'entityDef' && ttrVal.attr_def_name.end_with('Id')
38
+ #we add a virtual attr
39
+ # write_attribute(attrVal.attr_def_name.remove('Id'), Databaseformalizer::Entity.find(attrVal.value))
40
+ #end
41
+
42
+ #if the attribut already exist we add it to the list
43
+ if read_attribute(attrVal.attr_def_name) != nil
44
+ result = read_attribute(attrVal.attr_def_name)
45
+
46
+ #we check if the result is a list of elements or just an item
47
+ if result.class == Array
48
+ result.push(attrVal.value)
49
+ else
50
+ tmp = result
51
+ result = [tmp,attrVal.value]
52
+ end
53
+
54
+ write_attribute(attrVal.attr_def_name, result)
55
+ else
56
+ write_attribute(attrVal.attr_def_name, attrVal.value)
57
+ end
58
+ end
59
+ end
60
+
61
+ #update the instance elements attributs after edit on instances from the child app
62
+ def update_attributes(attrs)
63
+ #check if have an entity
64
+ #hard bug fix because update_attributes is launch for ALL items...
65
+ if self.class.to_s.include? 'Databaseformalizer::'
66
+ self.attributes = attrs
67
+ save
68
+ else
69
+ for attr in attrs
70
+ update_attribute(attr[0],attr[1])
71
+ end
72
+ end
73
+ return true
74
+ end
75
+ #update the instance elements attributs after edit on instances from the child app
76
+ def update_attribute(key,value)
77
+ #check if have an entity
78
+ #hard bug fix because update_attributes is launch for ALL items...
79
+ if self.class.to_s.include? 'Databaseformalizer::'
80
+ self.attributes = attrs
81
+ save
82
+ else
83
+
84
+ attrVal = self.attr_vals.find_by_attr_def_name(key)
85
+ if attrVal == nil
86
+ attrDef = Databaseformalizer::AttrDef.find(key);
87
+ attrVal = Databaseformalizer::AttrVal.new(:attrDef => attrDef)
88
+ self.attr_vals << attrVal
89
+ end
90
+ attrVal.value = value
91
+ attrVal.save!
92
+ end
93
+ return true
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ class ActiveRecord::Base
100
+ include ActiveRecord::ActsAsEntity
101
+ end
@@ -0,0 +1,21 @@
1
+ module Databaseformalizer
2
+ ## Define ControllerMethods
3
+ module Controller
4
+ ## this one manages the usual self.included, klass_eval stuff
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ before_filter :set_special_layout_databaseformalizer
8
+ end
9
+
10
+ def set_special_layout_databaseformalizer
11
+ module_name = self.class.name.split("::").first
12
+ if module_name == 'Databaseformalizer'
13
+ self.class.layout "databaseformalizer/layouts/application"
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ ::ActionController::Base.send :include, Databaseformalizer::Controller
20
+
21
+
@@ -0,0 +1,3 @@
1
+ module ApplicationHelper
2
+
3
+ end
@@ -0,0 +1,27 @@
1
+ module Databaseformalizer
2
+ require 'acts_as_entity/base'
3
+ #the engine and controller need to be load with path in order to not load the parent plugin engine
4
+ require File.expand_path('../engine', __FILE__)
5
+ require File.expand_path('../application_controller', __FILE__)
6
+
7
+ module Databaseformalizer
8
+
9
+ end
10
+
11
+
12
+ #we define the routes there
13
+ def extraRoutes(map)
14
+ mount_at = '/databaseformalizer'
15
+ map.with_options(:path_prefix => mount_at, :name_prefix => "databaseformalizer_") do |t|
16
+ t.resources :entities, :controller => "databaseformalizer/entities"
17
+ t.resources :entity_defs, :controller => "databaseformalizer/entity_defs"
18
+ t.resources :attr_defs, :controller => "databaseformalizer/attr_defs"
19
+ end
20
+
21
+ map.databaseformalizer 'databaseformalizer',
22
+ :action => 'index',
23
+ :controller => 'databaseformalizer/dbformahome'
24
+
25
+ end
26
+ module_function :extraRoutes
27
+ end
data/lib/engine.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'databaseformalizer'
2
+ require 'rails'
3
+ require 'action_controller'
4
+ require 'application_helper'
5
+
6
+ module Databaseformalizer
7
+ class Engine < Rails::Engine
8
+ # Config defaults
9
+ config.widget_factory_name = "dbformalizer factory"
10
+ config.mount_at = '/databaseformalizer'
11
+
12
+ # Load rake tasks
13
+ rake_tasks do
14
+ load File.join(File.dirname(__FILE__), 'rails/railties/tasks.rake')
15
+ end
16
+
17
+
18
+ initializer "static assets" do |app|
19
+ app.middleware.use ::ActionDispatch::Static, "#{root}/public"
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Generate the code like the usual scaffold for managing an entitydef directly in you application
3
+
4
+ Example:
5
+ rails generate entity_def entitydefname
6
+
7
+ This will create:
8
+ the model, the helper, the views and the controller
@@ -0,0 +1,39 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/named_base'
3
+
4
+ class String
5
+ def snake_case
6
+ return downcase if match(/\A[A-Z]+\z/)
7
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
8
+ gsub(/([a-z])([A-Z])/, '\1_\2').
9
+ downcase
10
+ end
11
+
12
+ end
13
+
14
+ class EntityDefGenerator < Rails::Generators::NamedBase
15
+ source_root File.expand_path('../templates', __FILE__)
16
+
17
+
18
+
19
+ def manifest
20
+ lower_name = class_name[0, 1].downcase + class_name[1..-1]
21
+ high_name = class_name[0, 1].upcase + class_name[1..-1]
22
+ singular_name = lower_name.singularize
23
+ plural_name = class_name.pluralize
24
+ snake_name = lower_name.pluralize.snake_case
25
+
26
+ template "controller.rb", File.join(["app/controllers/", "#{snake_name}_controller.rb"].flatten)
27
+ template "helper.rb", File.join(["app/helpers/", "#{snake_name}_helper.rb"].flatten)
28
+ template "model.rb", File.join(["app/models/", "#{singular_name.snake_case}.rb"].flatten)
29
+
30
+ empty_directory File.join("app/views", snake_name)
31
+ template "view/_form.html.erb", File.join(["app/views/#{snake_name}/", "_form.html.erb"].flatten)
32
+ template "view/edit.html.erb", File.join(["app/views/#{snake_name}/", "edit.html.erb"].flatten)
33
+ template "view/index.html.erb", File.join(["app/views/#{snake_name}/", "index.html.erb"].flatten)
34
+ template "view/new.html.erb", File.join(["app/views/#{snake_name}/", "new.html.erb"].flatten)
35
+ template "view/show.html.erb", File.join(["app/views/#{snake_name}/", "show.html.erb"].flatten)
36
+
37
+ route "resources :#{snake_name}"
38
+ end
39
+ end
@@ -0,0 +1,98 @@
1
+ class <%= plural_name.camelize %>Controller < ApplicationController
2
+ # GET /<%= plural_name %>
3
+ # GET /<%= plural_name %>.xml
4
+
5
+ def index
6
+ @<%= plural_name %> = <%= class_name %>.all
7
+
8
+ respond_to do |format|
9
+ format.html # index.html.erb
10
+ format.xml { render :xml => @<%= plural_name %> }
11
+ end
12
+ end
13
+
14
+ # GET /<%= plural_name %>/1
15
+ # GET /<%= plural_name %>/1.xml
16
+ def show
17
+ @<%= singular_name %> = <%= class_name %>.find(params[:id])
18
+
19
+ respond_to do |format|
20
+ format.html # show.html.erb
21
+ format.xml { render :xml => @<%= singular_name %> }
22
+ end
23
+ end
24
+
25
+ # GET /<%= plural_name %>/new
26
+ # GET /<%= plural_name %>/new.xml
27
+ def new
28
+ @<%= singular_name %> = <%= class_name %>.new
29
+
30
+ @attrs = Array.new
31
+ attrsList = Databaseformalizer::EntityDef.find("<%= class_name %>").attrDefs
32
+ attrsList.each do |attr|
33
+ @attrs << Databaseformalizer::AttrDef.find(attr)
34
+ end
35
+
36
+ respond_to do |format|
37
+ format.html # new.html.erb
38
+ format.xml { render :xml => @<%= singular_name %> }
39
+ end
40
+ end
41
+
42
+ # GET /<%= plural_name %>/1/edit
43
+ def edit
44
+ @<%= singular_name %> = <%= class_name %>.find(params[:id])
45
+ end
46
+
47
+ # POST /<%= plural_name %>
48
+ # POST /<%= plural_name %>.xml
49
+ def create
50
+ @<%= singular_name %> = <%= class_name %>.new(
51
+ :entity_def_id => "<%= class_name %>",
52
+ :label=>params[:<%= singular_name %>][:label],
53
+ :description => params[:<%= singular_name %>][:description]
54
+ )
55
+ Databaseformalizer::EntityDef.find("<%= class_name %>").attrDefs.each do |attr|
56
+ if params[:attr_vals][attr.label] != nil
57
+ @planned_event.update_attribute(attr.label, params[:attr_vals][attr.label])
58
+ end
59
+ end
60
+ respond_to do |format|
61
+ if @<%= singular_name %>.save
62
+ format.html { redirect_to(@<%= singular_name %>, :notice => '<%= class_name %> was successfully created.') }
63
+ format.xml { render :xml => @<%= singular_name %>, :status => :created, :location => @<%= singular_name %> }
64
+ else
65
+ format.html { render :action => "new" }
66
+ format.xml { render :xml => @<%= singular_name %>.errors, :status => :unprocessable_entity }
67
+ end
68
+ end
69
+ end
70
+
71
+ # PUT /<%= plural_name %>/1
72
+ # PUT /<%= plural_name %>/1.xml
73
+ def update
74
+ @<%= singular_name %> = <%= class_name %>.find(params[:id])
75
+
76
+ respond_to do |format|
77
+ if @<%= singular_name %>.update_attributes(params[:<%= singular_name %>])
78
+ format.html { redirect_to(@<%= singular_name %>, :notice => response) }
79
+ format.xml { head :ok }
80
+ else
81
+ format.html { render :action => "edit" }
82
+ format.xml { render :xml => @<%= singular_name %>.errors, :status => :unprocessable_entity }
83
+ end
84
+ end
85
+ end
86
+
87
+ # DELETE /<%= plural_name %>/1
88
+ # DELETE /<%= plural_name %>/1.xml
89
+ def destroy
90
+ @<%= singular_name %> = <%= class_name %>.find(params[:id])
91
+ @<%= singular_name %>.destroy
92
+
93
+ respond_to do |format|
94
+ format.html { redirect_to(<%= plural_name %>_url) }
95
+ format.xml { head :ok }
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,2 @@
1
+ module <%= plural_name.camelize %>Helper
2
+ end
@@ -0,0 +1,3 @@
1
+ class <%= singular_name.camelize %> < Databaseformalizer::Entity
2
+ acts_as_entity :<%= singular_name.camelize %>
3
+ end
@@ -0,0 +1,35 @@
1
+ <%%= form_for(@<%= singular_name %>, :html => { :class => "form-horizontal"}) do |f| %>
2
+ <%% if @<%= singular_name %>.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%%= pluralize(@<%= singular_name %>.errors.count, "error") %> prohibited this <%= singular_name %> from being saved:</h2>
5
+
6
+ <ul>
7
+ <%% @<%= singular_name %>.errors.full_messages.each do |msg| %>
8
+ <li><%%= msg %></li>
9
+ <%% end %>
10
+ </ul>
11
+ </div>
12
+ <%% end %>
13
+ <div class="control-group">
14
+ <label class="control-label" for="label"><%%= f.label :label %></label>
15
+ <div class="controls">
16
+ <%%= f.text_field :label %>
17
+ </div>
18
+ <label class="control-label" for="description"><%%= f.label :description %></label>
19
+ <div class="controls">
20
+ <%%= f.text_field :description %>
21
+ </div>
22
+ </div>
23
+ <fieldset>
24
+ <legend>Description</legend>
25
+ <%%= fields_for :attr_vals, @attr_vals, :remote => true do |builder| %>
26
+ <%% @attrs.each do |attrDef| %>
27
+ <%%= render("databaseformalizer/entities/attr_val_form_one", :parent => @<%= singular_name %>.entity_def, :f => builder, :attrDef => attrDef, :entity => @<%= singular_name %> ) %>
28
+ <%%end%>
29
+ <%%end%>
30
+ </fieldset>
31
+ <div class="form-actions">
32
+ <%%= f.submit nil, :class=>"btn btn-primary" %>
33
+ <input type="reset" value="Reset">
34
+ </div>
35
+ <%% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Editing <%= singular_name %></h1>
2
+
3
+ <%%= render 'form' %>
4
+
5
+ <%%= link_to 'Show', @<%= singular_name %> %> |
6
+ <%%= link_to 'Back', <%= plural_name %>_path %>
@@ -0,0 +1,27 @@
1
+ <h1>Listing <%= plural_name %></h1>
2
+
3
+ <table class="table table-striped table-bordered table-condensed table-sorter table-fixed-header">
4
+ <thead class="header">
5
+ <tr>
6
+ <th>label</th>
7
+ <th></th>
8
+ </tr>
9
+ </thead>
10
+
11
+ <%% @<%= plural_name %>.each do |<%= singular_name %>| %>
12
+ <tr>
13
+ <td><%%= <%= singular_name %>.label %></td>
14
+ <td class="td-button-menu">
15
+ <div class="btn-group">
16
+ <%%= link_to 'Show', <%= singular_name %>, :class => 'btn btn-info btn-mini' %>
17
+ <%%= link_to 'Edit', edit_databaseformalizer_entity_path(<%= singular_name %>), :class => 'btn btn-warning btn-mini' %>
18
+ </div>
19
+ <%%= button_to "Destroy", <%= singular_name %>, :method=>:delete, :class=>'btn btn-danger btn-mini' %>
20
+ </td>
21
+ </tr>
22
+ <%% end %>
23
+ </table>
24
+
25
+ <br />
26
+
27
+ <%%= link_to "new <%= singular_name %>", new_<%= singular_name %>_path, :class => 'btn btn-primary' %>
@@ -0,0 +1,5 @@
1
+ <h1>New <%= singular_name %></h1>
2
+
3
+ <%%= render('form', :type => "new") %>
4
+
5
+ <%%= link_to 'Back', <%= plural_name %>_path %>
@@ -0,0 +1,3 @@
1
+
2
+ <%%= link_to 'Edit', edit_<%= singular_name %>_path(@<%= singular_name %>) %> |
3
+ <%%= link_to 'Back', <%= plural_name %>_path %>
@@ -0,0 +1,52 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ class DatabaseformalizerGenerator < Rails::Generators::Base
5
+ include Rails::Generators::Migration
6
+
7
+ def self.source_root
8
+ File.join(File.dirname(__FILE__), 'templates')
9
+ end
10
+
11
+ def self.next_migration_number(dirname) #:nodoc:
12
+ if ActiveRecord::Base.timestamped_migrations
13
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
14
+ else
15
+ "%.3d" % (current_migration_number(dirname) + 1)
16
+ end
17
+ end
18
+
19
+
20
+ # Every method that is declared below will be automatically executed when the generator is run
21
+
22
+ def create_migration_file
23
+ f = File.open File.join(File.dirname(__FILE__), 'templates', 'schema.rb')
24
+ schema = f.read; f.close
25
+
26
+ schema.gsub!(/ActiveRecord::Schema.*\n/, '')
27
+ schema.gsub!(/^end\n*$/, '')
28
+
29
+ f = File.open File.join(File.dirname(__FILE__), 'templates', 'migration.rb')
30
+ migration = f.read; f.close
31
+ migration.gsub!(/SCHEMA_AUTO_INSERTED_HERE/, schema)
32
+
33
+ tmp = File.open "tmp/~migration_ready.rb", "w"
34
+ tmp.write migration
35
+ tmp.close
36
+
37
+ migration_template '../../../tmp/~migration_ready.rb',
38
+ 'db/migrate/create_databaseformalizer_tables.rb'
39
+ remove_file 'tmp/~migration_ready.rb'
40
+ end
41
+
42
+ def copy_initializer_file
43
+ copy_file 'initializer.rb', 'config/initializers/databaseformalizer.rb'
44
+ end
45
+
46
+ def update_application_template
47
+ f = File.open "app/views/layouts/application.html.erb"
48
+ layout = f.read; f.close
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,8 @@
1
+ module Databaseformalizer
2
+ class Engine < Rails::Engine
3
+
4
+ config.mount_at = '/databaseformalizer'
5
+ config.widget_factory_name = 'Factory Name'
6
+
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ class CreateDatabaseformalizerTables < ActiveRecord::Migration
2
+ def self.up
3
+ SCHEMA_AUTO_INSERTED_HERE
4
+ end
5
+
6
+ def self.down
7
+
8
+ end
9
+ end