localtower 1.0.0 → 2.0.1

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 (227) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +133 -33
  3. data/app/assets/javascripts/localtower/application.js +30830 -0
  4. data/app/assets/javascripts/localtower/application.js.map +7 -0
  5. data/app/assets/stylesheets/localtower/application.css +1179 -0
  6. data/app/assets/stylesheets/src/application.css +68 -0
  7. data/app/controllers/localtower/pages_controller.rb +20 -35
  8. data/app/javascript/application.js +46 -0
  9. data/app/javascript/components/DarkSelect.js +115 -0
  10. data/app/javascript/components/ModernTooltip.js +26 -0
  11. data/app/javascript/components/NewMigrationForm.js +687 -0
  12. data/app/javascript/components/NewModelForm.js +432 -0
  13. data/app/javascript/components/data/Stores.js +294 -0
  14. data/app/views/layouts/localtower/application.html.erb +80 -66
  15. data/app/views/localtower/_migration.html.erb +30 -0
  16. data/app/views/localtower/pages/_alert_no_models.html.erb +1 -1
  17. data/app/views/localtower/pages/migrations.html.erb +24 -55
  18. data/app/views/localtower/pages/new_migration.html.erb +33 -96
  19. data/app/views/localtower/pages/new_model.html.erb +17 -83
  20. data/config/routes.rb +1 -1
  21. data/lib/localtower/engine.rb +9 -2
  22. data/lib/localtower/generators/migration.rb +218 -91
  23. data/lib/localtower/generators/model.rb +29 -20
  24. data/lib/localtower/generators/service_objects/insert_array.rb +5 -3
  25. data/lib/localtower/generators/service_objects/insert_defaults.rb +73 -3
  26. data/lib/localtower/generators/service_objects/insert_foreign_keys.rb +35 -0
  27. data/lib/localtower/generators/service_objects/insert_indexes.rb +41 -18
  28. data/lib/localtower/generators/service_objects/insert_nullable.rb +5 -3
  29. data/lib/localtower/status.rb +3 -1
  30. data/lib/localtower/tools.rb +20 -9
  31. data/lib/localtower/version.rb +1 -1
  32. data/lib/localtower.rb +0 -6
  33. data/public/com/favicon-64.png +0 -0
  34. data/public/com/twitter-cover-1.png +0 -0
  35. data/public/com/twitter-cover-2.png +0 -0
  36. data/public/fonts/Circular/CircularStd-Black.otf +0 -0
  37. data/public/fonts/Circular/CircularStd-BlackItalic.otf +0 -0
  38. data/public/fonts/Circular/CircularStd-Bold.otf +0 -0
  39. data/public/fonts/Circular/CircularStd-BoldItalic.otf +0 -0
  40. data/public/fonts/Circular/CircularStd-Book.otf +0 -0
  41. data/public/fonts/Circular/CircularStd-BookItalic.otf +0 -0
  42. data/public/fonts/Circular/CircularStd-Light Italic.otf +0 -0
  43. data/public/fonts/Circular/CircularStd-Light.otf +0 -0
  44. data/public/fonts/Circular/CircularStd-Medium.otf +0 -0
  45. data/public/fonts/Circular/CircularStd-MediumItalic.otf +0 -0
  46. data/public/fonts/Circular/Read Me.txt +5 -0
  47. data/public/fonts/Circular/www.dfonts.org.url +2 -0
  48. data/public/screenshots/v0.1.1/1_schema.png +0 -0
  49. data/public/screenshots/v0.1.1/2_models_1.png +0 -0
  50. data/public/screenshots/v0.1.1/2_models_2.png +0 -0
  51. data/public/screenshots/v0.1.1/3_relations.png +0 -0
  52. data/public/screenshots/v0.1.1/4_migrations.png +0 -0
  53. data/public/screenshots/v0.1.6/1_schema.png +0 -0
  54. data/public/screenshots/v0.1.6/2_models_1.png +0 -0
  55. data/public/screenshots/v0.1.6/3_relations.png +0 -0
  56. data/public/screenshots/v0.1.6/4_migrations.png +0 -0
  57. data/public/screenshots/v0.1.6/5_capture.png +0 -0
  58. data/public/screenshots/v1.0.0/migrations.png +0 -0
  59. data/public/screenshots/v1.0.0/models.png +0 -0
  60. data/public/screenshots/v1.0.0/new_migration.png +0 -0
  61. data/public/screenshots/v1.0.0/new_model.png +0 -0
  62. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.44.30.jpg +0 -0
  63. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.44.42.jpg +0 -0
  64. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.44.54.jpg +0 -0
  65. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.48.21.jpg +0 -0
  66. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.48.28.jpg +0 -0
  67. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.48.51.jpg +0 -0
  68. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.49.09.jpg +0 -0
  69. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.50.04.jpg +0 -0
  70. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.50.11.jpg +0 -0
  71. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.50.19.jpg +0 -0
  72. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.51.47.jpg +0 -0
  73. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.51.48.jpg +0 -0
  74. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.52.02.jpg +0 -0
  75. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.52.18.jpg +0 -0
  76. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.52.26.jpg +0 -0
  77. data/public/screenshots/v2.0.0/Screenshot 2024-11-18 at 22.52.38.jpg +0 -0
  78. data/public/screenshots/v2.0.0/migrations.png +0 -0
  79. data/public/screenshots/v2.0.0/new_migration.png +0 -0
  80. data/public/screenshots/v2.0.0/new_model.png +0 -0
  81. data/public/vendor/jquery-3.7.1.min.js +2 -0
  82. data/public/vendor/lucide.min.js +12 -0
  83. data/public/vendor/monokai-sublime.css +80 -0
  84. data/public/vendor/rails-ujs.min.js +8 -0
  85. data/spec/dummy/Gemfile +1 -1
  86. data/spec/dummy/Gemfile.lock +146 -104
  87. data/spec/dummy/config/database.yml +4 -6
  88. data/spec/dummy/config/puma.rb +1 -1
  89. data/spec/dummy/db/schema.rb +2 -39
  90. data/spec/dummy/lib/tasks/reset.rake +16 -0
  91. data/spec/dummy/log/development.log +22746 -15994
  92. data/spec/dummy/log/localtower.log +747 -1891
  93. data/spec/dummy/log/test.log +1145 -0
  94. data/spec/dummy/tmp/cache/sessions/localtower/726/FE1/_session_id%3A2%3A%3A69d6764784f832ea25700ea2f242210f3f8d94b48912b0f09ffc44311f0376eb +0 -0
  95. data/spec/dummy/tmp/cache/sessions/localtower/77E/121/_session_id%3A2%3A%3A0b3c1fe7154461ba023ba6c81dd1b999348757880b505f4b082faed263a627f9 +1 -0
  96. data/spec/dummy/tmp/cache/sessions/localtower/7EB/8A1/_session_id%3A2%3A%3Af88237c1d157546a5dcde894fd6c1410162a8eba318748d4ac573ee75e40df16 +0 -0
  97. data/spec/dummy/tmp/local_secret.txt +1 -0
  98. data/spec/factories/migration.rb +77 -40
  99. data/spec/factories/model.rb +46 -26
  100. data/spec/lib/localtower/generators/migration_spec.rb +16 -24
  101. data/spec/lib/localtower/generators/model_spec.rb +71 -8
  102. data/spec/lib/localtower/generators/service_objects/insert_array_spec.rb +1 -1
  103. data/spec/lib/localtower/generators/service_objects/insert_defaults_spec.rb +1 -1
  104. data/spec/lib/localtower/generators/service_objects/insert_foreign_keys_spec.rb +101 -0
  105. data/spec/lib/localtower/generators/service_objects/insert_indexes_spec.rb +1 -1
  106. data/spec/lib/localtower/generators/service_objects/insert_nullable_spec.rb +2 -2
  107. data/spec/spec_helper.rb +2 -3
  108. metadata +107 -238
  109. data/app/views/localtower/pages/models.html.erb +0 -63
  110. data/public/css/app.css +0 -55
  111. data/public/js/app.js +0 -337
  112. data/public/light-bootstrap-dashboard-master/assets/css/animate.min.css +0 -6
  113. data/public/light-bootstrap-dashboard-master/assets/css/bootstrap.min.css +0 -5
  114. data/public/light-bootstrap-dashboard-master/assets/css/demo.css +0 -61
  115. data/public/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css +0 -2789
  116. data/public/light-bootstrap-dashboard-master/assets/css/pe-icon-7-stroke.css +0 -632
  117. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.eot +0 -0
  118. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.svg +0 -212
  119. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.ttf +0 -0
  120. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.woff +0 -0
  121. data/public/light-bootstrap-dashboard-master/assets/img/default-avatar.png +0 -0
  122. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-0.jpg +0 -0
  123. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-1.jpg +0 -0
  124. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-2.jpg +0 -0
  125. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-3.jpg +0 -0
  126. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-4.jpg +0 -0
  127. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-5.jpg +0 -0
  128. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-6.jpg +0 -0
  129. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-7.jpg +0 -0
  130. data/public/light-bootstrap-dashboard-master/assets/img/faces/tim_vector.jpe +0 -0
  131. data/public/light-bootstrap-dashboard-master/assets/img/favicon.ico +0 -0
  132. data/public/light-bootstrap-dashboard-master/assets/img/loading-bubbles.svg +0 -14
  133. data/public/light-bootstrap-dashboard-master/assets/img/mask.png +0 -0
  134. data/public/light-bootstrap-dashboard-master/assets/img/new_logo.png +0 -0
  135. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-1.jpg +0 -0
  136. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-2.jpg +0 -0
  137. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-3.jpg +0 -0
  138. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-4.jpg +0 -0
  139. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-5.jpg +0 -0
  140. data/public/light-bootstrap-dashboard-master/assets/img/tim_80x80.png +0 -0
  141. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-checkbox-radio-switch.js +0 -502
  142. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-notify.js +0 -404
  143. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-select.js +0 -438
  144. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap.min.js +0 -7
  145. data/public/light-bootstrap-dashboard-master/assets/js/chartist.min.js +0 -9
  146. data/public/light-bootstrap-dashboard-master/assets/js/demo.js +0 -152
  147. data/public/light-bootstrap-dashboard-master/assets/js/jquery-1.10.2.js +0 -9789
  148. data/public/light-bootstrap-dashboard-master/assets/js/light-bootstrap-dashboard.js +0 -179
  149. data/public/logo-localtower-white-300.png +0 -0
  150. data/public/logo-localtower-white.png +0 -0
  151. data/public/logo-localtower.png +0 -0
  152. data/public/vendor/font-awesome.min.css +0 -4
  153. data/public/vendor/highlight-js-default.min.css +0 -9
  154. data/spec/dummy/app/models/post.rb +0 -3
  155. data/spec/dummy/app/models/user.rb +0 -3
  156. data/spec/dummy/db/migrate/20230119221452_create_users.rb +0 -14
  157. data/spec/dummy/db/migrate/20230119221751_change_users_at1674166670.rb +0 -7
  158. data/spec/dummy/db/migrate/20230119222054_create_posts.rb +0 -11
  159. data/spec/dummy/db/migrate/20230119222106_change_posts_at1674166865.rb +0 -5
  160. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/-Y/-YOiiBKqc2UODHFjctm8xc7xFoZaL7zOjWQj6qQ2wyE.cache +0 -1
  161. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/-d/-dwueM4vmPt8L51S3jeSyg_AjGDcj0GUN6pDpCA1gCg.cache +0 -3
  162. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/0g/0gaJnJQdtd2ACbihXxn8OnjLWlDjnQ_WxfgOpbiLzhg.cache +0 -1
  163. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/0r/0rFCsCV9kZnEYtZZ6sfig8329OU31bqjecDFqSVank8.cache +0 -1
  164. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/1J/1J2k_CpnQE3d-PZAQwOVGQALGkta4qVvhdsKjgG0e4Q.cache +0 -0
  165. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/2p/2pYVH2Z_syqh6ok8QYxJNKxXpx1Iwppf6JGElZI0gpw.cache +0 -0
  166. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/3W/3WBmqd-2V6q5N-jvbyp-tlcfn3aHYMwBppbOUm7x4qg.cache +0 -1
  167. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/4K/4KFPlHkhdDW0riGUmlbaR-kmDz6JUnQvY6fwW8qsdaE.cache +0 -3
  168. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/6x/6xMeRWmLpNK_flx6-JA3KazvUxSCxyPxHv9Zm3eC26Q.cache +0 -1
  169. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/7d/7dNqI_dCDJLJmI1oM4xwFp9nRRNOem-4P4OD7PMyz2E.cache +0 -0
  170. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/8X/8XquhxVcp5A8QquLtxO8NgKTMJch0eqQmzFmRGIZP6I.cache +0 -1
  171. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ah/AhdfXXtU63kXS4TnsH2Vi1yWgVkIEeV8Z8XA68hrNQc.cache +0 -0
  172. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Bt/BtAePnwLSGw82xUGI7wuhWDfuwarOQVS91YqCsweMcs.cache +0 -0
  173. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Bx/BxzoG0KxeNLac4xTNeJv3qfeytbNBw58xj2zD-xdbrE.cache +0 -2
  174. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/CC/CCD0ROPX0yxHwNpVZmuP8ZNtgQpaVCMXpdzC0Wb5n24.cache +0 -1
  175. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/DS/DS43oxBg6K5PMWLn2mTy_4EnxI03ehHkxpjV7NCi8yM.cache +0 -1
  176. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Do/Do83AoOat5W-c1g7piDGy2GMmffsY6JY0Qfuh5PY3GM.cache +0 -2
  177. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/EI/EI0Nxk-VRATWstMuVCVc0_GdYlQ-a0dx6n2g0l3vIik.cache +0 -0
  178. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/EN/ENhJnzJAU2IK-7aHqubj9N8Jo_UTmjG_VEQqyIkolQ8.cache +0 -1
  179. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Fc/FcS6VUHN3Bd4pHGqd5NHA8jA4OLwWrU94s3b4GGxX9c.cache +0 -1
  180. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/G0/G0kukI-r0q0Vbrg6e_jnYJoYcOX8K__h-mwKbCf4twE.cache +0 -0
  181. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/I1/I1Jw08-mz8xzgrgi6giCzpf1UmzGTSbl4eJEw4DAoJM.cache +0 -1
  182. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/IV/IVOO1dXBmgjieDk__g57p6aYt0Z3CmfTa32jhegoyko.cache +0 -3
  183. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/JY/JYPmv5WP4wxdI9EKEEPkK_fVtqeSLfmint_5E8fQLQ8.cache +0 -1
  184. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/MX/MXI3KxaQPZGImSvCNZ_TbQVruWCJ3E0xiVxza1ZCAjM.cache +0 -1
  185. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/OU/OUoioCqXALK909jXPV3VSyCJIdNC7bsogUfdnRTpc5o.cache +0 -1
  186. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/PH/PHjtqNLUPAUDiSlu5AbPjlIo20mOGNm0uNjMLhX2NvM.cache +0 -0
  187. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/RC/RC9vfALY5K634pTeau0BAhTHl7d5_5yA3tM-QTLiKtI.cache +0 -0
  188. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/RG/RG1PrmlixwaUlG8BV0kcm_3F7OQekxsrLYjBdf403-k.cache +0 -2
  189. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ut/UtoMO6n6FHTpRCGk9VfxlfTI2Ao2GYJ_6kMzx3B9VH8.cache +0 -1
  190. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/VE/VExnbpDk3LxYdPk3htUrZQXPI8NK_zlKtSFfVXJlxU4.cache +0 -1
  191. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Wm/WmKTjykiU-Tx_Faf5zduEeEQ-DozAs5omKToM2l1cZM.cache +0 -0
  192. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/X-/X-KjhDPd0nI155N_FaxFSgaOiYo0_ytqlmkBlLM7ayw.cache +0 -1
  193. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/XX/XXVhj-O91tJ5c8pz7DQlTABOv8TIRVg5haw9VOq9HuI.cache +0 -1
  194. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/YC/YCiifo5NCMwDChFqYFiV4EaYEx8hy3Efle1PsGbIdak.cache +0 -1
  195. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Ya/YayMISAqD-Y3vBFywwKrXbUovGf5o77HUF5s8mnQgO0.cache +0 -0
  196. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/Zl/Zl-NEb0aDLmZ9gN4gdY1OYlbUXD4JhkFY_y23m55zmo.cache +0 -0
  197. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_h/_hnjPptBeD3GP5B0iJR6pvyVkiMiq-o2TxaYmGf9KJo.cache +0 -3
  198. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/_p/_poEF6QbTPYJiQCFGoXxIXjmvcn6T0I87ElzJGHguk0.cache +0 -1
  199. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/aa/aaSj2zt8ddc87nZqTpOI9gRCKVnoalXKFBww7t4t3Kg.cache +0 -0
  200. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/bZ/bZHWUkrOLp0WM_Ogo36Qjt4cxDt-rOFgtcj4LNB-BVE.cache +0 -1
  201. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/cP/cPSNG_663TNT944Rke919luRS6FtpMwVc_7aDph645w.cache +0 -1
  202. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ce/ceq8fcZGIoqWrCl9vrCRrywEdx42iy9PrGG9CwFSIF4.cache +0 -0
  203. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/cl/cljhP0Jc018nLnG1rpdg-FUf6mlIqrQYvXTNXTNG9Bw.cache +0 -0
  204. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/dm/dmod3fTZdoKso2FGM5RTQtb4kTB6vywsiXLWDygYFN4.cache +0 -1
  205. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/dy/dySDGcUTqlKx2MTvOmIEP-WzhyhCfU5xhN9qgxbz3rI.cache +0 -0
  206. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/gQ/gQYdmEzbLjTcFCnsfzXzEmeminOchF263snAk3IvXM0.cache +0 -1
  207. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/gh/ghvuMAqccBGljlmEaI3Gt5tH5rEg6hseKYMYfRMkHdY.cache +0 -1
  208. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/gt/gt8QC7k92A4hXA3HlCpQulW73tqd6x63I3uT-YrGMj0.cache +0 -1
  209. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/hf/hfVg-y7dPSQKbb7V3I7M5w7IpOhDiIB2H31d2tmbZMU.cache +0 -0
  210. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/iF/iFLwyhZIu1Jxm77NUT2qWeTDMmyELW4U85t9rGE_KVg.cache +0 -0
  211. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/kF/kFlIcBBnSyKE00OjpM90pqSn93mLMUv9esz86nrO-Cs.cache +0 -1
  212. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ma/MazNt_5OaYexRuZnccZZ_7AONlxn1a4W3KdWyHyBdws.cache +0 -0
  213. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/ma/ma3w08gnDTeqwY2-C9BlToxA6-AS8bvXlu-nBiz0UYs.cache +0 -1
  214. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/n_/n_xYqQYhwEMQknb3jFQnjlxxBE9TzMNHCdJ-bEyZFIw.cache +0 -2
  215. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/nx/nxTv3sKVUQZADJyM3dPaVmUA78MIsMLD_K279yN_GsI.cache +0 -2
  216. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/pv/pv6tV3CDkIAmLXdU8EPLlNEkXAKJPufVD4VP30o4fWo.cache +0 -0
  217. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/qP/qPmv5snMrDw830S6hSICDcnIy7kVEWoFKXhGKT38lG4.cache +0 -2
  218. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/sY/sYvTb1uPWWmnHJNXKuW_xSco-aUb-rN2f0J35zSIzuc.cache +0 -1
  219. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/su/suQ_jjDxRiIn4VEqFJYKaBWJILaeGKBvoTv49XNX0vo.cache +0 -1
  220. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/u8/u8IrW5IIQ7espwk2Vpk23zheL9YZA0tnbKq9X7E-WA0.cache +0 -1
  221. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/wh/whzETExjcZCkn4msasD2aylgfhfpKPZrNxTkY-SOIDg.cache +0 -2
  222. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/x7/x7PYh8DJvPykcEqpVab2vcY9-GFz-3cqtoMlRAu94Uc.cache +0 -2
  223. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/y6/y6oxsJD3pAY9ph1_5M-77uiEjTVw8BheLZNygCKPm1g.cache +0 -1
  224. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/yH/yHZ-a1J23ZCf2n5mEHINMz23Iec2cLGTKauW7k4yGTE.cache +0 -0
  225. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/z7/z7KfUWYoSaGq8tQ5mbHwyfXyT3Pa4FWKJswHcIdJuds.cache +0 -1
  226. data/spec/dummy/tmp/cache/assets/sprockets/v4.0.0/zu/zuExWc5WHxeOUPZUKHl9a9ZRmN50g7jMOD28macn6M0.cache +0 -0
  227. data/spec/dummy/tmp/pids/server.pid +0 -1
