localtower 0.4.2 → 0.5.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 +15 -32
- data/app/controllers/localtower/pages_controller.rb +16 -45
- data/app/helpers/localtower/application_helper.rb +0 -18
- data/app/views/layouts/localtower/application.html.erb +6 -48
- data/app/views/localtower/pages/_migrations.html.erb +57 -0
- data/app/views/localtower/pages/migrations.html.erb +3 -42
- data/app/views/localtower/pages/models.html.erb +5 -3
- data/app/views/localtower/pages/{dashboard.html.erb → schema.html.erb} +0 -0
- data/config/routes.rb +7 -16
- data/lib/localtower/generators/migration.rb +8 -67
- data/lib/localtower/generators/model.rb +5 -8
- data/lib/localtower/status.rb +12 -7
- data/lib/localtower/tools.rb +16 -8
- data/lib/localtower/version.rb +1 -1
- data/lib/localtower.rb +0 -1
- data/public/js/app.js +14 -29
- data/public/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css +9 -35
- 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 -1
- data/spec/dummy/Gemfile.lock +79 -87
- data/spec/dummy/app/controllers/pages_controller.rb +0 -2
- data/spec/dummy/app/models/user.rb +2 -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 +2 -1
- data/spec/dummy/db/migrate/20221115190039_create_users.rb +13 -0
- data/spec/dummy/db/migrate/20221115193020_change_users.rb +8 -0
- data/spec/dummy/db/migrate/20221115193532_change_users_at1668540931.rb +5 -0
- data/spec/dummy/db/migrate/20221115193605_change_users_at1668540964.rb +5 -0
- data/spec/dummy/db/migrate/20221115193637_change_users_at1668540996.rb +5 -0
- data/spec/dummy/db/migrate/20221115193642_change_users_at1668541001.rb +5 -0
- data/spec/dummy/db/schema.rb +29 -0
- data/spec/dummy/log/development.log +4313 -10257
- data/spec/dummy/log/localtower.log +148 -474
- data/spec/spec_helper.rb +17 -2
- metadata +24 -32
- 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/dummy/log/test.log +0 -281
- data/spec/dummy/tmp/pids/server.pid +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0f287a30405aef9188949f37fa3142997d91e188fa0d71db42ba550d47a73bc7
|
|
4
|
+
data.tar.gz: 9ba53f02eefe31b6f6f1901c2dc3b8a17461a72db8086fb2bd845ec7979fde7b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 122fd3997f2540a5fe239cadf8790975c5d881ad85ed4f632f99d53f94719832404b8ce265844f9da00f21661425106c74a6423b608bbdcb649002af6d963789
|
|
7
|
+
data.tar.gz: 8f6c8eda883c0e0dc54f1b9b218cfbd41c5dc15c36ab8ec481ffe1e2c241cefa04714c3f468d0b47556dee5576a18e69b4e42e2c46ad52850ffbb54fb332f641
|
data/README.md
CHANGED
|
@@ -22,24 +22,15 @@ Compatibility:
|
|
|
22
22
|
### Create a migration
|
|
23
23
|

|
|
24
24
|
|
|
25
|
-
### Using the Capture plugin
|
|
26
|
-

