localtower 0.4.2 → 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 +37 -46
- data/app/controllers/localtower/pages_controller.rb +28 -42
- data/app/helpers/localtower/application_helper.rb +0 -18
- data/app/views/layouts/localtower/application.html.erb +20 -79
- data/app/views/localtower/pages/_alert_no_models.html.erb +3 -0
- data/app/views/localtower/pages/migrations.html.erb +50 -120
- data/app/views/localtower/pages/models.html.erb +53 -68
- 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 +8 -17
- data/lib/localtower/generators/migration.rb +53 -181
- data/lib/localtower/generators/model.rb +53 -32
- 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 +12 -7
- data/lib/localtower/tools.rb +29 -24
- data/lib/localtower/version.rb +1 -1
- data/lib/localtower.rb +0 -1
- data/public/css/app.css +0 -49
- data/public/js/app.js +216 -86
- data/public/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css +9 -35
- 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/public/vendor/font-awesome.min.css +4 -0
- data/public/vendor/highlight-js-default.min.css +9 -0
- data/public/vendor/highlight.min.js +1198 -0
- data/public/{js → vendor}/masonry.pkgd.min.js +0 -0
- data/spec/dummy/Gemfile +0 -3
- data/spec/dummy/Gemfile.lock +78 -95
- data/spec/dummy/app/controllers/pages_controller.rb +0 -2
- data/spec/dummy/app/models/post.rb +3 -0
- data/spec/dummy/app/models/user.rb +3 -0
- data/spec/dummy/app/views/pages/home.html.erb +0 -1
- data/spec/dummy/config/database.yml +1 -1
- data/spec/dummy/config/environments/development.rb +3 -1
- 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 +41 -0
- data/spec/dummy/log/development.log +16030 -10038
- data/spec/dummy/log/localtower.log +1878 -439
- data/spec/dummy/log/test.log +0 -281
- data/spec/dummy/test/index.html +38 -0
- data/spec/dummy/tmp/pids/server.pid +1 -1
- 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 +25 -5
- metadata +38 -30
- data/app/views/localtower/pages/dashboard.html.erb +0 -67
- data/app/views/localtower/pages/logs.html.erb +0 -84
- data/app/views/localtower/pages/relations.html.erb +0 -66
- data/app/views/localtower/pages/tasks.html.erb +0 -48
- data/lib/localtower/generators/relation.rb +0 -59
- data/lib/localtower/plugins/capture.rb +0 -197
- data/lib/tasks/localtower_tasks.rake +0 -4
- data/spec/dummy/lib/playground.rb +0 -0
- data/spec/dummy/log/localtower_capture_d8979d360722798f7b6eb1a2694a3791.json +0 -1
- 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,42 +4,34 @@
|
|
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
|
+

|
24
22
|
|
25
|
-
###
|
26
|
-

