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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +37 -46
  3. data/app/controllers/localtower/pages_controller.rb +28 -42
  4. data/app/helpers/localtower/application_helper.rb +0 -18
  5. data/app/views/layouts/localtower/application.html.erb +20 -79
  6. data/app/views/localtower/pages/_alert_no_models.html.erb +3 -0
  7. data/app/views/localtower/pages/migrations.html.erb +50 -120
  8. data/app/views/localtower/pages/models.html.erb +53 -68
  9. data/app/views/localtower/pages/new_migration.html.erb +103 -0
  10. data/app/views/localtower/pages/new_model.html.erb +87 -0
  11. data/config/routes.rb +8 -17
  12. data/lib/localtower/generators/migration.rb +53 -181
  13. data/lib/localtower/generators/model.rb +53 -32
  14. data/lib/localtower/generators/service_objects/insert_array.rb +23 -0
  15. data/lib/localtower/generators/service_objects/insert_defaults.rb +15 -43
  16. data/lib/localtower/generators/service_objects/insert_indexes.rb +80 -0
  17. data/lib/localtower/generators/service_objects/insert_nullable.rb +23 -0
  18. data/lib/localtower/status.rb +12 -7
  19. data/lib/localtower/tools.rb +29 -24
  20. data/lib/localtower/version.rb +1 -1
  21. data/lib/localtower.rb +0 -1
  22. data/public/css/app.css +0 -49
  23. data/public/js/app.js +216 -86
  24. data/public/light-bootstrap-dashboard-master/assets/css/light-bootstrap-dashboard.css +9 -35
  25. data/public/screenshots/v1.0.0/migrations.png +0 -0
  26. data/public/screenshots/v1.0.0/models.png +0 -0
  27. data/public/screenshots/v1.0.0/new_migration.png +0 -0
  28. data/public/screenshots/v1.0.0/new_model.png +0 -0
  29. data/public/vendor/font-awesome.min.css +4 -0
  30. data/public/vendor/highlight-js-default.min.css +9 -0
  31. data/public/vendor/highlight.min.js +1198 -0
  32. data/public/{js → vendor}/masonry.pkgd.min.js +0 -0
  33. data/spec/dummy/Gemfile +0 -3
  34. data/spec/dummy/Gemfile.lock +78 -95
  35. data/spec/dummy/app/controllers/pages_controller.rb +0 -2
  36. data/spec/dummy/app/models/post.rb +3 -0
  37. data/spec/dummy/app/models/user.rb +3 -0
  38. data/spec/dummy/app/views/pages/home.html.erb +0 -1
  39. data/spec/dummy/config/database.yml +1 -1
  40. data/spec/dummy/config/environments/development.rb +3 -1
  41. data/spec/dummy/config/puma.rb +1 -1
  42. data/spec/dummy/db/migrate/20230119221452_create_users.rb +14 -0
  43. data/spec/dummy/db/migrate/20230119221751_change_users_at1674166670.rb +7 -0
  44. data/spec/dummy/db/migrate/20230119222054_create_posts.rb +11 -0
  45. data/spec/dummy/db/migrate/20230119222106_change_posts_at1674166865.rb +5 -0
  46. data/spec/dummy/db/schema.rb +41 -0
  47. data/spec/dummy/log/development.log +16030 -10038
  48. data/spec/dummy/log/localtower.log +1878 -439
  49. data/spec/dummy/log/test.log +0 -281
  50. data/spec/dummy/test/index.html +38 -0
  51. data/spec/dummy/tmp/pids/server.pid +1 -1
  52. data/spec/factories/migration.rb +25 -41
  53. data/spec/factories/model.rb +39 -25
  54. data/spec/lib/localtower/generators/migration_spec.rb +36 -63
  55. data/spec/lib/localtower/generators/model_spec.rb +43 -34
  56. data/spec/lib/localtower/generators/service_objects/insert_array_spec.rb +47 -0
  57. data/spec/lib/localtower/generators/service_objects/insert_defaults_spec.rb +30 -35
  58. data/spec/lib/localtower/generators/service_objects/insert_indexes_spec.rb +90 -0
  59. data/spec/lib/localtower/generators/service_objects/insert_nullable_spec.rb +61 -0
  60. data/spec/lib/localtower/tools_spec.rb +1 -11
  61. data/spec/spec_helper.rb +25 -5
  62. metadata +38 -30
  63. data/app/views/localtower/pages/dashboard.html.erb +0 -67
  64. data/app/views/localtower/pages/logs.html.erb +0 -84
  65. data/app/views/localtower/pages/relations.html.erb +0 -66
  66. data/app/views/localtower/pages/tasks.html.erb +0 -48
  67. data/lib/localtower/generators/relation.rb +0 -59
  68. data/lib/localtower/plugins/capture.rb +0 -197
  69. data/lib/tasks/localtower_tasks.rake +0 -4
  70. data/spec/dummy/lib/playground.rb +0 -0
  71. data/spec/dummy/log/localtower_capture_d8979d360722798f7b6eb1a2694a3791.json +0 -1
  72. data/spec/lib/localtower/generators/relation_spec.rb +0 -65