@@ -1,103 +1,40 @@
1
1
  <% content_for :title do %>New Migration<% end %>
2
- <div class="row">
3
- <div class="col-md-12">
4
- <div class="card">
5
- <div class="header">
6
- <% if @models.empty? %>
7
- <%= render partial: 'alert_no_models' %>
8
- <% end %>
9
- <div class="alert alert-warning">
10
- <span>Remember, you can always edit your migration files manually before running "rails db:migrate"</span>
2
+ <div>
3
+ <div>
4
+ <% if @models.empty? %>
5
+ <%= render partial: 'alert_no_models' %>
6
+ <% end %>
7
+ </div>
8
+ <% if @models.any? %>
9
+ <%= form_tag migrations_path, class: "pb-10" do %>
10
+ <input type="hidden" id="form_attributes" name="migrations">
11
+ <div class="flex flex-col gap-2 pb-4">
12
+ <div class="block text-localtower-100">Migration name <span class="text-localtower-400">(optionnal)</span></div>
13
+ <div class="w-80">
14
+ <input autocomplete="off" type="text" data-selector="modelName" name="migration_name" class="px-2 py-1.5 rounded bg-localtower-600 border border-localtower-500 inline-block w-full outline-none focus:border-localtower-400 transition-colors text-localtower-100 placeholder:italic placeholder:text-localtower-450 focus:placeholder:text-localtower-600 disabled:cursor-not-allowed" placeholder="Ex: AddFieldsToUser" <%= @migrations.any? ? 'disabled' : '' %>>
11
15
  </div>
