localtower 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +38 -0
- data/Rakefile +33 -0
- data/app/controllers/localtower/application_controller.rb +5 -0
- data/app/controllers/localtower/pages_controller.rb +55 -0
- data/app/helpers/localtower/application_helper.rb +19 -0
- data/app/views/layouts/localtower/application.html.erb +94 -0
- data/app/views/localtower/pages/dashboard.html.erb +55 -0
- data/app/views/localtower/pages/migrations.html.erb +99 -0
- data/app/views/localtower/pages/models.html.erb +78 -0
- data/app/views/localtower/pages/relations.html.erb +53 -0
- data/config/routes.rb +16 -0
- data/lib/localtower.rb +19 -0
- data/lib/localtower/engine.rb +9 -0
- data/lib/localtower/generators/migration.rb +275 -0
- data/lib/localtower/generators/model.rb +36 -0
- data/lib/localtower/generators/relation.rb +55 -0
- data/lib/localtower/tools.rb +173 -0
- data/lib/localtower/version.rb +3 -0
- data/lib/tasks/localtower_tasks.rake +4 -0
- data/public/css/app.css +29 -0
- data/public/js/app.js +106 -0
- data/public/light-bootstrap-dashboard-master/assets/css/animate.min.css +6 -0
- data/public/light-bootstrap-dashboard-master/assets/css/bootstrap.min.css +5 -0
- data/public/light-bootstrap-dashboard-master/assets/css/demo.css +61 -0
- data/public/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css +2815 -0
- data/public/light-bootstrap-dashboard-master/assets/css/pe-icon-7-stroke.css +632 -0
- data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.eot +0 -0
- data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.svg +212 -0
- data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.ttf +0 -0
- data/public/light-bootstrap-dashboard-master/assets/fonts/Pe-icon-7-stroke.woff +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/default-avatar.png +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/face-0.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/face-1.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/face-2.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/face-3.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/face-4.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/face-5.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/face-6.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/face-7.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/faces/tim_vector.jpe +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/favicon.ico +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/loading-bubbles.svg +14 -0
- data/public/light-bootstrap-dashboard-master/assets/img/mask.png +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/new_logo.png +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/sidebar-1.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/sidebar-2.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/sidebar-3.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/sidebar-4.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/sidebar-5.jpg +0 -0
- data/public/light-bootstrap-dashboard-master/assets/img/tim_80x80.png +0 -0
- data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-checkbox-radio-switch.js +502 -0
- data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-notify.js +404 -0
- data/public/light-bootstrap-dashboard-master/assets/js/bootstrap-select.js +438 -0
- data/public/light-bootstrap-dashboard-master/assets/js/bootstrap.min.js +7 -0
- data/public/light-bootstrap-dashboard-master/assets/js/chartist.min.js +9 -0
- data/public/light-bootstrap-dashboard-master/assets/js/demo.js +152 -0
- data/public/light-bootstrap-dashboard-master/assets/js/jquery-1.10.2.js +9789 -0
- data/public/light-bootstrap-dashboard-master/assets/js/light-bootstrap-dashboard.js +182 -0
- data/spec/dummy/Gemfile +33 -0
- data/spec/dummy/Gemfile.lock +186 -0
- data/spec/dummy/README.md +24 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +3 -0
- data/spec/dummy/app/assets/javascripts/application.js +16 -0
- data/spec/dummy/app/assets/javascripts/cable.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/jobs/application_job.rb +2 -0
- data/spec/dummy/app/mailers/application_mailer.rb +4 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +9 -0
- data/spec/dummy/bin/rake +9 -0
- data/spec/dummy/bin/setup +34 -0
- data/spec/dummy/bin/spring +17 -0
- data/spec/dummy/bin/update +29 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/config/application.rb +30 -0
- data/spec/dummy/config/boot.rb +3 -0
- data/spec/dummy/config/cable.yml +9 -0
- data/spec/dummy/config/database.yml +18 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +54 -0
- data/spec/dummy/config/environments/production.rb +86 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/new_framework_defaults.rb +24 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/puma.rb +47 -0
- data/spec/dummy/config/routes.rb +5 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/config/spring.rb +6 -0
- data/spec/dummy/coverage/assets/0.10.0/application.css +799 -0
- data/spec/dummy/coverage/assets/0.10.0/application.js +1707 -0
- data/spec/dummy/coverage/assets/0.10.0/colorbox/border.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/colorbox/controls.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
- data/spec/dummy/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/favicon_green.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/favicon_red.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/favicon_yellow.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/loading.gif +0 -0
- data/spec/dummy/coverage/assets/0.10.0/magnify.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/spec/dummy/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/spec/dummy/coverage/index.html +294 -0
- data/spec/dummy/custom_plan.rb +11 -0
- data/spec/dummy/db/schema.rb +4 -0
- data/spec/dummy/lib/playground.rb +0 -0
- data/spec/dummy/log/development.log +22924 -0
- data/spec/dummy/log/localtower.log +11352 -0
- data/spec/dummy/log/test.log +9166 -0
- data/spec/dummy/tmp/restart.txt +0 -0
- data/spec/dummy/zeus.json +22 -0
- data/spec/factories/migration.rb +140 -0
- data/spec/factories/model.rb +36 -0
- data/spec/lib/localtower/generators/migration_spec.rb +113 -0
- data/spec/lib/localtower/generators/model_spec.rb +43 -0
- data/spec/lib/localtower/generators/relation_spec.rb +34 -0
- data/spec/lib/localtower/tools_spec.rb +14 -0
- data/spec/spec_helper.rb +47 -0
- 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,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>
|