localtower 0.5.0 → 1.0.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.
- checksums.yaml +4 -4
- data/README.md +25 -17
- data/app/controllers/localtower/pages_controller.rb +27 -12
- data/app/views/layouts/localtower/application.html.erb +16 -33
- data/app/views/localtower/pages/_alert_no_models.html.erb +3 -0
- data/app/views/localtower/pages/migrations.html.erb +52 -83
- data/app/views/localtower/pages/models.html.erb +53 -70
- data/app/views/localtower/pages/new_migration.html.erb +103 -0
- data/app/views/localtower/pages/new_model.html.erb +87 -0
- data/config/routes.rb +4 -4
- data/lib/localtower/generators/migration.rb +51 -120
- data/lib/localtower/generators/model.rb +52 -28
- data/lib/localtower/generators/service_objects/insert_array.rb +23 -0
- data/lib/localtower/generators/service_objects/insert_defaults.rb +15 -43
- data/lib/localtower/generators/service_objects/insert_indexes.rb +80 -0
- data/lib/localtower/generators/service_objects/insert_nullable.rb +23 -0
- data/lib/localtower/status.rb +1 -1
- data/lib/localtower/tools.rb +13 -16
- data/lib/localtower/version.rb +1 -1
- data/public/css/app.css +0 -49
- data/public/js/app.js +215 -70
- data/public/screenshots/v1.0.0/migrations.png +0 -0
- data/public/screenshots/v1.0.0/models.png +0 -0
- data/public/screenshots/v1.0.0/new_migration.png +0 -0
- data/public/screenshots/v1.0.0/new_model.png +0 -0
- data/spec/dummy/Gemfile +0 -2
- data/spec/dummy/Gemfile.lock +1 -10
- data/spec/dummy/app/models/post.rb +3 -0
- data/spec/dummy/app/models/user.rb +1 -0
- data/spec/dummy/config/environments/development.rb +1 -0
- data/spec/dummy/config/puma.rb +1 -1
- data/spec/dummy/db/migrate/20230119221452_create_users.rb +14 -0
- data/spec/dummy/db/migrate/20230119221751_change_users_at1674166670.rb +7 -0
- data/spec/dummy/db/migrate/20230119222054_create_posts.rb +11 -0
- data/spec/dummy/db/migrate/20230119222106_change_posts_at1674166865.rb +5 -0
- data/spec/dummy/db/schema.rb +20 -8
- data/spec/dummy/log/development.log +15281 -3345
- data/spec/dummy/log/localtower.log +1897 -132
- data/spec/dummy/log/test.log +0 -0
- data/spec/dummy/test/index.html +38 -0
- data/spec/dummy/tmp/pids/server.pid +1 -0
- data/spec/factories/migration.rb +25 -41
- data/spec/factories/model.rb +39 -25
- data/spec/lib/localtower/generators/migration_spec.rb +36 -63
- data/spec/lib/localtower/generators/model_spec.rb +43 -34
- data/spec/lib/localtower/generators/service_objects/insert_array_spec.rb +47 -0
- data/spec/lib/localtower/generators/service_objects/insert_defaults_spec.rb +30 -35
- data/spec/lib/localtower/generators/service_objects/insert_indexes_spec.rb +90 -0
- data/spec/lib/localtower/generators/service_objects/insert_nullable_spec.rb +61 -0
- data/spec/lib/localtower/tools_spec.rb +1 -11
- data/spec/spec_helper.rb +8 -3
- metadata +34 -18
- data/app/views/localtower/pages/_migrations.html.erb +0 -57
- data/app/views/localtower/pages/schema.html.erb +0 -67
- data/spec/dummy/db/migrate/20221115190039_create_users.rb +0 -13
- data/spec/dummy/db/migrate/20221115193020_change_users.rb +0 -8
- data/spec/dummy/db/migrate/20221115193532_change_users_at1668540931.rb +0 -5
- data/spec/dummy/db/migrate/20221115193605_change_users_at1668540964.rb +0 -5
- data/spec/dummy/db/migrate/20221115193637_change_users_at1668540996.rb +0 -5
- data/spec/dummy/db/migrate/20221115193642_change_users_at1668541001.rb +0 -5
- data/spec/lib/localtower/generators/relation_spec.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9db89fe02b54c1eb46633f4df610405c050aaf5a44bcdc22a90ffe7cbb54637b
|
4
|
+
data.tar.gz: 6738a7be7646e0c4cf0844def2b6785f659922c064cf5e7e0ac39242c6f5f7b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2388bae27139b79e346b70fab53701f87112aca41d104fa3dcd8b2b9d3537dc9d54742c990384135cc347b50207d5023d96b699847b568731e78ed1204a3afe5
|
7
|
+
data.tar.gz: 18959e622626a9452fdc67dae321ef93f1be65e81657e66ad692f330bfe2fc47c29fb731c66adddd3d61f718c286caf70b9b0fa9e219ec616aea5acfd8aaee71
|
data/README.md
CHANGED
@@ -4,27 +4,28 @@
|
|
4
4
|
|
5
5
|
## Intro
|
6
6
|
|
7
|
-
|
7
|
+
Please use localtower version `>= 1.0.0`
|
8
8
|
See installation process below.
|
9
|
+
|
9
10
|
Compatibility:
|
10
11
|
- Rails >= 5.2
|
11
12
|
- Ruby >= 2.3
|
12
13
|
|
13
|
-
### See the schema
|
14
|
-

