localtower 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +38 -0
  3. data/Rakefile +33 -0
  4. data/app/controllers/localtower/application_controller.rb +5 -0
  5. data/app/controllers/localtower/pages_controller.rb +55 -0
  6. data/app/helpers/localtower/application_helper.rb +19 -0
  7. data/app/views/layouts/localtower/application.html.erb +94 -0
  8. data/app/views/localtower/pages/dashboard.html.erb +55 -0
  9. data/app/views/localtower/pages/migrations.html.erb +99 -0
  10. data/app/views/localtower/pages/models.html.erb +78 -0
  11. data/app/views/localtower/pages/relations.html.erb +53 -0
  12. data/config/routes.rb +16 -0
  13. data/lib/localtower.rb +19 -0
  14. data/lib/localtower/engine.rb +9 -0
  15. data/lib/localtower/generators/migration.rb +275 -0
  16. data/lib/localtower/generators/model.rb +36 -0
  17. data/lib/localtower/generators/relation.rb +55 -0
  18. data/lib/localtower/tools.rb +173 -0
  19. data/lib/localtower/version.rb +3 -0
  20. data/lib/tasks/localtower_tasks.rake +4 -0
  21. data/public/css/app.css +29 -0
  22. data/public/js/app.js +106 -0
  23. data/public/light-bootstrap-dashboard-master/assets/css/animate.min.css +6 -0
  24. data/public/light-bootstrap-dashboard-master/assets/css/bootstrap.min.css +5 -0
  25. data/public/light-bootstrap-dashboard-master/assets/css/demo.css +61 -0
  26. data/public/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css +2815 -0
  27. data/public/light-bootstrap-dashboard-master/assets/css/pe-icon-7-stroke.css +632 -0
  28. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.eot +0 -0
  29. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.svg +212 -0
  30. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.ttf +0 -0
  31. data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.woff +0 -0
  32. data/public/light-bootstrap-dashboard-master/assets/img/default-avatar.png +0 -0
  33. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-0.jpg +0 -0
  34. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-1.jpg +0 -0
  35. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-2.jpg +0 -0
  36. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-3.jpg +0 -0
  37. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-4.jpg +0 -0
  38. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-5.jpg +0 -0
  39. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-6.jpg +0 -0
  40. data/public/light-bootstrap-dashboard-master/assets/img/faces/face-7.jpg +0 -0
  41. data/public/light-bootstrap-dashboard-master/assets/img/faces/tim_vector.jpe +0 -0
  42. data/public/light-bootstrap-dashboard-master/assets/img/favicon.ico +0 -0
  43. data/public/light-bootstrap-dashboard-master/assets/img/loading-bubbles.svg +14 -0
  44. data/public/light-bootstrap-dashboard-master/assets/img/mask.png +0 -0
  45. data/public/light-bootstrap-dashboard-master/assets/img/new_logo.png +0 -0
  46. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-1.jpg +0 -0
  47. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-2.jpg +0 -0
  48. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-3.jpg +0 -0
  49. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-4.jpg +0 -0
  50. data/public/light-bootstrap-dashboard-master/assets/img/sidebar-5.jpg +0 -0
  51. data/public/light-bootstrap-dashboard-master/assets/img/tim_80x80.png +0 -0
  52. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-checkbox-radio-switch.js +502 -0
  53. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-notify.js +404 -0
  54. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-select.js +438 -0
  55. data/public/light-bootstrap-dashboard-master/assets/js/bootstrap.min.js +7 -0
  56. data/public/light-bootstrap-dashboard-master/assets/js/chartist.min.js +9 -0
  57. data/public/light-bootstrap-dashboard-master/assets/js/demo.js +152 -0
  58. data/public/light-bootstrap-dashboard-master/assets/js/jquery-1.10.2.js +9789 -0
  59. data/public/light-bootstrap-dashboard-master/assets/js/light-bootstrap-dashboard.js +182 -0
  60. data/spec/dummy/Gemfile +33 -0
  61. data/spec/dummy/Gemfile.lock +186 -0
  62. data/spec/dummy/README.md +24 -0
  63. data/spec/dummy/Rakefile +6 -0
  64. data/spec/dummy/app/assets/config/manifest.js +3 -0
  65. data/spec/dummy/app/assets/javascripts/application.js +16 -0
  66. data/spec/dummy/app/assets/javascripts/cable.js +13 -0
  67. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  68. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  69. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  70. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  71. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  72. data/spec/dummy/app/jobs/application_job.rb +2 -0
  73. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  74. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  75. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  76. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  77. data/spec/dummy/bin/bundle +3 -0
  78. data/spec/dummy/bin/rails +9 -0
  79. data/spec/dummy/bin/rake +9 -0
  80. data/spec/dummy/bin/setup +34 -0
  81. data/spec/dummy/bin/spring +17 -0
  82. data/spec/dummy/bin/update +29 -0
  83. data/spec/dummy/config.ru +5 -0
  84. data/spec/dummy/config/application.rb +30 -0
  85. data/spec/dummy/config/boot.rb +3 -0
  86. data/spec/dummy/config/cable.yml +9 -0
  87. data/spec/dummy/config/database.yml +18 -0
  88. data/spec/dummy/config/environment.rb +5 -0
  89. data/spec/dummy/config/environments/development.rb +54 -0
  90. data/spec/dummy/config/environments/production.rb +86 -0
  91. data/spec/dummy/config/environments/test.rb +42 -0
  92. data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
  93. data/spec/dummy/config/initializers/assets.rb +11 -0
  94. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  95. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  96. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  97. data/spec/dummy/config/initializers/inflections.rb +16 -0
  98. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  99. data/spec/dummy/config/initializers/new_framework_defaults.rb +24 -0
  100. data/spec/dummy/config/initializers/session_store.rb +3 -0
  101. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  102. data/spec/dummy/config/locales/en.yml +23 -0
  103. data/spec/dummy/config/puma.rb +47 -0
  104. data/spec/dummy/config/routes.rb +5 -0
  105. data/spec/dummy/config/secrets.yml +22 -0
  106. data/spec/dummy/config/spring.rb +6 -0
  107. data/spec/dummy/coverage/assets/0.10.0/application.css +799 -0
  108. data/spec/dummy/coverage/assets/0.10.0/application.js +1707 -0
  109. data/spec/dummy/coverage/assets/0.10.0/colorbox/border.png +0 -0
  110. data/spec/dummy/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  111. data/spec/dummy/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  112. data/spec/dummy/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  113. data/spec/dummy/coverage/assets/0.10.0/favicon_green.png +0 -0
  114. data/spec/dummy/coverage/assets/0.10.0/favicon_red.png +0 -0
  115. data/spec/dummy/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  116. data/spec/dummy/coverage/assets/0.10.0/loading.gif +0 -0
  117. data/spec/dummy/coverage/assets/0.10.0/magnify.png +0 -0
  118. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  119. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  120. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  121. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  122. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  123. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  124. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  125. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  126. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  127. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  128. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  129. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  130. data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  131. data/spec/dummy/coverage/index.html +294 -0
  132. data/spec/dummy/custom_plan.rb +11 -0
  133. data/spec/dummy/db/schema.rb +4 -0
  134. data/spec/dummy/lib/playground.rb +0 -0
  135. data/spec/dummy/log/development.log +22924 -0
  136. data/spec/dummy/log/localtower.log +11352 -0
  137. data/spec/dummy/log/test.log +9166 -0
  138. data/spec/dummy/tmp/restart.txt +0 -0
  139. data/spec/dummy/zeus.json +22 -0
  140. data/spec/factories/migration.rb +140 -0
  141. data/spec/factories/model.rb +36 -0
  142. data/spec/lib/localtower/generators/migration_spec.rb +113 -0
  143. data/spec/lib/localtower/generators/model_spec.rb +43 -0
  144. data/spec/lib/localtower/generators/relation_spec.rb +34 -0
  145. data/spec/lib/localtower/tools_spec.rb +14 -0
  146. data/spec/spec_helper.rb +47 -0
  147. metadata +401 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 37a6a6375eca452df5b9acfa3e8bd4ab28f8586c
