localtower 0.1.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 (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>