|
15
|
-
|
16
14
|
### Create a model
|
17
|
-

|
15
|
+

|
21
16
|
|
22
17
|
### Create a migration
|
23
|
-

|
19
|
+
|
20
|
+
### See the Models
|
21
|
+

|
22
|
+
|
23
|
+
### See the Migrations (and migrate)
|
24
|
+

|
24
25
|
|
25
26
|
## INSTALL
|
26
27
|
|
27
|
-
Should work with any Rails
|
28
|
+
Should work with any Rails 5.2+ application.
|
28
29
|
Only tested with PostgreSQL.
|
29
30
|
|
30
31
|
Add to your `Gemfile` file:
|
@@ -42,8 +43,8 @@ bundle install
|
|
42
43
|
Add to your `config/routes.rb`:
|
43
44
|
```ruby
|
44
45
|
MyApp::Application.routes.draw do
|
45
|
-
if Rails.env.development?
|
46
|
-
mount Localtower::Engine, at:
|
46
|
+
if Rails.env.development?
|
47
|
+
mount Localtower::Engine, at: 'localtower'
|
47
48
|
end
|
48
49
|
|
49
50
|
# Your other routes here:
|
@@ -56,8 +57,6 @@ Change your config/environments/development.rb:
|
|
56
57
|
|
57
58
|
```ruby
|
58
59
|
Rails.application.configure do
|
59
|
-
# ...
|
60
|
-
|
61
60
|
# This is the default:
|
62
61
|
# config.active_record.migration_error = :page_load
|
63
62
|
|
@@ -68,10 +67,17 @@ Rails.application.configure do
|
|
68
67
|
end
|
69
68
|
```
|
70
69
|
|
70
|
+
If you know how to override this configuration in the gem instead of doing it in your app code, please open an issue and tell me your solution.
|
71
|
+
|
71
72
|
## Usage
|
72
73
|
|
73
74
|
Open your browser at [http://localhost:3000/localtower](http://localhost:3000/localtower).
|
74
75
|
|
76
|
+
## Roadmap
|
77
|
+
|
78
|
+
- Be able to use `uuid` instead of `id` as primary when creating models.
|
79
|
+
- Realtime preview of the migration files
|
80
|
+
- Better frontend validation
|
75
81
|
|
76
82
|
## Run test
|
77
83
|
|
@@ -92,12 +98,12 @@ bundle exec rspec spec/
|
|
92
98
|
|
93
99
|
## Contribute
|
94
100
|
|
95
|
-
Thanks for reporting issues, I'll do my best 💪
|
101
|
+
Thanks for reporting issues, I'll do my best to fix the bugs 💪
|
96
102
|
|
97
103
|

|
98
104
|
|
99
|
-
|
100
105
|
## Deploy
|
106
|
+
|
101
107
|
Only for official contributors.
|
102
108
|
|
103
109
|
rm *.gem | gem build localtower.gemspec && gem push localtower-*.gem
|
@@ -107,4 +113,6 @@ Only for official contributors.
|
|
107
113
|
Do not hesitate to open issues if you have troubles using the gem.
|
108
114
|
|
109
115
|
- By Damian Le Nouaille Diez: https://damln.com
|
110
|
-
-
|
116
|
+
- Supported by Explicit Ruby: https://explicit-ruby.run
|
117
|
+
- Link on RubyGems.org: https://rubygems.org/gems/localtower
|
118
|
+
- Stats on BestGems.org: https://bestgems.org/gems/localtower
|
@@ -2,17 +2,17 @@ require_dependency 'localtower/application_controller'
|
|
2
2
|
|
3
3
|
module Localtower
|
4
4
|
class PagesController < ApplicationController
|
5
|
-
|
6
|
-
|
7
|
-
def schema
|
5
|
+
def new_migration
|
6
|
+
@models = ::Localtower::Tools.models_presented
|
8
7
|
end
|
9
8
|
|
10
9
|
def migrations
|
10
|
+
@migrations = ::Localtower::Status.new.run
|
11
11
|
end
|
12
12
|
|
13
13
|
def post_migrations
|
14
14
|
# Because we have a list or a field, take the item from the list in priority
|
15
|
-
migrations = clean_params["migrations"]
|
15
|
+
migrations = clean_params["migrations"].map do |action_line|
|
16
16
|
# This is used for "rename_column" action:
|
17
17
|
action_line["new_column_type"] = action_line["column_type"]
|
18
18
|
|
@@ -26,29 +26,44 @@ module Localtower
|
|
26
26
|
action_line
|
27
27
|
end
|
28
28
|
|
29
|
-
use_generator(::Localtower::Generators::Migration,
|
29
|
+
use_generator(::Localtower::Generators::Migration, migrations)
|
30
|
+
|
30
31
|
redirect_to migrations_path
|
31
32
|
end
|
32
33
|
|
34
|
+
def new_model
|
35
|
+
end
|
36
|
+
|
33
37
|
def models
|
38
|
+
@models = ::Localtower::Tools.models_presented
|
34
39
|
end
|
35
40
|
|
36
41
|
def post_models
|
37
|
-
|
38
|
-
|
42
|
+
model = clean_params["model"]
|
43
|
+
model['attributes'] = model['attributes'].map do |attribute_line|
|
44
|
+
# Convert checkbox to ruby value:
|
45
|
+
attribute_line['nullable'] = false if attribute_line['nullable'].blank?
|
46
|
+
|
47
|
+
# Convert index hash:
|
48
|
+
if attribute_line['index']
|
49
|
+
attribute_line['index']['unique'] = true if attribute_line['index']['unique'] == 'true'
|
50
|
+
end
|
51
|
+
|
52
|
+
attribute_line
|
53
|
+
end
|
54
|
+
|
55
|
+
use_generator(::Localtower::Generators::Model, model)
|
56
|
+
redirect_to migrations_path
|
39
57
|
end
|
40
58
|
|
41
59
|
def post_actions
|
42
|
-
::Localtower::Tools.perform_cmd(clean_params['cmd']
|
60
|
+
cmd = ::Localtower::Tools.perform_cmd(clean_params['cmd'])
|
61
|
+
flash[:notice] = cmd if cmd['ERROR']
|
43
62
|
redirect_back fallback_location: root_path
|
44
63
|
end
|
45
64
|
|
46
65
|
private
|
47
66
|
|
48
|
-
def set_migrations
|
49
|
-
@migrations = ::Localtower::Status.new.run.select { |entry| entry['status'] == :todo }
|
50
|
-
end
|
51
|
-
|
52
67
|
def use_generator(generator_klass, options)
|
53
68
|
generator_klass.new(options).run
|
54
69
|
end
|
@@ -2,48 +2,44 @@
|
|
2
2
|
<html lang="en">
|
3
3
|
<head>
|
4
4
|
<title>Localtower - <%= yield :title %></title>
|
5
|
-
|
6
5
|
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
|
7
6
|
<meta name="viewport" content="width=device-width" />
|
8
7
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
9
|
-
|
10
8
|
<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">
|
9
|
+
<!-- <link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/animate.min.css"> -->
|
12
10
|
<link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css">
|
13
|
-
|
14
11
|
<!-- Fonts and icons -->
|
15
12
|
<link href="/vendor/font-awesome.min.css" rel="stylesheet">
|
16
13
|
<link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/pe-icon-7-stroke.css">
|
17
|
-
|
18
14
|
<link rel="stylesheet" type="text/css" href="/vendor/highlight-js-default.min.css">
|
19
15
|
<link rel="stylesheet" type="text/css" href="/css/app.css">
|
20
|
-
|
21
16
|
<%= csrf_meta_tags %>
|
22
17
|
</head>
|
23
|
-
|
24
18
|
<body>
|
25
|
-
|
26
19
|
<div class="wrapper">
|
27
20
|
<div class="sidebar">
|
28
|
-
|
29
21
|
<div class="sidebar-wrapper">
|
30
22
|
<ul class="nav">
|
31
|
-
<li class="<%= is_active_link?(
|
32
|
-
<a href="<%=
|
33
|
-
<i class="pe-7s-
|
34
|
-
<p>
|
23
|
+
<li class="<%= is_active_link?(models_path, :exclusive) ? "active" : nil %>">
|
24
|
+
<a href="<%= models_path %>">
|
25
|
+
<i class="pe-7s-network"></i>
|
26
|
+
<p>Models</p>
|
35
27
|
</a>
|
36
28
|
</li>
|
37
|
-
|
38
|
-
|
39
|
-
|
29
|
+
<li class="<%= is_active_link?(migrations_path, :exclusive) ? "active" : nil %>">
|
30
|
+
<a href="<%= migrations_path %>">
|
31
|
+
<i class="pe-7s-back"></i>
|
32
|
+
<p>Migrations</p>
|
33
|
+
</a>
|
34
|
+
</li>
|
35
|
+
<li class="<%= is_active_link?(new_model_path, :inclusive) ? "active" : nil %>">
|
36
|
+
<a href="<%= new_model_path %>">
|
40
37
|
<i class="pe-7s-server"></i>
|
41
38
|
<p>New Model</p>
|
42
39
|
</a>
|
43
40
|
</li>
|
44
|
-
|
45
|
-
|
46
|
-
<a href="<%= migrations_path %>">
|
41
|
+
<li class="<%= is_active_link?(new_migration_path, :exclusive) ? "active" : nil %>">
|
42
|
+
<a href="<%= new_migration_path %>">
|
47
43
|
<i class="pe-7s-edit"></i>
|
48
44
|
<p>New Migration</p>
|
49
45
|
</a>
|
@@ -51,8 +47,6 @@
|
|
51
47
|
</ul>
|
52
48
|
</div>
|
53
49
|
</div>
|
54
|
-
|
55
|
-
|
56
50
|
<div class="main-panel">
|
57
51
|
<div class="content">
|
58
52
|
<div class="container-fluid">
|
@@ -61,12 +55,10 @@
|
|
61
55
|
</div>
|
62
56
|
</div>
|
63
57
|
</div>
|
64
|
-
|
65
58
|
<div class="full-message" style="display: none;">
|
66
|
-
|
67
59
|
<div class="text-center">
|
68
60
|
<br>
|
69
|
-
<h3>
|
61
|
+
<h3>Generating files</h3>
|
70
62
|
<br>
|
71
63
|
<i class="pe-7s-refresh-2 rotate"></i>
|
72
64
|
<br>
|
@@ -79,18 +71,9 @@
|
|
79
71
|
<code>bundle exec rails db:migrate</code>
|
80
72
|
</p>
|
81
73
|
</div>
|
82
|
-
|
83
74
|
</div>
|
84
|
-
|
85
75
|
<!-- Core JS Files -->
|
86
76
|
<script src="/light-bootstrap-dashboard-master/assets/js/jquery-1.10.2.js" type="text/javascript"></script>
|
87
|
-
<script src="/light-bootstrap-dashboard-master/assets/js/bootstrap.min.js" type="text/javascript"></script>
|
88
|
-
|
89
|
-
<!-- Checkbox, Radio & Switch Plugins -->
|
90
|
-
<script src="/light-bootstrap-dashboard-master/assets/js/bootstrap-checkbox-radio-switch.js"></script>
|
91
|
-
|
92
|
-
<!-- Light Bootstrap Table Core javascript and methods for Demo purpose -->
|
93
|
-
<script src="/light-bootstrap-dashboard-master/assets/js/light-bootstrap-dashboard.js"></script>
|
94
77
|
<script src="/vendor/highlight.min.js"></script>
|
95
78
|
<script src="/vendor/masonry.pkgd.min.js"></script>
|
96
79
|
<script src="/js/app.js"></script>
|
@@ -1,92 +1,61 @@
|
|
1
1
|
<% content_for :title do %>Migrations<% end %>
|
2
|
-
|
3
2
|
<div class="row">
|
4
3
|
<div class="col-md-12">
|
5
|
-
<div class="
|
6
|
-
|
7
|
-
<
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
<th> <span data-selector='column_type_label'>Type</span></th>
|
21
|
-
<th> <span data-selector='index_label'>Index?</span></th>
|
22
|
-
<th> <span data-selector='nullable_label'>Can be null?</span></th>
|
23
|
-
<th> <span data-selector=''></span></th>
|
24
|
-
</thead>
|
25
|
-
|
26
|
-
<tbody data-selector="tbody">
|
27
|
-
<tr data-selector="tr">
|
28
|
-
<td>
|
29
|
-
<%= select_tag "migrations[migrations][][table_name]", options_for_select(Localtower::Tools.models.collect {|p| [ p, p.table_name ] }), class: "form-control" %>
|
30
|
-
</td>
|
31
|
-
|
32
|
-
<td>
|
33
|
-
<%= select_tag "migrations[migrations][][action]", options_for_select(::Localtower::Generators::Migration::ACTIONS), class: "form-control", "data-selector" => "action" %>
|
34
|
-
</td>
|
35
|
-
|
36
|
-
<td>
|
37
|
-
<%= select_tag "migrations[migrations][][belongs_to]", options_for_select(Localtower::Tools.models.collect {|p| [ p, p.table_name ] }), class: "form-control", "data-selector" => "belongs_to" %>
|
38
|
-
</td>
|
39
|
-
|
40
|
-
<td class="text-center">
|
41
|
-
<input type="text" name="migrations[migrations][][column]" class="form-control" data-selector="column_text">
|
42
|
-
|
43
|
-
<%= 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;" %>
|
44
|
-
</td>
|
45
|
-
|
46
|
-
<td>
|
47
|
-
<input type="text" name="migrations[migrations][][new_column_name]" class="form-control" data-selector="new_column_name">
|
48
|
-
</td>
|
49
|
-
|
50
|
-
<td>
|
51
|
-
<%= select_tag "migrations[migrations][][column_type]", options_for_select(::Localtower::Generators::Migration::TYPES), class: "form-control", "data-selector" => "column_type" %>
|
52
|
-
</td>
|
53
|
-
|
54
|
-
<td>
|
55
|
-
<input type="checkbox" name="migrations[migrations][][index]" class="form-control" data-selector="index">
|
56
|
-
</td>
|
57
|
-
|
58
|
-
<td>
|
59
|
-
<input type="checkbox" name="migrations[migrations][][nullable]" class="form-control" checked="" data-selector="nullable">
|
60
|
-
</td>
|
61
|
-
|
62
|
-
<td>
|
63
|
-
<div class="pull-right">
|
64
|
-
<button class="btn btn-danger btn-xs pointer" data-selector="remove">Remove</button>
|
65
|
-
</div>
|
66
|
-
</td>
|
67
|
-
</tr>
|
68
|
-
</tbody>
|
69
|
-
</table>
|
70
|
-
|
71
|
-
<div class="row">
|
72
|
-
<div class="col-md-12 text-center">
|
73
|
-
<i class="pe-7s-plus pointer" data-selector="duplicate" style="font-size: 3em;"></i>
|
74
|
-
</div>
|
4
|
+
<div class="content">
|
5
|
+
<% if flash[:notice] %>
|
6
|
+
<div class="alert alert-info">
|
7
|
+
<span><%= flash[:notice] %></span>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
10
|
+
<div class="card">
|
11
|
+
<div class="header">
|
12
|
+
<% if @migrations.select {|i| i['status'] == :todo}.any? %>
|
13
|
+
<%= form_tag actions_path, class: "form" do %>
|
14
|
+
<button name="cmd" type="submit" value="rails db:migrate" class="btn btn-warning btn-fill" data-selector="submit">
|
15
|
+
Migrate Pending Migrations <code>bundle exec rails db:migrate</code>
|
16
|
+
</button>
|
17
|
+
<% end %>
|
18
|
+
<% end %>
|
75
19
|
</div>
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
20
|
+
<div class="content">
|
21
|
+
<% if @migrations.any? %>
|
22
|
+
<% @migrations.each do |entry| %>
|
23
|
+
<div class="container-fluid">
|
24
|
+
<div class="row">
|
25
|
+
<div class="col-md-12">
|
26
|
+
<h5 style="color: <%= entry['status'] == :todo ? 'red' : 'green' %>;">
|
27
|
+
<% if entry['status'] == :todo %>
|
28
|
+
<button type="button" class="btn btn-danger btn-xs">PENDING</button>
|
29
|
+
<a href="<%= file_link(entry['file_full_path']) %>"><%= entry['name'] %></a>
|
30
|
+
<% else %>
|
31
|
+
<%= form_tag actions_path, class: "form" do %>
|
32
|
+
<button name="cmd" title="rake db:migrate:down VERSION=<%= entry['time'] %>" type="submit" value="rake db:migrate:down VERSION=<%= entry['time'] %>" class="btn btn-info btn-xs btn-fill">
|
33
|
+
ROLLBACK
|
34
|
+
</button>
|
35
|
+
<a href="<%= file_link(entry['file_full_path']) %>"><%= entry['name'] %></a>
|
36
|
+
<% end %>
|
37
|
+
<% end %>
|
38
|
+
</h5>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
<div class="row">
|
42
|
+
<div class="col-md-12">
|
43
|
+
<pre><code class="language-ruby"><%= entry['content'] %></code></pre>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
<% end %>
|
48
|
+
<% else %>
|
49
|
+
<div class="card">
|
50
|
+
<div class="">
|
51
|
+
</div>
|
52
|
+
<div class="alert alert-info">
|
53
|
+
<span>No migrations found</span>
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
<% end %>
|
85
57
|
</div>
|
86
|
-
<% end %>
|
87
58
|
</div>
|
88
59
|
</div>
|
89
|
-
|
90
|
-
<%= render partial: "migrations", locals: { migrations: @migrations } %>
|
91
60
|
</div>
|
92
61
|
</div>
|
@@ -1,80 +1,63 @@
|
|
1
1
|
<% content_for :title do %>Models<% end %>
|
2
|
-
|
3
2
|
<div class="row">
|
4
3
|
<div class="col-md-12">
|
5
|
-
<div class="
|
6
|
-
<div class="
|
7
|
-
<
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
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" data-sain 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>Column Name</th>
|
25
|
-
<th>Type</th>
|
26
|
-
<th>Default</th>
|
27
|
-
<th>Index?</th>
|
28
|
-
<th>Can be null?</th>
|
29
|
-
<th></th>
|
30
|
-
</thead>
|
31
|
-
|
32
|
-
<tbody data-selector="tbody">
|
33
|
-
<tr data-selector="tr">
|
34
|
-
<td>
|
35
|
-
<input type="text" name="models[attributes][][attribute_name]" class="form-control">
|
36
|
-
</td>
|
37
|
-
<td>
|
38
|
-
<%= select_tag "models[attributes][][attribute_type]", options_for_select(::Localtower::Generators::Migration::TYPES), class: "form-control" %>
|
39
|
-
</td>
|
40
|
-
<td>
|
41
|
-
<%= select_tag "models[attributes][][defaults]", options_for_select(::Localtower::Generators::Migration::DEFAULTS), include_blank: true, class: "form-control" %>
|
42
|
-
</td>
|
43
|
-
<td>
|
44
|
-
<input type="checkbox" value="true" name="models[attributes][][index]" class="form-control">
|
45
|
-
</td>
|
46
|
-
<td>
|
47
|
-
<input type="checkbox" value="true" name="models[attributes][][nullable]" class="form-control" checked>
|
48
|
-
</td>
|
49
|
-
<td>
|
50
|
-
<div class="pull-right">
|
51
|
-
<button class="btn btn-danger btn-xs pointer" data-selector="remove">Remove</button>
|
52
|
-
</div>
|
53
|
-
</td>
|
54
|
-
</tr>
|
55
|
-
</tbody>
|
56
|
-
</table>
|
57
|
-
|
58
|
-
<div class="row">
|
59
|
-
<div class="col-md-12 text-center">
|
60
|
-
<i class="pe-7s-plus pointer" data-selector="duplicate" style="font-size: 3em;"></i>
|
4
|
+
<div class="content">
|
5
|
+
<div class="">
|
6
|
+
<div class="card">
|
7
|
+
<div class="">
|
8
|
+
<% if @models.empty? %>
|
9
|
+
<%= render partial: 'alert_no_models' %>
|
10
|
+
<% end %>
|
61
11
|
</div>
|
62
12
|
</div>
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
13
|
+
<div class="grid">
|
14
|
+
<div class="grid-sizer"></div>
|
15
|
+
<% @models.each do |model| %>
|
16
|
+
<div class="grid-item text-small card">
|
17
|
+
<div class="text-center">
|
18
|
+
<h5><%= model[:name] %></h5>
|
19
|
+
</div>
|
20
|
+
<table class="table table-hover table-striped table-condensed">
|
21
|
+
<thead>
|
22
|
+
<th>Field</th>
|
23
|
+
<th>Type</th>
|
24
|
+
<th>Belongs To</th>
|
25
|
+
<th>Index?</th>
|
26
|
+
</thead>
|
27
|
+
<tbody>
|
28
|
+
<% model[:attributes_list].each do |attribute_data| %>
|
29
|
+
<tr>
|
30
|
+
<td>
|
31
|
+
<code>
|
32
|
+
<%= attribute_data["name"] %>
|
33
|
+
</code>
|
34
|
+
</td>
|
35
|
+
<td>
|
36
|
+
<%= attribute_data["type_clean"] %>
|
37
|
+
</td>
|
38
|
+
<td>
|
39
|
+
<% if attribute_data["belongs_to"] %>
|
40
|
+
<span class="label label-primary">
|
41
|
+
<%= attribute_data["belongs_to"] %>
|
42
|
+
</span>
|
43
|
+
<% end %>
|
44
|
+
</td>
|
45
|
+
<td>
|
46
|
+
<% if attribute_data["index"].any? %>
|
47
|
+
<span class="label label-success">Yes</span>
|
48
|
+
<% else %>
|
49
|
+
<span class="label label-default">No</span>
|
50
|
+
<% end %>
|
51
|
+
</td>
|
52
|
+
</tr>
|
53
|
+
<% end %>
|
54
|
+
</tbody>
|
55
|
+
</table>
|
56
|
+
</div>
|
57
|
+
<% end %>
|
58
|
+
<div class="clearfix"></div>
|
73
59
|
</div>
|
74
|
-
<% end %>
|
75
60
|
</div>
|
76
61
|
</div>
|
77
|
-
|
78
|
-
<%= render partial: "migrations", locals: { migrations: @migrations } %>
|
79
62
|
</div>
|
80
63
|
</div>
|