12
16
  </div>
13
- <div class="content">
14
- <%= form_tag migrations_path, class: "form" do %>
15
- <div class="row">
16
- <div class="container-table" data-selector="table">
17
- <table class="table table-hover table-striped">
18
- <thead>
19
- <th> <span data-selector=''>On Model</span></th>
20
- <th> <span data-selector=''>Action</span></th>
21
- <th> <span data-selector='belongs_to_label'>Belongs To</span></th>
22
- <th> <span data-selector='column_label'>Column</span></th>
23
- <th> <span data-selector='default_label'>Default</span></th>
24
- <th> <span data-selector='new_column_name_label'>New Column Name</span></th>
25
- <th> <span data-selector='column_type_label'>Type</span></th>
26
- <th> <span data-selector='index_options_label'>Index Options</span></th>
27
- <th> <span data-selector='nullable_label'>Can be null?</span></th>
28
- <th> <span data-selector=''></span></th>
29
- </thead>
30
- <tbody data-selector="tbody">
31
- <tr data-selector="tr">
32
- <td style='width: 300px;'>
33
- <%= select_tag "migrations[][table_name]", options_for_select(Localtower::Tools.models.collect {|p| [ p, p.table_name ] }), class: "form-control" %>
34
- </td>
35
- <td style='width: 220px;'>
36
- <%= select_tag "migrations[][action]", options_for_select(::Localtower::Generators::Migration::ACTIONS), class: "form-control", "data-selector" => "action" %>
37
- </td>
38
- <td>
39
- <%= select_tag "migrations[][belongs_to]", options_for_select(Localtower::Tools.models.collect {|p| [ p, p.table_name ] }), class: "form-control", "data-selector" => "belongs_to" %>
40
- </td>
41
- <td class="text-center">
42
- <input type="text" name="migrations[][column]" class="form-control" data-selector="column_text">
43
- <%= select_tag "migrations[][column_list]", options_for_select(::Localtower::Tools.all_columns), class: "form-control", include_blank: true, "data-selector" => "column_list" %>
44
- </td>
45
- <td>
46
- <%= select_tag "migrations[][default]", options_for_select(::Localtower::Generators::ServiceObjects::InsertDefaults::DEFAULTS), class: "form-control", include_blank: true, "data-selector" => "default_input" %>
47
- </td>
48
- <td>
49
- <input type="text" name="migrations[][new_column_name]" class="form-control" data-selector="new_column_name">
50
- </td>
51
- <td>
52
- <%= select_tag "migrations[][column_type]", options_for_select(::Localtower::Generators::Migration::TYPES), class: "form-control", "data-selector" => "column_type" %>
53
- </td>
54
- <td>
55
- <div data-selector="index_options">
56
- <div class="row">
57
- <div class="col-md-4">
58
- index: <br>
59
- <%= select_tag "migrations[][index][using]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::USING - ['none']), class: "form-control" %>
60
- </div>
61
- <div class="col-md-4">
62
- unique:
63
- <br>
64
- <%= select_tag "migrations[][index][unique]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::UNIQUE), class: "form-control" %>
65
- </div>
66
- <div class="col-md-4">
67
- algorithm
68
- <br>
69
- <%= select_tag "migrations[][index][algorithm]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::ALGO), class: "form-control" %>
70
- </div>
71
- </div>
72
- </div>
73
- </td>
74
- <td>
75
- <input data-selector="nullable_input" type="checkbox" value="true" name="migrations[][nullable]" class="form-control" checked>
76
- </td>
77
- <td>
78
- <div class="pull-right">
79
- <button class="btn btn-danger btn-xs pointer" data-selector="removeLineMigration">Remove line</button>
80
- </div>
81
- </td>
82
- </tr>
83
- </tbody>
84
- </table>
85
- </div>
86
- </div>
87
- <div class="row">
88
- <div class="col-md-12 text-center">
89
- <i class="pe-7s-plus pointer" data-selector="duplicateLineNewMigration" style="font-size: 3em;"></i>
90
- </div>
91
- </div>
92
- <div class="row">
93
- <div class="col-md-12 text-right">
94
- <button type="submit" value="true" class="btn btn-success btn-fill" data-selector="submitNewMigration">
95
- Generate the migration
96
- </button>
97
- </div>
98
- </div>
17
+ <div class="py-4 flex flex-col gap-4">
18
+ <label class="block text-localtower-100">Actions</label>
19
+ <div id="react-container-new-migration"></div>
20
+ </div>
21
+ <div>
22
+ <button type="submit" value="true" class="px-3 py-1.5 rounded-md bg-green-800 text-localtower-100 border border-green-700 inline-block outline-none hover:border-green-500 hover:bg-green-700 hover:text-white active:opacity-60 transition-colors text-md">
23
+ <%= @migrations.any? ? 'Add to Migration' : 'Generate Migration' %>
24
+ </button>
25
+ </div>
26
+ <% end %>
27
+ <% end %>
28
+ <% if @migrations.any? %>
29
+ <div class="py-10 border-t border-localtower-500 flex flex-col gap-4">
30
+ <h4 class="text-localtower-300">
31
+ There is a pending migration. All new actions will be added to this one:
32
+ </h4>
33
+ <div>
34
+ <% @migrations.take(1).each do |entry| %>
35
+ <%= render partial: 'localtower/migration', locals: { entry: entry } %>
99
36
  <% end %>