|
|
27
|
-
|
|
28
25
|
## INSTALL
|
|
29
26
|
|
|
30
|
-
|
|
27
|
+
Should work with any Rails 4.2+ application.
|
|
28
|
+
Only tested with PostgreSQL.
|
|
31
29
|
|
|
32
30
|
Add to your `Gemfile` file:
|
|
33
31
|
```ruby
|
|
34
32
|
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"
|
|
33
|
+
gem "localtower"
|
|
43
34
|
end
|
|
44
35
|
```
|
|
45
36
|
|
|
@@ -60,34 +51,27 @@ MyApp::Application.routes.draw do
|
|
|
60
51
|
end
|
|
61
52
|
```
|
|
62
53
|
|
|
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:
|
|
54
|
+
/!\ IMPORTANT /!\
|
|
55
|
+
Change your config/environments/development.rb:
|
|
70
56
|
|
|
71
57
|
```ruby
|
|
72
|
-
|
|
73
|
-
|
|
58
|
+
Rails.application.configure do
|
|
59
|
+
# ...
|
|
74
60
|
|
|
75
|
-
|
|
61
|
+
# This is the default:
|
|
62
|
+
# config.active_record.migration_error = :page_load
|
|
76
63
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
user = User.find(1)
|
|
80
|
-
some_data = {foo: "bar"}
|
|
64
|
+
# Change it to:
|
|
65
|
+
config.active_record.migration_error = false if defined?(Localtower)
|
|
81
66
|
|
|
82
|
-
|
|
67
|
+
# ...
|
|
83
68
|
end
|
|
84
69
|
```
|
|
85
70
|
|
|
86
|
-
|
|
71
|
+
## Usage
|
|
87
72
|
|
|
88
|
-
|
|
73
|
+
Open your browser at [http://localhost:3000/localtower](http://localhost:3000/localtower).
|
|
89
74
|
|
|
90
|
-
The value for each variable will try to call `.to_json`. If you have a huge collection of models likes `@users` you will see all the collection as an Array.
|
|
91
75
|
|
|
92
76
|
## Run test
|
|
93
77
|
|
|
@@ -110,7 +94,7 @@ bundle exec rspec spec/
|
|
|
110
94
|
|
|
111
95
|
Thanks for reporting issues, I'll do my best 💪
|
|
112
96
|
|
|
113
|
-
|
|
97
|
+

|
|
114
98
|
|
|
115
99
|
|
|
116
100
|
## Deploy
|
|
@@ -124,4 +108,3 @@ Do not hesitate to open issues if you have troubles using the gem.
|
|
|
124
108
|
|
|
125
109
|
- By Damian Le Nouaille Diez: https://damln.com
|
|
126
110
|
- Link on RubyGems: https://rubygems.org/gems/localtower
|
|
127
|
-
|
|
@@ -2,82 +2,53 @@ require_dependency 'localtower/application_controller'
|
|
|
2
2
|
|
|
3
3
|
module Localtower
|
|
4
4
|
class PagesController < ApplicationController
|
|
5
|
+
before_action :set_migrations, only: [:migrations, :models]
|
|
5
6
|
|
|
6
|
-
def
|
|
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
|
|
7
|
+
def schema
|
|
24
8
|
end
|
|
25
9
|
|
|
26
10
|
def migrations
|
|
27
|
-
@migrations = ::Localtower::Status.new.run
|
|
28
11
|
end
|
|
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"]["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' => migrations })
|
|
49
30
|
redirect_to migrations_path
|
|
50
31
|
end
|
|
51
32
|
|
|
52
|
-
def relations
|
|
53
|
-
@need_models = ::Localtower::Tools.enought_models_for_relation?
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def post_relations
|
|
57
|
-
use_generator(::Localtower::Generators::Relation, clean_params["relations"])
|
|
58
|
-
redirect_to relations_path
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# def tasks
|
|
62
|
-
# @tasks = ['rake db:migrate RAILS_ENV=test']
|
|
63
|
-
# end
|
|
64
|
-
|
|
65
|
-
# def post_tasks
|
|
66
|
-
# ::Localtower::Tools.perform_cmd(clean_params["task"]["name"], false)
|
|
67
|
-
|
|
68
|
-
# redirect_to tasks_path
|
|
69
|
-
# end
|
|
70
|
-
|
|
71
33
|
def models
|
|
72
34
|
end
|
|
73
35
|
|
|
74
36
|
def post_models
|
|
75
37
|
use_generator(::Localtower::Generators::Model, clean_params["models"])
|
|
76
|
-
redirect_to
|
|
38
|
+
redirect_to models_path
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def post_actions
|
|
42
|
+
::Localtower::Tools.perform_cmd(clean_params['cmd'], false)
|
|
43
|
+
redirect_back fallback_location: root_path
|
|
77
44
|
end
|
|
78
45
|
|
|
79
46
|
private
|
|
80
47
|
|
|
48
|
+
def set_migrations
|
|
49
|
+
@migrations = ::Localtower::Status.new.run.select { |entry| entry['status'] == :todo }
|
|
50
|
+
end
|
|
51
|
+
|
|
81
52
|
def use_generator(generator_klass, options)
|
|
82
53
|
generator_klass.new(options).run
|
|
83
54
|
end
|
|
@@ -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
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
<link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css">
|
|
13
13
|
|
|
14
14
|
<!-- Fonts and icons -->
|
|
15
|
-
<link href="
|
|
16
|
-
<link href='http://fonts.googleapis.com/css?family=Roboto:400,700,300' rel='stylesheet' type='text/css'>
|
|
15
|
+
<link href="/vendor/font-awesome.min.css" rel="stylesheet">
|
|
17
16
|
<link rel="stylesheet" type="text/css" href="/light-bootstrap-dashboard-master/assets/css/pe-icon-7-stroke.css">
|
|
18
17
|
|
|
18
|
+
<link rel="stylesheet" type="text/css" href="/vendor/highlight-js-default.min.css">
|
|
19
19
|
<link rel="stylesheet" type="text/css" href="/css/app.css">
|
|
20
20
|
|
|
21
21
|
<%= csrf_meta_tags %>
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
|
|
29
29
|
<div class="sidebar-wrapper">
|
|
30
30
|
<ul class="nav">
|
|
31
|
-
<li class="<%= is_active_link?(
|
|
32
|
-
<a href="<%=
|
|
31
|
+
<li class="<%= is_active_link?(schema_path, :inclusive) ? "active" : nil %>">
|
|
32
|
+
<a href="<%= schema_path %>">
|
|
33
33
|
<i class="pe-7s-home"></i>
|
|
34
34
|
<p>Schema</p>
|
|
35
35
|
</a>
|
|
@@ -42,59 +42,16 @@
|
|
|
42
42
|
</a>
|
|
43
43
|
</li>
|
|
44
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>
|
|
49
|
-
</a>
|
|
50
|
-
</li>
|
|
51
|
-
|
|
52
45
|
<li class="<%= is_active_link?(migrations_path, :inclusive) ? "active" : nil %>">
|
|
53
46
|
<a href="<%= migrations_path %>">
|
|
54
47
|
<i class="pe-7s-edit"></i>
|
|
55
48
|
<p>New Migration</p>
|
|
56
49
|
</a>
|
|
57
50
|
</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>
|
|
63
|
-
</a>
|
|
64
|
-
</li>
|
|
65
51
|
</ul>
|
|
66
52
|
</div>
|
|
67
53
|
</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
54
|
|
|
77
|
-
<div class="<%= is_active_link?(models_path, :inclusive) ? "active" : nil %>">
|
|
78
|
-
<a class="tower-a" href="<%= models_path %>">
|
|
79
|
-
<i class="pe-7s-server"></i>
|
|
80
|
-
<p>New Model</p>
|
|
81
|
-
</a>
|
|
82
|
-
</div>
|
|
83
|
-
|
|
84
|
-
<div class="<%= is_active_link?(relations_path, :inclusive) ? "active" : nil %>">
|
|
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 %>">
|
|
93
|
-
<i class="pe-7s-edit"></i>
|
|
94
|
-
<p>New Migration</p>
|
|
95
|
-
</a>
|
|
96
|
-
</div>
|
|
97
|
-
</div>
|
|
98
55
|
|
|
99
56
|
<div class="main-panel">
|
|
100
57
|
<div class="content">
|
|
@@ -134,7 +91,8 @@
|
|
|
134
91
|
|
|
135
92
|
<!-- Light Bootstrap Table Core javascript and methods for Demo purpose -->
|
|
136
93
|
<script src="/light-bootstrap-dashboard-master/assets/js/light-bootstrap-dashboard.js"></script>
|
|
137
|
-
<script src="/
|
|
94
|
+
<script src="/vendor/highlight.min.js"></script>
|
|
95
|
+
<script src="/vendor/masonry.pkgd.min.js"></script>
|
|
138
96
|
<script src="/js/app.js"></script>
|
|
139
97
|
</body>
|
|
140
98
|
</html>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<div class="card">
|
|
2
|
+
<div class="header">
|
|
3
|
+
<div class="container-fluid">
|
|
4
|
+
<div class="row">
|
|
5
|
+
<div class="col-md-6"><h4 class="title">Pending migrations</h4></div>
|
|
6
|
+
<div class="col-md-6">
|
|
7
|
+
<div class="pull-right">
|
|
8
|
+
<% if migrations.any? %>
|
|
9
|
+
<%= form_tag actions_path, class: "form" do %>
|
|
10
|
+
<button name="cmd" type="submit" value="rails db:migrate" class="btn btn-warning" data-selector="submit">
|
|
11
|
+
Run Pending Migrations (<code>bundle exec rails db:migrate</code>)
|
|
12
|
+
</button>
|
|
13
|
+
<% end %>
|
|
14
|
+
<% end %>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<div class="content">
|
|
22
|
+
<% if migrations.any? %>
|
|
23
|
+
<% migrations.each do |entry| %>
|
|
24
|
+
<div class="container-fluid">
|
|
25
|
+
<div class="row">
|
|
26
|
+
<div class="col-md-8">
|
|
27
|
+
<h5 style="color: <%= entry['status'] == :todo ? 'red' : 'green' %>;">
|
|
28
|
+
<% if entry['status'] == :todo %>
|
|
29
|
+
<button type="button" class="btn btn-danger btn-xs">PENDING</button>
|
|
30
|
+
<% end %>
|
|
31
|
+
|
|
32
|
+
<a href="<%= file_link(entry['file_full_path']) %>"><%= entry['name'] %></a>
|
|
33
|
+
</h5>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="row">
|
|
38
|
+
<div class="col-md-12">
|
|
39
|
+
<% if entry['status'] == :todo %>
|
|
40
|
+
<pre><code class="language-ruby"><%= entry['content'] %></code></pre>
|
|
41
|
+
<% end %>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<% end %>
|
|
46
|
+
|
|
47
|
+
<% else %>
|
|
48
|
+
<div class="container-fluid">
|
|
49
|
+
<div class="row">
|
|
50
|
+
<div class="col-md-8">
|
|
51
|
+
No pending migrations.
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
<% end %>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
@@ -76,11 +76,10 @@
|
|
|
76
76
|
|
|
77
77
|
<hr>
|
|
78
78
|
|
|
79
|
-
<!-- multiple lines: -->
|
|
80
79
|
<div class="row">
|
|
81
80
|
<div class="col-md-12 text-center">
|
|
82
|
-
<button
|
|
83
|
-
Create the migration
|
|
81
|
+
<button type="submit" value="true" class="btn btn-success" data-selector="submit">
|
|
82
|
+
Create the migration
|
|
84
83
|
</button>
|
|
85
84
|
</div>
|
|
86
85
|
</div>
|
|
@@ -88,44 +87,6 @@
|
|
|
88
87
|
</div>
|
|
89
88
|
</div>
|
|
90
89
|
|
|
91
|
-
|
|
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>
|
|
107
|
-
<% @migrations.each do |entry| %>
|
|
108
|
-
<%
|
|
109
|
-
klass = (entry["status"] == :done) ? "success" : "danger"
|
|
110
|
-
%>
|
|
111
|
-
<tr class="<%= klass %>">
|
|
112
|
-
<td>
|
|
113
|
-
<%= entry["name"] %>
|
|
114
|
-
</td>
|
|
115
|
-
|
|
116
|
-
<td>
|
|
117
|
-
<%= entry["time"] %>
|
|
118
|
-
</td>
|
|
119
|
-
|
|
120
|
-
<td>
|
|
121
|
-
<%= entry["status"] == :done ? 'done' : 'not executed' %>
|
|
122
|
-
</td>
|
|
123
|
-
</tr>
|
|
124
|
-
<% end %>
|
|
125
|
-
</tbody>
|
|
126
|
-
</table>
|
|
127
|
-
</div>
|
|
128
|
-
|
|
129
|
-
</div>
|
|
90
|
+
<%= render partial: "migrations", locals: { migrations: @migrations } %>
|
|
130
91
|
</div>
|
|
131
92
|
</div>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<div class="col-md-6">
|
|
15
15
|
<div class="form-group">
|
|
16
16
|
<label>Name of the Model</label>
|
|
17
|
-
<input type="text" name="models[model_name]" class="form-control">
|
|
17
|
+
<input type="text" data-sain name="models[model_name]" class="form-control">
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
20
|
</div>
|
|
@@ -66,13 +66,15 @@
|
|
|
66
66
|
<!-- multiple lines: -->
|
|
67
67
|
<div class="row">
|
|
68
68
|
<div class="col-md-12 text-center">
|
|
69
|
-
<button
|
|
70
|
-
Create the model
|
|
69
|
+
<button type="submit" value="true" class="btn btn-success" data-selector="submit">
|
|
70
|
+
Create the model Only
|
|
71
71
|
</button>
|
|
72
72
|
</div>
|
|
73
73
|
</div>
|
|
74
74
|
<% end %>
|
|
75
75
|
</div>
|
|
76
76
|
</div>
|
|
77
|
+
|
|
78
|
+
<%= render partial: "migrations", locals: { migrations: @migrations } %>
|
|
77
79
|
</div>
|
|
78
80
|
</div>
|
|
File without changes
|
data/config/routes.rb
CHANGED
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
Localtower::Engine.routes.draw do
|
|
2
|
-
get
|
|
3
|
-
post
|
|
2
|
+
get 'migrations', to: 'pages#migrations', as: :migrations
|
|
3
|
+
post 'migrations', to: 'pages#post_migrations'
|
|
4
4
|
|
|
5
|
-
get
|
|
6
|
-
post
|
|
7
|
-
|
|
8
|
-
get "relations", to: "pages#relations", as: :relations
|
|
9
|
-
post "relations", to: "pages#post_relations"
|
|
10
|
-
|
|
11
|
-
# get "tasks", to: "pages#tasks", as: :tasks
|
|
12
|
-
# post "tasks", to: "pages#post_tasks"
|
|
5
|
+
get 'models', to: 'pages#models', as: :models
|
|
6
|
+
post 'models', to: 'pages#post_models'
|
|
13
7
|
|
|
14
8
|
# get ':v/:asset', to: 'pages#asset_render', as: 'asset_render', :constraints => { :v => /[^\/]*/, :asset => /[^\/]*/ }
|
|
9
|
+
get 'schema', to: 'pages#schema', as: 'schema'
|
|
10
|
+
post 'actions', to: 'pages#post_actions', as: 'actions'
|
|
15
11
|
|
|
16
|
-
|
|
17
|
-
get 'logs', to: 'pages#logs', as: 'logs'
|
|
18
|
-
get 'logs/:md5', to: 'pages#log', as: 'log'
|
|
19
|
-
get 'logs/:md5/:var', to: 'pages#log_var', as: 'log_var'
|
|
20
|
-
|
|
21
|
-
root :to => redirect('dashboard')
|
|
12
|
+
root :to => redirect('models')
|
|
22
13
|
end
|
|
@@ -5,9 +5,11 @@ module Localtower
|
|
|
5
5
|
include Thor::Actions
|
|
6
6
|
|
|
7
7
|
no_commands do
|
|
8
|
+
# data = {last_migration_file: "", column_type: "", table_name: "", column: "", nullable: true, index: true}
|
|
8
9
|
def migration_add_column(data)
|
|
9
10
|
file = data["last_migration_file"]
|
|
10
11
|
|
|
12
|
+
# Special case for array
|
|
11
13
|
if %w(array).include?(data["column_type"])
|
|
12
14
|
line = " add_column :#{data['table_name']}, :#{data['column']}, :text"
|
|
13
15
|
line << ", default: []"
|
|
@@ -134,14 +136,12 @@ module Localtower
|
|
|
134
136
|
'change_column_type',
|
|
135
137
|
'add_index_to_column',
|
|
136
138
|
'belongs_to',
|
|
137
|
-
# 'add_index_to_column_combined',
|
|
138
139
|
'remove_index_to_column',
|
|
139
|
-
# 'create_table',
|
|
140
140
|
'drop_table',
|
|
141
141
|
].freeze
|
|
142
142
|
|
|
143
143
|
DEFAULTS = [
|
|
144
|
-
"true", "false", "nil"
|
|
144
|
+
"true", "false", "nil", "0"
|
|
145
145
|
]
|
|
146
146
|
|
|
147
147
|
# @opts =
|
|
@@ -150,21 +150,12 @@ module Localtower
|
|
|
150
150
|
@opts = JSON[opts.to_json]
|
|
151
151
|
end
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
content_schema = """
|
|
157
|
-
ActiveRecord::Schema.define(version: 0) do
|
|
158
|
-
end
|
|
159
|
-
"""
|
|
160
|
-
|
|
161
|
-
File.open("#{Rails.root}/db/schema.rb", "w") do |f|
|
|
162
|
-
f.write(content_schema)
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
153
|
+
# @opts['migrations'] = []
|
|
154
|
+
# @opts['run_migrate'] = true
|
|
166
155
|
def run
|
|
167
|
-
|
|
156
|
+
model_names = @opts['migrations'].map { |line| line['table_name'].camelize }.join
|
|
157
|
+
|
|
158
|
+
cmd = "Change#{model_names}#{@opts['migration_name']}At#{Time.now.to_i}"
|
|
168
159
|
::Localtower::Tools.perform_migration(cmd, true)
|
|
169
160
|
|
|
170
161
|
@opts['migrations'].each do |action_line|
|
|
@@ -188,7 +179,6 @@ end
|
|
|
188
179
|
'change_column_type' => -> { change_column_type(action_line) },
|
|
189
180
|
'add_index_to_column' => -> { add_index_to_column(action_line) },
|
|
190
181
|
'belongs_to' => -> { belongs_to(action_line) },
|
|
191
|
-
# 'add_index_to_column_combined' => -> { add_index_to_column_combined(action_line) },
|
|
192
182
|
'remove_index_to_column' => -> { remove_index_to_column(action_line) },
|
|
193
183
|
'create_table' => -> { create_table(action_line) },
|
|
194
184
|
'drop_table' => -> { drop_table(action_line) }
|
|
@@ -209,90 +199,41 @@ end
|
|
|
209
199
|
private
|
|
210
200
|
|
|
211
201
|
def add_column(data)
|
|
212
|
-
if not data["table_name"].present? \
|
|
213
|
-
or not data["column"].present? \
|
|
214
|
-
or not data["column_type"].present?
|
|
215
|
-
return nil
|
|
216
|
-
end
|
|
217
|
-
|
|
218
202
|
@thor.migration_add_column(data)
|
|
219
203
|
end
|
|
220
204
|
|
|
221
205
|
def remove_column(data)
|
|
222
|
-
if not data["table_name"].present? \
|
|
223
|
-
or not data["column"].present?
|
|
224
|
-
return nil
|
|
225
|
-
end
|
|
226
|
-
|
|
227
206
|
@thor.migration_remove_column(data)
|
|
228
207
|
end
|
|
229
208
|
|
|
230
209
|
def rename_column(data)
|
|
231
|
-
if not data["table_name"].present? \
|
|
232
|
-
or not data["column"].present? \
|
|
233
|
-
or not data["new_column_name"].present?
|
|
234
|
-
return nil
|
|
235
|
-
end
|
|
236
|
-
|
|
237
210
|
@thor.migration_rename_column(data)
|
|
238
211
|
end
|
|
239
212
|
|
|
240
213
|
def change_column_type(data)
|
|
241
|
-
if not data["table_name"].present? \
|
|
242
|
-
or not data["column"].present? \
|
|
243
|
-
or not data["new_column_type"].present?
|
|
244
|
-
return nil
|
|
245
|
-
end
|
|
246
|
-
|
|
247
214
|
@thor.migration_change_column_type(data)
|
|
248
215
|
end
|
|
249
216
|
|
|
250
217
|
def add_index_to_column(data)
|
|
251
|
-
if not data["table_name"].present? \
|
|
252
|
-
or not data["column"].present?
|
|
253
|
-
return nil
|
|
254
|
-
end
|
|
255
|
-
|
|
256
218
|
@thor.migration_add_index_to_column(data)
|
|
257
219
|
end
|
|
258
220
|
|
|
259
221
|
def belongs_to(data)
|
|
260
|
-
if not data["table_name"].present? and data["belongs_to"].present?
|
|
261
|
-
return nil
|
|
262
|
-
end
|
|
263
|
-
|
|
264
222
|
data["column"] = data["belongs_to"].underscore.singularize
|
|
265
223
|
data['column_type'] = "references"
|
|
266
224
|
|
|
267
225
|
@thor.migration_belongs_to(data)
|
|
268
226
|
end
|
|
269
227
|
|
|
270
|
-
# def add_index_to_column_combined(data)
|
|
271
|
-
# @thor.migration_add_index_to_column_combined(data)
|
|
272
|
-
# end
|
|
273
|
-
|
|
274
228
|
def remove_index_to_column(data)
|
|
275
|
-
if not data["table_name"].present? \
|
|
276
|
-
or not data["column"].present?
|
|
277
|
-
return nil
|
|
278
|
-
end
|
|
279
|
-
|
|
280
229
|
@thor.migration_remove_index_to_column(data)
|
|
281
230
|
end
|
|
282
231
|
|
|
283
232
|
def create_table(data)
|
|
284
|
-
if not data["table_name"].present?
|
|
285
|
-
return nil
|
|
286
|
-
end
|
|
287
|
-
|
|
288
233
|
@thor.migration_create_table(data)
|
|
289
234
|
end
|
|
290
235
|
|
|
291
236
|
def drop_table(data)
|
|
292
|
-
if not data["table_name"].present?
|
|
293
|
-
return nil
|
|
294
|
-
end
|
|
295
|
-
|
|
296
237
|
@thor.migration_drop_table(data)
|
|
297
238
|
end
|
|
298
239
|
|