@@ -1,77 +1,62 @@
1
1
  <% content_for :title do %>Models<% end %>
2
-
3
2
  <div class="row">
4
3
  <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>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
- <hr>
65
-
66
- <!-- multiple lines: -->
67
- <div class="row">
68
- <div class="col-md-12 text-center">
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>
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
62
  </div>
@@ -0,0 +1,103 @@
1
+ <% content_for :title do %>New Migration<% end %>
2
+ <div class="row">
3
+ <div class="col-md-12">
4
+ <div class="card">
5
+ <div class="header">
6
+ <% if @models.empty? %>
7
+ <%= render partial: 'alert_no_models' %>
8
+ <% end %>
9
+ <div class="alert alert-warning">
10
+ <span>Remember, you can always edit your migration files manually before running "rails db:migrate"</span>
11
+ </div>
12
+ </div>
13
+ <div class="content">
14
+ <%= form_tag migrations_path, class: "form" do %>
15
+ <div class="row">
16
+ <div class="container-table" data-selector="table">
17
+ <table class="table table-hover table-striped">
18
+ <thead>
19
+ <th> <span data-selector=''>On Model</span></th>
20
+ <th> <span data-selector=''>Action</span></th>
21
+ <th> <span data-selector='belongs_to_label'>Belongs To</span></th>
22
+ <th> <span data-selector='column_label'>Column</span></th>
23
+ <th> <span data-selector='default_label'>Default</span></th>
24
+ <th> <span data-selector='new_column_name_label'>New Column Name</span></th>
25
+ <th> <span data-selector='column_type_label'>Type</span></th>
26
+ <th> <span data-selector='index_options_label'>Index Options</span></th>
27
+ <th> <span data-selector='nullable_label'>Can be null?</span></th>
28
+ <th> <span data-selector=''></span></th>
29
+ </thead>
30
+ <tbody data-selector="tbody">
31
+ <tr data-selector="tr">
32
+ <td style='width: 300px;'>
33
+ <%= select_tag "migrations[][table_name]", options_for_select(Localtower::Tools.models.collect {|p| [ p, p.table_name ] }), class: "form-control" %>
34
+ </td>
35
+ <td style='width: 220px;'>
36
+ <%= select_tag "migrations[][action]", options_for_select(::Localtower::Generators::Migration::ACTIONS), class: "form-control", "data-selector" => "action" %>
37
+ </td>
38
+ <td>
39
+ <%= select_tag "migrations[][belongs_to]", options_for_select(Localtower::Tools.models.collect {|p| [ p, p.table_name ] }), class: "form-control", "data-selector" => "belongs_to" %>
40
+ </td>
41
+ <td class="text-center">
42
+ <input type="text" name="migrations[][column]" class="form-control" data-selector="column_text">
43
+ <%= select_tag "migrations[][column_list]", options_for_select(::Localtower::Tools.all_columns), class: "form-control", include_blank: true, "data-selector" => "column_list" %>
44
+ </td>
45
+ <td>
46
+ <%= select_tag "migrations[][default]", options_for_select(::Localtower::Generators::ServiceObjects::InsertDefaults::DEFAULTS), class: "form-control", include_blank: true, "data-selector" => "default_input" %>
47
+ </td>
48
+ <td>
49
+ <input type="text" name="migrations[][new_column_name]" class="form-control" data-selector="new_column_name">
50
+ </td>
51
+ <td>
52
+ <%= select_tag "migrations[][column_type]", options_for_select(::Localtower::Generators::Migration::TYPES), class: "form-control", "data-selector" => "column_type" %>
53
+ </td>
54
+ <td>
55
+ <div data-selector="index_options">
56
+ <div class="row">
57
+ <div class="col-md-4">
58
+ index: <br>
59
+ <%= select_tag "migrations[][index][using]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::USING - ['none']), class: "form-control" %>
60
+ </div>
61
+ <div class="col-md-4">
62
+ unique:
63
+ <br>
64
+ <%= select_tag "migrations[][index][unique]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::UNIQUE), class: "form-control" %>
65
+ </div>
66
+ <div class="col-md-4">
67
+ algorithm
68
+ <br>
69
+ <%= select_tag "migrations[][index][algorithm]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::ALGO), class: "form-control" %>
70
+ </div>
71
+ </div>
72
+ </div>
73
+ </td>
74
+ <td>
75
+ <input data-selector="nullable_input" type="checkbox" value="true" name="migrations[][nullable]" class="form-control" checked>
76
+ </td>
77
+ <td>
78
+ <div class="pull-right">
79
+ <button class="btn btn-danger btn-xs pointer" data-selector="removeLineMigration">Remove line</button>
80
+ </div>
81
+ </td>
82
+ </tr>
83
+ </tbody>
84
+ </table>
85
+ </div>
86
+ </div>
87
+ <div class="row">
88
+ <div class="col-md-12 text-center">
89
+ <i class="pe-7s-plus pointer" data-selector="duplicateLineNewMigration" style="font-size: 3em;"></i>
90
+ </div>
91
+ </div>
92
+ <div class="row">
93
+ <div class="col-md-12 text-right">
94
+ <button type="submit" value="true" class="btn btn-success btn-fill" data-selector="submitNewMigration">
95
+ Generate the migration
96
+ </button>
97
+ </div>
98
+ </div>
99
+ <% end %>
100
+ </div>
101
+ </div>
102
+ </div>
103
+ </div>
@@ -0,0 +1,87 @@
1
+ <% content_for :title do %>New Model<% end %>
2
+ <div class="row">
3
+ <div class="col-md-12">
4
+ <div class="card">
5
+ <div class="header">
6
+ <div class="alert alert-warning">
7
+ <span>Remember, you can always edit your migration files manually before running "rails db:migrate"</span>
8
+ </div>
9
+ </div>
10
+ <div class="content">
11
+ <%= form_tag models_path, class: "form" do %>
12
+ <div class="row">
13
+ <div class="col-md-6">
14
+ <div class="form-group">
15
+ <label>Name of the Model</label>
16
+ <input type="text" data-selector="modelName" name="model[model_name]" class="form-control">
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <div class="row">
21
+ <table class="table table-hover table-striped">
22
+ <thead>
23
+ <th>Type</th>
24
+ <th>Column Name</th>
25
+ <th>Default</th>
26
+ <th>Index Options</th>
27
+ <th>Can be null?</th>
28
+ <th></th>
29
+ </thead>
30
+ <tbody data-selector="tbody">
31
+ <tr data-selector="tr">
32
+ <td>
33
+ <%= select_tag "model[attributes][][attribute_type]", options_for_select(::Localtower::Generators::Migration::TYPES), class: "form-control" %>
34
+ </td>
35
+ <td>
36
+ <input type="text" data-selector="attributeName" name="model[attributes][][attribute_name]" class="form-control">
37
+ </td>
38
+ <td>
39
+ <%= select_tag "model[attributes][][default]", options_for_select(::Localtower::Generators::ServiceObjects::InsertDefaults::DEFAULTS), class: "form-control" %>
40
+ </td>
41
+ <td style='min-width: 240px'>
42
+ <div class="row">
43
+ <div class="col-md-4">
44
+ index: <br>
45
+ <%= select_tag "model[attributes][][index][using]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::USING), class: "form-control" %>
46
+ </div>
47
+ <div class="col-md-4">
48
+ unique:
49
+ <br>
50
+ <%= select_tag "model[attributes][][index][unique]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::UNIQUE), class: "form-control" %>
51
+ </div>
52
+ <div class="col-md-4">
53
+ algorithm
54
+ <br>
55
+ <%= select_tag "model[attributes][][index][algorithm]", options_for_select(::Localtower::Generators::ServiceObjects::InsertIndexes::ALGO), class: "form-control" %>
56
+ </div>
57
+ </div>
58
+ </td>
59
+ <td>
60
+ <input type="checkbox" value="true" name="model[attributes][][nullable]" class="form-control" checked>
61
+ </td>
62
+ <td>
63
+ <div class="pull-right">
64
+ <button class="btn btn-danger btn-xs pointer" data-selector="removeLineModel">Remove line</button>
65
+ </div>
66
+ </td>
67
+ </tr>
68
+ </tbody>
69
+ </table>
70
+ </div>
71
+ <div class="row">
72
+ <div class="col-md-12 text-center">
73
+ <i class="pe-7s-plus pointer" data-selector="duplicateLineNewModel" style="font-size: 3em;"></i>
74
+ </div>
75
+ </div>
76
+ <div class="row">
77
+ <div class="col-md-12 text-right">
78
+ <button type="submit" value="true" class="btn btn-success btn-fill" data-selector="submitNewModel">
79
+ Generate the migration (and the model)
80
+ </button>
81
+ </div>
82
+ </div>
83
+ <% end %>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </div>
data/config/routes.rb CHANGED
@@ -1,22 +1,13 @@
1
1
  Localtower::Engine.routes.draw do
2
- get "migrations", to: "pages#migrations", as: :migrations
3
- post "migrations", to: "pages#post_migrations"
2
+ get 'migrations/new', to: 'pages#new_migration', as: :new_migration
3
+ get 'migrations', to: 'pages#migrations', as: :migrations
4
+ post 'migrations', to: 'pages#post_migrations'
4
5
 
5
- get "models", to: "pages#models", as: :models
6
- post "models", to: "pages#post_models"
6
+ get 'models/new', to: 'pages#new_model', as: :new_model
7
+ get 'models', to: 'pages#models', as: :models
8
+ post 'models', to: 'pages#post_models'
7
9
 
8
- get "relations", to: "pages#relations", as: :relations
9
- post "relations", to: "pages#post_relations"
10
+ post 'actions', to: 'pages#post_actions', as: :actions
10
11
 
11
- # get "tasks", to: "pages#tasks", as: :tasks
12
- # post "tasks", to: "pages#post_tasks"
13
-
14
- # get ':v/:asset', to: 'pages#asset_render', as: 'asset_render', :constraints => { :v => /[^\/]*/, :asset => /[^\/]*/ }
15
-
16
- get 'dashboard', to: 'pages#dashboard', as: 'dashboard'
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/new')
22
13
  end