|
27
25
|
|
28
26
|
## INSTALL
|
29
27
|
|
30
|
-
|
28
|
+
Should work with any Rails 5.2+ application.
|
29
|
+
Only tested with PostgreSQL.
|
31
30
|
|
32
31
|
Add to your `Gemfile` file:
|
33
32
|
```ruby
|
34
33
|
group :development do
|
35
|
-
gem "localtower"
|
36
|
-
end
|
37
|
-
```
|
38
|
-
|
39
|
-
If you want the latest master branch, add to your `Gemfile` file following:
|
40
|
-
```ruby
|
41
|
-
group :development do
|
42
|
-
gem "localtower", github: "damln/localtower"
|
34
|
+
gem "localtower"
|
43
35
|
end
|
44
36
|
```
|
45
37
|
|
@@ -51,8 +43,8 @@ bundle install
|
|
51
43
|
Add to your `config/routes.rb`:
|
52
44
|
```ruby
|
53
45
|
MyApp::Application.routes.draw do
|
54
|
-
if Rails.env.development?
|
55
|
-
mount Localtower::Engine, at:
|
46
|
+
if Rails.env.development?
|
47
|
+
mount Localtower::Engine, at: 'localtower'
|
56
48
|
end
|
57
49
|
|
58
50
|
# Your other routes here:
|
@@ -60,34 +52,32 @@ MyApp::Application.routes.draw do
|
|
60
52
|
end
|
61
53
|
```
|
62
54
|
|
63
|
-
|
64
|
-
|
65
|
-
Open your browser at [http://localhost:3000/localtower](http://localhost:3000/localtower).
|
66
|
-
|
67
|
-
## Logger Usage (Capture plugin)
|
68
|
-
|
69
|
-
You can put this line anywhere in your code:
|
55
|
+
/!\ IMPORTANT /!\
|
56
|
+
Change your config/environments/development.rb:
|
70
57
|
|
71
58
|
```ruby
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
For example:
|
59
|
+
Rails.application.configure do
|
60
|
+
# This is the default:
|
61
|
+
# config.active_record.migration_error = :page_load
|
76
62
|
|
77
|
-
|
78
|
-
|
79
|
-
user = User.find(1)
|
80
|
-
some_data = {foo: "bar"}
|
63
|
+
# Change it to:
|
64
|
+
config.active_record.migration_error = false if defined?(Localtower)
|
81
65
|
|
82
|
-
|
66
|
+
# ...
|
83
67
|
end
|
84
68
|
```
|
85
69
|
|
86
|
-
|
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
|
+
|
72
|
+
## Usage
|
73
|
+
|
74
|
+
Open your browser at [http://localhost:3000/localtower](http://localhost:3000/localtower).
|
87
75
|
|
88
|
-
|
76
|
+
## Roadmap
|
89
77
|
|
90
|
-
|
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
|
91
81
|
|
92
82
|
## Run test
|
93
83
|
|
@@ -108,12 +98,12 @@ bundle exec rspec spec/
|
|
108
98
|
|
109
99
|
## Contribute
|
110
100
|
|
111
|
-
Thanks for reporting issues, I'll do my best 💪
|
112
|
-
|
113
|
-
[](https://github.com/damln/localtower)
|
101
|
+
Thanks for reporting issues, I'll do my best to fix the bugs 💪
|
114
102
|
|
103
|
+

|
115
104
|
|
116
105
|
## Deploy
|
106
|
+
|
117
107
|
Only for official contributors.
|
118
108
|
|
119
109
|
rm *.gem | gem build localtower.gemspec && gem push localtower-*.gem
|
@@ -123,5 +113,6 @@ Only for official contributors.
|
|
123
113
|
Do not hesitate to open issues if you have troubles using the gem.
|
124
114
|
|
125
115
|
- By Damian Le Nouaille Diez: https://damln.com
|
126
|
-
-
|
127
|
-
|
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,25 +2,8 @@ require_dependency 'localtower/application_controller'
|
|
2
2
|
|
3
3
|
module Localtower
|
4
4
|
class PagesController < ApplicationController
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
def logs
|
10
|
-
@logs = Localtower::Plugins::Capture.new.logs
|
11
|
-
end
|
12
|
-
|
13
|
-
def log
|
14
|
-
file_content = Localtower::Plugins::Capture.log_from_md5(clean_params['md5'])
|
15
|
-
|
16
|
-
render json: file_content
|
17
|
-
end
|
18
|
-
|
19
|
-
def log_var
|
20
|
-
file_content = Localtower::Plugins::Capture.log_from_md5(clean_params['md5'])
|
21
|
-
returned = file_content["variables"].select {|i| i["event_name"] == clean_params[:var] }[0]["returned"]
|
22
|
-
|
23
|
-
render json: returned
|
5
|
+
def new_migration
|
6
|
+
@models = ::Localtower::Tools.models_presented
|
24
7
|
end
|
25
8
|
|
26
9
|
def migrations
|
@@ -29,51 +12,54 @@ module Localtower
|
|
29
12
|
|
30
13
|
def post_migrations
|
31
14
|
# Because we have a list or a field, take the item from the list in priority
|
32
|
-
|
15
|
+
migrations = clean_params["migrations"].map do |action_line|
|
16
|
+
# This is used for "rename_column" action:
|
33
17
|
action_line["new_column_type"] = action_line["column_type"]
|
34
18
|
|
35
|
-
if action_line["column"].present?
|
36
|
-
action_line["column"] = action_line["column"]
|
37
|
-
end
|
38
|
-
|
39
19
|
if action_line["column_list"].present?
|
40
20
|
action_line["column"] = action_line["column_list"]
|
41
21
|
end
|
42
22
|
|
43
23
|
action_line.delete("column_list")
|
24
|
+
# / This is used for "rename_column" action
|
44
25
|
|
45
26
|
action_line
|
46
27
|
end
|
47
28
|
|
48
|
-
use_generator(::Localtower::Generators::Migration,
|
29
|
+
use_generator(::Localtower::Generators::Migration, migrations)
|
30
|
+
|
49
31
|
redirect_to migrations_path
|
50
32
|
end
|
51
33
|
|
52
|
-
def
|
53
|
-
@need_models = ::Localtower::Tools.enought_models_for_relation?
|
34
|
+
def new_model
|
54
35
|
end
|
55
36
|
|
56
|
-
def
|
57
|
-
|
58
|
-
redirect_to relations_path
|
37
|
+
def models
|
38
|
+
@models = ::Localtower::Tools.models_presented
|
59
39
|
end
|
60
40
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
41
|
+
def post_models
|
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
|
67
51
|
|
68
|
-
|
69
|
-
|
52
|
+
attribute_line
|
53
|
+
end
|
70
54
|
|
71
|
-
|
55
|
+
use_generator(::Localtower::Generators::Model, model)
|
56
|
+
redirect_to migrations_path
|
72
57
|
end
|
73
58
|
|
74
|
-
def
|
75
|
-
|
76
|
-
|
59
|
+
def post_actions
|
60
|
+
cmd = ::Localtower::Tools.perform_cmd(clean_params['cmd'])
|
61
|
+
flash[:notice] = cmd if cmd['ERROR']
|
62
|
+
redirect_back fallback_location: root_path
|
77
63
|
end
|
78
64
|
|
79
65
|
private
|
@@ -1,25 +1,7 @@
|
|
1
1
|
module Localtower
|
2
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
|
-
|
11
|
-
link_to str, file_link(file)
|
12
|
-
end
|
13
|
-
|
14
3
|
def file_link(file)
|
15
4
|
"vscode://file/#{file}"
|
16
|
-
# "vscode://open?url=file://#{file}&line=1"
|
17
|
-
end
|
18
|
-
|
19
|
-
def to_json_print(hash)
|
20
|
-
# str = hash.to_json
|
21
|
-
# str.gsub(/,"/, ',<br>"').gsub(/\"\:/, '": ').html_safe
|
22
|
-
hash.to_json
|
23
5
|
end
|
24
6
|
end
|
25
7
|
end
|
@@ -2,100 +2,51 @@
|
|
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
|
-
<link href="
|
16
|
-
<link href='http://fonts.googleapis.com/css?family=Roboto:400,700,300' rel='stylesheet' type='text/css'>
|
12
|
+
<link href="/vendor/font-awesome.min.css" rel="stylesheet">
|
17
13
|
<link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/pe-icon-7-stroke.css">
|
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="<%= dashboard_path %>">
|
33
|
-
<i class="pe-7s-home"></i>
|
34
|
-
<p>Schema</p>
|
35
|
-
</a>
|
36
|
-
</li>
|
37
|
-
|
38
|
-
<li class="<%= is_active_link?(models_path, :inclusive) ? "active" : nil %>">
|
23
|
+
<li class="<%= is_active_link?(models_path, :exclusive) ? "active" : nil %>">
|
39
24
|
<a href="<%= models_path %>">
|
40
|
-
<i class="pe-7s-
|
41
|
-
<p>
|
42
|
-
</a>
|
43
|
-
</li>
|
44
|
-
|
45
|
-
<li class="<%= is_active_link?(relations_path, :inclusive) ? "active" : nil %>">
|
46
|
-
<a href="<%= relations_path %>">
|
47
|
-
<i class="pe-7s-shuffle"></i>
|
48
|
-
<p>New Relation</p>
|
25
|
+
<i class="pe-7s-network"></i>
|
26
|
+
<p>Models</p>
|
49
27
|
</a>
|
50
28
|
</li>
|
51
|
-
|
52
|
-
<li class="<%= is_active_link?(migrations_path, :inclusive) ? "active" : nil %>">
|
29
|
+
<li class="<%= is_active_link?(migrations_path, :exclusive) ? "active" : nil %>">
|
53
30
|
<a href="<%= migrations_path %>">
|
54
|
-
<i class="pe-7s-
|
55
|
-
<p>
|
56
|
-
</a>
|
57
|
-
</li>
|
58
|
-
|
59
|
-
<li class="<%= is_active_link?(logs_path, :inclusive) ? "active" : nil %>">
|
60
|
-
<a href="<%= logs_path %>">
|
61
|
-
<i class="pe-7s-ticket"></i>
|
62
|
-
<p>Logs</p>
|
31
|
+
<i class="pe-7s-back"></i>
|
32
|
+
<p>Migrations</p>
|
63
33
|
</a>
|
64
34
|
</li>
|
65
|
-
|
66
|
-
|
67
|
-
</div>
|
68
|
-
<div class="tower-nav">
|
69
|
-
<div class="<%= is_active_link?(dashboard_path, :inclusive) ? "active" : nil %>">
|
70
|
-
<a class="tower-a" href="<%= dashboard_path %>">
|
71
|
-
<i class="pe-7s-home"></i>
|
72
|
-
<p>Schema</p>
|
73
|
-
</a>
|
74
|
-
</div>
|
75
|
-
|
76
|
-
|
77
|
-
<div class="<%= is_active_link?(models_path, :inclusive) ? "active" : nil %>">
|
78
|
-
<a class="tower-a" href="<%= models_path %>">
|
35
|
+
<li class="<%= is_active_link?(new_model_path, :inclusive) ? "active" : nil %>">
|
36
|
+
<a href="<%= new_model_path %>">
|
79
37
|
<i class="pe-7s-server"></i>
|
80
38
|
<p>New Model</p>
|
81
39
|
</a>
|
82
|
-
</
|
83
|
-
|
84
|
-
|
85
|
-
<a class="tower-a" href="<%= relations_path %>">
|
86
|
-
<i class="pe-7s-shuffle"></i>
|
87
|
-
<p>New Relation</p>
|
88
|
-
</a>
|
89
|
-
</div>
|
90
|
-
|
91
|
-
<div class="<%= is_active_link?(migrations_path, :inclusive) ? "active" : nil %>">
|
92
|
-
<a class="tower-a" href="<%= migrations_path %>">
|
40
|
+
</li>
|
41
|
+
<li class="<%= is_active_link?(new_migration_path, :exclusive) ? "active" : nil %>">
|
42
|
+
<a href="<%= new_migration_path %>">
|
93
43
|
<i class="pe-7s-edit"></i>
|
94
44
|
<p>New Migration</p>
|
95
45
|
</a>
|
96
|
-
</
|
46
|
+
</li>
|
47
|
+
</ul>
|
48
|
+
</div>
|
97
49
|
</div>
|
98
|
-
|
99
50
|
<div class="main-panel">
|
100
51
|
<div class="content">
|
101
52
|
<div class="container-fluid">
|
@@ -104,12 +55,10 @@
|
|
104
55
|
</div>
|
105
56
|
</div>
|
106
57
|
</div>
|
107
|
-
|
108
58
|
<div class="full-message" style="display: none;">
|
109
|
-
|
110
59
|
<div class="text-center">
|
111
60
|
<br>
|
112
|
-
<h3>
|
61
|
+
<h3>Generating files</h3>
|
113
62
|
<br>
|
114
63
|
<i class="pe-7s-refresh-2 rotate"></i>
|
115
64
|
<br>
|
@@ -122,19 +71,11 @@
|
|
122
71
|
<code>bundle exec rails db:migrate</code>
|
123
72
|
</p>
|
124
73
|
</div>
|
125
|
-
|
126
74
|
</div>
|
127
|
-
|
128
75
|
<!-- Core JS Files -->
|
129
76
|
<script src="/light-bootstrap-dashboard-master/assets/js/jquery-1.10.2.js" type="text/javascript"></script>
|
130
|
-
<script src="/
|
131
|
-
|
132
|
-
<!-- Checkbox, Radio & Switch Plugins -->
|
133
|
-
<script src="/light-bootstrap-dashboard-master/assets/js/bootstrap-checkbox-radio-switch.js"></script>
|
134
|
-
|
135
|
-
<!-- Light Bootstrap Table Core javascript and methods for Demo purpose -->
|
136
|
-
<script src="/light-bootstrap-dashboard-master/assets/js/light-bootstrap-dashboard.js"></script>
|
137
|
-
<script src="/js/masonry.pkgd.min.js"></script>
|
77
|
+
<script src="/vendor/highlight.min.js"></script>
|
78
|
+
<script src="/vendor/masonry.pkgd.min.js"></script>
|
138
79
|
<script src="/js/app.js"></script>
|
139
80
|
</body>
|
140
81
|
</html>
|
@@ -1,131 +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
|
-
<div class="content">
|
11
|
-
<%= form_tag migrations_path, class: "form" do %>
|
12
|
-
|
13
|
-
<table class="table table-hover table-striped">
|
14
|
-
<thead>
|
15
|
-
<th> <span data-selector=''>On Model</span></th>
|
16
|
-
<th> <span data-selector=''>Action</span></th>
|
17
|
-
<th> <span data-selector='belongs_to_label'>Belongs To</span></th>
|
18
|
-
<th> <span data-selector='column_label'>Column</span></th>
|
19
|
-
<th> <span data-selector='new_column_name_label'>New Column Name</span></th>
|
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>
|
75
8
|
</div>
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
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 %>
|
86
19
|
</div>
|
87
|
-
|
88
|
-
|
89
|
-
</div>
|
90
|
-
|
91
|
-
<div class="card">
|
92
|
-
<div class="header">
|
93
|
-
<h4 class="title">Migrations</h4>
|
94
|
-
</div>
|
95
|
-
|
96
|
-
<div class="content">
|
97
|
-
<table class="table">
|
98
|
-
<thead>
|
99
|
-
<tr>
|
100
|
-
<th>Name</th>
|
101
|
-
<th>Date</th>
|
102
|
-
<th>Status</th>
|
103
|
-
</tr>
|
104
|
-
|
105
|
-
</thead>
|
106
|
-
<tbody>
|
20
|
+
<div class="content">
|
21
|
+
<% if @migrations.any? %>
|
107
22
|
<% @migrations.each do |entry| %>
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
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>
|
124
47
|
<% end %>
|
125
|
-
|
126
|
-
|
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 %>
|
57
|
+
</div>
|
127
58
|
</div>
|
128
|
-
|
129
59
|
</div>
|
130
60
|
</div>
|
131
61
|
</div>
|