100
37
  </div>
101
38
  </div>
102
- </div>
39
+ <% end %>
103
40
  </div>
@@ -1,87 +1,21 @@
1
1
  <% content_for :title do %>New Model<% end %>
2
- <div class="row">
3
- <div class="col-md-12">
4
- <div class="card">
5
- <div class="header">
6
- <div class="alert alert-warning">
7
- <span>Remember, you can always edit your migration files manually before running "rails db:migrate"</span>
8
- </div>
9
- </div>
10
- <div class="content">
11
- <%= form_tag models_path, class: "form" do %>
12
- <div class="row">
13
- <div class="col-md-6">
14
- <div class="form-group">
15
- <label>Name of the Model</label>
16
- <input type="text" data-selector="modelName" name="model[model_name]" class="form-control">
17
- </div>
18
- </div>
19
- </div>
20
- <div class="row">
21
- <table class="table table-hover table-striped">
22
- <thead>
23
- <th>Type</th>
24
- <th>Column Name</th>
25
- <th>Default</th>
26
- <th>Index Options</th>
27
- <th>Can be null?</th>
28
- <th></th>
29
- </thead>
30
- <tbody data-selector="tbody">
31
- <tr data-selector="tr">
32
- <td>
33
- <%= select_tag "model[attributes][][attribute_type]", options_for_select(::Localtower::Generators::Migration::TYPES), class: "form-control" %>
34
- </td>
35
- <td>
36
- <input type="text" data-selector="attributeName" name="model[attributes][][attribute_name]" class="form-control">
37
- </td>
38
- <td>
39
- <%= select_tag "model[attributes][][default]", options_for_select(::Localtower::Generators::ServiceObjects::InsertDefaults::DEFAULTS), class: "form-control" %>
40
- </td>
41
- <td style='min-width: 240px'>
42
- <div class="row">
43
- <div class="col-md-4">
44
- index: <br>
45
- <%= select_tag "model[attributes][][index][using]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::USING), class: "form-control" %>
46
- </div>
47
- <div class="col-md-4">
48
- unique:
49
- <br>
50
- <%= select_tag "model[attributes][][index][unique]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::UNIQUE), class: "form-control" %>
51
- </div>
52
- <div class="col-md-4">
53
- algorithm
54
- <br>
55
- <%= select_tag "model[attributes][][index][algorithm]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::ALGO), class: "form-control" %>
56
- </div>
57
- </div>
58
- </td>
59
- <td>
60
- <input type="checkbox" value="true" name="model[attributes][][nullable]" class="form-control" checked>
61
- </td>
62
- <td>
63
- <div class="pull-right">
64
- <button class="btn btn-danger btn-xs pointer" data-selector="removeLineModel">Remove line</button>
65
- </div>
66
- </td>
67
- </tr>
68
- </tbody>
69
- </table>
70
- </div>
71
- <div class="row">
72
- <div class="col-md-12 text-center">
73
- <i class="pe-7s-plus pointer" data-selector="duplicateLineNewModel" style="font-size: 3em;"></i>
74
- </div>
75
- </div>
76
- <div class="row">
77
- <div class="col-md-12 text-right">
78
- <button type="submit" value="true" class="btn btn-success btn-fill" data-selector="submitNewModel">
79
- Generate the migration (and the model)
80
- </button>
81
- </div>
82
- </div>
83
- <% end %>
2
+ <div>
3
+ <%= form_tag models_path, class: "" do %>
4
+ <div class="flex flex-col gap-2">
5
+ <div class="block text-localtower-100">Model name <span class="text-localtower-400">(required)</span></div>
6
+ <div class="w-80">
7
+ <input autocomplete="off" type="text" data-selector="modelName" name="model[model_name]" class="px-2 py-1.5 rounded bg-localtower-600 border border-localtower-500 inline-block w-full outline-none focus:border-localtower-400 transition-colors text-localtower-100 placeholder:italic placeholder:text-localtower-450 focus:placeholder:text-localtower-600" placeholder="Ex: User" required>
84
8
  </div>