4
+ data.tar.gz: 1bb445cb7cace0531e63b820f8a540c885c2a42c
5
+ SHA512:
6
+ metadata.gz: d4e24dae3934b8227c4ff0277b0c94db46406d2ec68fc2c8e68e08fa8ac145a88179f51f381688c20a23647222a3df69467afc3af9d5f3aaa08a9c02863b944a
7
+ data.tar.gz: 2692fe7db394bba1df658a22089c835e52e6eb85f53f2bf5abe52d1f971ea8533d5d452570da90e12916291be1118bd00eb134d4fd556bdb013c020af57a6ec4
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # Localtower
2
+
3
+
4
+
5
+ ## INSTALL
6
+
7
+ # In your Gemfile
8
+
9
+ group :development do
10
+ gem "localtower"
11
+ end
12
+
13
+ # in config/routes.rb
14
+
15
+ if Rails.env.development?
16
+ mount Localtower::Engine, at: "localtower"
17
+ end
18
+
19
+ ## USAGE
20
+
21
+ Open your browser at: `http://localhost:3000/localtower`
22
+
23
+ ## TEST
24
+
25
+ Create a .env file inside the spec/dummy folder with the credentials to your PostgreSQL Database. It should look like this:
26
+
27
+ spec/dummy/.env:
28
+
29
+ LOCALTOWER_PG_USERNAME="admin"
30
+ LOCALTOWER_PG_PASSWORD="root_or_smething"
31
+
32
+ Run the spec:
33
+
34
+ bundle install
35
+ bundle exec rspec spec/
36
+
37
+ Notes:
38
+ Tests are currently very slow because this is testing rails commands so it boots the rails for each test. Zeus or spring should be introced.
data/Rakefile ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'Localtower'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ require "bundler/gem_tasks"
24
+ Bundler::GemHelper.install_tasks
25
+
26
+ APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
27
+ load 'rails/tasks/engine.rake'
28
+
29
+ require 'rspec/core'
30
+ require 'rspec/core/rake_task'
31
+ desc 'Run all specs in spec directory (excluding plugin specs)'
32
+ RSpec::Core::RakeTask.new(spec: 'app:db:test:prepare')
33
+ task default: :spec
@@ -0,0 +1,5 @@
1
+ module Localtower
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :null_session
4
+ end
5
+ end
@@ -0,0 +1,55 @@
1
+ require_dependency 'localtower/application_controller'
2
+
3
+ module Localtower
4
+ class PagesController < ApplicationController
5
+
6
+ def dashboard
7
+ end
8
+
9
+ def migrations
10
+ end
11
+
12
+ def post_migrations
13
+ # Because we have a list or a field, take the item from the list in priority
14
+ params[:migrations][:migrations] = params[:migrations][:migrations].map do |action_line|
15
+ action_line["new_column_type"] = action_line["column_type"]
16
+
17
+ if action_line["column"].present?
18
+ action_line["column"] = action_line["column"]
19
+ end
20
+
21
+ if action_line["column_list"].present?
22
+ action_line["column"] = action_line["column_list"]
23
+ end
24
+
25
+ action_line.delete("column_list")
26
+
27
+ action_line
28
+ end
29
+
30
+ use_generator(::Localtower::Generators::Migration, params[:migrations])
31
+ end
32
+
33
+ def relations
34
+ end
35
+
36
+ def post_relations
37
+ use_generator(::Localtower::Generators::Relation, params[:relations])
38
+ end
39
+
40
+ def models
41
+ end
42
+
43
+ def post_models
44
+ use_generator(::Localtower::Generators::Model, params[:models])
45
+ end
46
+
47
+ private
48
+
49
+ def use_generator(generator_klass, options)
50
+ generator = generator_klass.new(options)
51
+ generator.run
52
+ redirect_to :back
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,19 @@
1
+ module Localtower
2
+ module ApplicationHelper
3
+ def subl_link_to(name, file, &block)
4
+ name ||= file
5
+ if block_given?
6
+ str = capture(&block)
7
+ else
8
+ str = name
9
+ end
10
+ link_to str, "subl://open/?url=file://#{file}"
11
+ end
12
+
13
+ def to_json_print(hash)
14
+ # str = hash.to_json
15
+ # str.gsub(/,"/, ',<br>"').gsub(/\"\:/, '": ').html_safe
16
+ hash.to_json
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,94 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Localtower - <%= yield :title %></title>
5
+
6
+ <meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
7
+ <meta name="viewport" content="width=device-width" />
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
9
+
10
+ <link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/bootstrap.min.css">
11
+ <link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/animate.min.css">
12
+ <link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css">
13
+
14
+ <!-- Fonts and icons -->
15
+ <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
16
+ <link href='http://fonts.googleapis.com/css?family=Roboto:400,700,300' rel='stylesheet' type='text/css'>
17
+ <link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/pe-icon-7-stroke.css">
18
+
19
+ <link rel="stylesheet" type="text/css" href="/css/app.css">
20
+
21
+ <%= csrf_meta_tags %>
22
+ </head>
23
+
24
+ <body>
25
+
26
+ <div class="wrapper">
27
+ <div class="sidebar" data-color="blue">
28
+ <!-- you can change the color of the sidebar using: data-color="blue | azure | green | orange | red | purple" -->
29
+
30
+ <div class="sidebar-wrapper">
31
+ <ul class="nav">
32
+ <li class="<%= is_active_link?(dashboard_path, :inclusive) ? "active" : nil %>">
33
+ <a href="<%= dashboard_path %>">
34
+ <i class="pe-7s-home"></i>
35
+ <p>Schema</p>
36
+ </a>
37
+ </li>
38
+
39
+ <li class="<%= is_active_link?(models_path, :inclusive) ? "active" : nil %>">
40
+ <a href="<%= models_path %>">
41
+ <i class="pe-7s-server"></i>
42
+ <p>New Model</p>
43
+ </a>
44
+ </li>
45
+
46
+ <li class="<%= is_active_link?(relations_path, :inclusive) ? "active" : nil %>">
47
+ <a href="<%= relations_path %>">
48
+ <i class="pe-7s-shuffle"></i>
49
+ <p>New Relation</p>
50
+ </a>
51
+ </li>
52
+
53
+ <li class="<%= is_active_link?(migrations_path, :inclusive) ? "active" : nil %>">
54
+ <a href="<%= migrations_path %>">
55
+ <i class="pe-7s-edit"></i>
56
+ <p>New Migration</p>
57
+ </a>
58
+ </li>
59
+ </ul>
60
+ </div>
61
+ </div>
62
+
63
+ <div class="main-panel">
64
+ <div class="content">
65
+ <div class="container-fluid">
66
+ <%= yield %>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </div>
71
+
72
+ <div class="full-message" style="display: none;">
73
+
74
+ <div class="text-center">
75
+ <br>
76
+ <h3>Magic stuff happening.</h3>
77
+ <br>
78
+ <i class="pe-7s-refresh-2 rotate"></i>
79
+ </div>
80
+
81
+ </div>
82
+
83
+ <!-- Core JS Files -->
84
+ <script src="/light-bootstrap-dashboard-master/assets/js/jquery-1.10.2.js" type="text/javascript"></script>
85
+ <script src="/light-bootstrap-dashboard-master/assets/js/bootstrap.min.js" type="text/javascript"></script>
86
+
87
+ <!-- Checkbox, Radio & Switch Plugins -->
88
+ <script src="/light-bootstrap-dashboard-master/assets/js/bootstrap-checkbox-radio-switch.js"></script>
89
+
90
+ <!-- Light Bootstrap Table Core javascript and methods for Demo purpose -->
91
+ <script src="/light-bootstrap-dashboard-master/assets/js/light-bootstrap-dashboard.js"></script>
92
+ <script src="/js/app.js"></script>
93
+ </body>
94
+ </html>
@@ -0,0 +1,55 @@
1
+ <% content_for :title do %>Schema<% end %>
2
+
3
+ <div class="row">
4
+ <div class="col-md-12">
5
+ <div class="card">
6
+ <div class="header">
7
+ <h4 class="title"></h4>
8
+ </div>
9
+
10
+ <div class="content">
11
+ <div class="row">
12
+
13
+ <% ::Localtower::Tools.models_presented.each do |model| %>
14
+
15
+ <div class="col-md-6">
16
+ <h3><%= model[:name] %></h3>
17
+
18
+ <table class="table table-hover table-striped">
19
+ <thead>
20
+ <th>Field</th>
21
+ <th>Type</th>
22
+ <th>Index?</th>
23
+ </thead>
24
+
25
+ <tbody>
26
+ <% model[:attributes_list].each do |attribute_data| %>
27
+
28
+ <tr>
29
+ <td>
30
+ <code>
31
+ <%= attribute_data["name"] %>
32
+ </code>
33
+ </td>
34
+
35
+ <td>
36
+ <%= attribute_data["type_clean"] %>
37
+ </td>
38
+
39
+ <td>
40
+ <% if attribute_data["index"].any? %>
41
+ <span class="label label-primary">Yes</span>
42
+ <% end %>
43
+ </td>
44
+ </tr>
45
+ <% end %>
46
+ </tbody>
47
+ </table>
48
+ </div>
49
+ <% end %>
50
+
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </div>
@@ -0,0 +1,99 @@
1
+ <% content_for :title do %>Migrations<% end %>
2
+
3
+ <div class="row">
4
+ <div class="col-md-12">
5
+ <div class="card">
6
+ <div class="header">
7
+ <h4 class="title"></h4>
8
+ </div>
9
+
10
+ <div class="content">
11
+ <%= form_tag migrations_path, class: "form" do %>
12
+
13
+ <div class="row">
14
+ <div class="col-md-6">
15
+ <div class="form-group">
16
+ <label>Name of the Migration</label>
17
+ <input type="text" name="migrations[migration_name]" class="form-control">
18
+ </div>
19
+ </div>
20
+ </div>
21
+
22
+ <table class="table table-hover table-striped">
23
+ <thead>
24
+ <th>Action</th>
25
+ <th>Model</th>
26
+ <th>Column</th>
27
+ <th>New Column Name</th>
28
+ <th>Type</th>
29
+ <th>Index?</th>
30
+ <th>Can be null?</th>
31
+ <th></th>
32
+ </thead>
33
+
34
+ <tbody data-selector="tbody">
35
+ <tr data-selector="tr">
36
+ <td>
37
+ <%= select_tag "migrations[migrations][][action]", options_for_select(::Localtower::Generators::Migration::ACTIONS), class: "form-control", "data-selector" => "action" %>
38
+ </td>
39
+
40
+ <td>
41
+ <%= select_tag "migrations[migrations][][table_name]", options_for_select(Localtower::Tools.models.collect {|p| [ p, p.table_name ] }), class: "form-control" %>
42
+ </td>
43
+
44
+ <td class="text-center">
45
+ <input type="text" name="migrations[migrations][][column]" class="form-control" data-selector="column_text">
46
+
47
+ <%= select_tag "migrations[migrations][][column_list]", options_for_select(::Localtower::Tools.all_columns), class: "form-control", include_blank: true, "data-selector" => "column_list", style: "display:none;" %>
48
+ </td>
49
+
50
+ <td>
51
+ <input type="text" name="migrations[migrations][][new_column_name]" class="form-control">
52
+ </td>
53
+
54
+ <td>
55
+ <%= select_tag "migrations[migrations][][column_type]", options_for_select(::Localtower::Generators::Migration::TYPES), class: "form-control" %>
56
+ </td>
57
+
58
+ <td>
59
+ <input type="checkbox" name="migrations[migrations][][index]" class="form-control">
60
+ </td>
61
+
62
+ <td>
63
+ <input type="checkbox" name="migrations[migrations][][nullable]" class="form-control" checked="">
64
+ </td>
65
+
66
+ <td>
67
+ <div class="pull-right">
68
+ <button class="btn btn-danger btn-xs" data-selector="remove">Remove</button>
69
+ </div>
70
+ </td>
71
+ </tr>
72
+ </tbody>
73
+ </table>
74
+
75
+ <div class="row">
76
+ <div class="col-md-12">
77
+ <button class="btn btn-warning btn-xs pull-right" data-selector="duplicate">Add a field</button>
78
+ </div>
79
+ </div>
80
+
81
+ <hr>
82
+
83
+ <!-- multiple lines: -->
84
+ <div class="row">
85
+ <div class="col-md-12 text-center">
86
+ <button name="migrations[run_migrate]" type="submit" value="false" class="btn btn-warning" data-selector="submit">
87
+ Create the migration
88
+ </button>
89
+
90
+ <button name="migrations[run_migrate]" type="submit" value="true" class="btn btn-success" data-selector="submit">
91
+ Create the migration and <b>migrate</b>
92
+ </button>
93
+ </div>
94
+ </div>
95
+ <% end %>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
@@ -0,0 +1,78 @@
1
+ <% content_for :title do %>Models<% end %>
2
+
3
+ <div class="row">
4
+ <div class="col-md-12">
5
+ <div class="card">
6
+ <div class="header">
7
+ <h4 class="title"></h4>
8
+ </div>
9
+
10
+ <div class="content">
11
+ <%= form_tag models_path, class: "form" do %>
12
+
13
+ <div class="row">
14
+ <div class="col-md-6">
15
+ <div class="form-group">
16
+ <label>Name of the Model</label>
17
+ <input type="text" name="models[model_name]" class="form-control">
18
+ </div>
19
+ </div>
20
+ </div>
21
+
22
+ <table class="table table-hover table-striped">
23
+ <thead>
24
+ <th>Field</th>
25
+ <th>Kind</th>
26
+ <th>index?</th>
27
+ <th>Can be null?</th>
28
+ <th></th>
29
+ </thead>
30
+
31
+ <tbody data-selector="tbody">
32
+ <tr data-selector="tr">
33
+ <td>
34
+ <input type="text" name="models[attributes][][attribute_name]" class="form-control">
35
+ </td>
36
+ <td>
37
+ <%= select_tag "models[attributes][][attribute_type]", options_for_select(::Localtower::Generators::Migration::TYPES), class: "form-control" %>
38
+ </td>
39
+ <td>
40
+ <input type="checkbox" value="true" name="models[attributes][][index]" class="form-control">
41
+ </td>
42
+ <td>
43
+ <input type="checkbox" value="true" name="models[attributes][][nullable]" class="form-control" checked>
44
+ </td>
45
+ <td>
46
+ <div class="pull-right">
47
+ <button class="btn btn-danger btn-xs" data-selector="remove">Remove</button>
48
+ </div>
49
+ </td>
50
+ </tr>
51
+ </tbody>
52
+ </table>
53
+
54
+ <div class="row">
55
+ <div class="col-md-12">
56
+ <button class="btn btn-warning btn-xs pull-right" data-selector="duplicate">Add a field</button>
57
+ </div>
58
+ </div>
59
+
60
+ <hr>
61
+
62
+ <!-- multiple lines: -->
63
+ <div class="row">
64
+ <div class="col-md-12 text-center">
65
+ <button name="models[run_migrate]" type="submit" value="false" class="btn btn-warning" data-selector="submit">
66
+ Create the model
67
+ </button>
68
+
69
+ <button name="models[run_migrate]" type="submit" value="true" class="btn btn-success" data-selector="submit">
70
+ Create the model and <b>migrate</b>
71
+ </button>
72
+ </div>
73
+ </div>
74
+ <% end %>
75
+ </div>
76
+ </div>
77
+ </div>
78
+ </div>