9
+ <input type="hidden" id="form_attributes" name="model[attributes]">
10
+ </div>
11
+ <div class="py-4 flex flex-col gap-2">
12
+ <label class="block text-localtower-100">Columns</label>
13
+ <div id="react-container-new-model"></div>
14
+ </div>
15
+ <div>
16
+ <button type="submit" value="true" class="px-3 py-1.5 rounded-md bg-green-800 text-localtower-100 border border-green-700 inline-block outline-none hover:border-green-500 hover:bg-green-700 hover:text-white active:opacity-60 transition-colors text-md">
17
+ Generate Model
18
+ </button>
85
19
  </div>
86
- </div>
20
+ <% end %>
87
21
  </div>
data/config/routes.rb CHANGED
@@ -4,10 +4,10 @@ Localtower::Engine.routes.draw do
4
4
  post 'migrations', to: 'pages#post_migrations'
5
5
 
6
6
  get 'models/new', to: 'pages#new_model', as: :new_model
7
- get 'models', to: 'pages#models', as: :models
8
7
  post 'models', to: 'pages#post_models'
9
8
 
10
9
  post 'actions', to: 'pages#post_actions', as: :actions
10
+ post 'rm_file', to: 'pages#rm_file', as: :rm_file
11
11
 
12
12
  root :to => redirect('models/new')
13
13
  end
@@ -2,8 +2,15 @@ module Localtower
2
2
  class Engine < ::Rails::Engine
3
3
  isolate_namespace Localtower
4
4
 
5
- initializer 'static assets' do |app|
6
- app.middleware.use ::ActionDispatch::Static, "#{root}/public"
5
+ initializer 'localtower.add_static_assets', before: :build_middleware_stack do |app|
6
+ app.config.middleware.use Rack::Deflater
7
+ app.config.middleware.use ::ActionDispatch::Static, "#{root}/public"
8
+ # Later: have a better assets pipeline to be able to version and cache assets forever
9
+ # app.config.middleware.use ::ActionDispatch::Static, "#{root}/public", headers: { "Cache-Control" => "public, max-age=31536000" }
10
+ end
11
+
12
+ initializer "localtower.assets.precompile" do |app|
13
+ app.config.assets.precompile += ["localtower/application.css", "localtower/application.js"]
7
14
  end
8
15
  end
9
16
  end