rails_db 0.5.1 → 0.6

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/rails_db/app.css.scss +1 -1
  3. data/app/assets/stylesheets/rails_db/application.css +1 -0
  4. data/app/assets/stylesheets/rails_db/table.css.scss +7 -0
  5. data/app/controllers/rails_db/application_controller.rb +2 -0
  6. data/app/controllers/rails_db/tables_controller.rb +23 -4
  7. data/app/helpers/rails_db/application_helper.rb +4 -3
  8. data/app/helpers/rails_db/tables_helper.rb +14 -1
  9. data/app/views/rails_db/dashboard/index.html.erb +2 -1
  10. data/app/views/rails_db/tables/_data.html.erb +45 -11
  11. data/app/views/rails_db/tables/_show.html.erb +66 -2
  12. data/app/views/rails_db/tables/data.js.erb +2 -0
  13. data/app/views/rails_db/tables/destroy.js.erb +5 -0
  14. data/app/views/rails_db/tables/show.js.erb +3 -1
  15. data/config/routes.rb +6 -2
  16. data/lib/rails_db/adapters/base_adapter.rb +8 -0
  17. data/lib/rails_db/adapters/sqlite.rb +4 -0
  18. data/lib/rails_db/table.rb +16 -0
  19. data/lib/rails_db/table_pagination.rb +2 -1
  20. data/lib/rails_db/version.rb +1 -1
  21. data/test/dashboard_controller_test.rb +16 -2
  22. data/test/database_test.rb +2 -2
  23. data/test/dummy/app/models/legacy_account.rb +2 -0
  24. data/test/dummy/app/models/payment.rb +2 -0
  25. data/test/dummy/app/models/populate.rb +6 -1
  26. data/test/dummy/db/migrate/20151027192250_create_payments.rb +14 -0
  27. data/test/dummy/db/migrate/20151027223149_add_non_pk_table.rb +10 -0
  28. data/test/dummy/db/migrate/20151028191429_create_legacy_accounts.rb +7 -0
  29. data/test/dummy/db/rails_db.sqlite3 +0 -0
  30. data/test/dummy/db/rails_db_dev.sqlite3 +0 -0
  31. data/test/dummy/db/schema.rb +26 -1
  32. data/test/dummy/test/fixtures/legacy_accounts.yml +9 -0
  33. data/test/dummy/test/models/legacy_account_test.rb +7 -0
  34. data/test/sql_import_test.rb +2 -2
  35. data/test/table_test.rb +27 -2
  36. metadata +18 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fbbb665a7d4b850e0a495693b39d3899ea8796e
4
- data.tar.gz: a7c0a5b8a44eae92cc01d8abf476b65f6e5d29a0
3
+ metadata.gz: e21d3f6ad3581eb79a6953b41b34615c8de7c0d8
4
+ data.tar.gz: dd6c322be6728fb8d6fbf96b9c01803f0619b18f
5
5
  SHA512:
6
- metadata.gz: a112e29da3ec40056d64da54dfea2661e7ccd2337aeaeec02ac35aeae43d775ffa76bba7c4e29c8f25582628d7721896182629222f4709aab5b4a02e26b169e7
7
- data.tar.gz: 9d0269b234e4fe085a6635114f2831e99c10f1dbf38bd803aa451c73d13057a574fa68233db6ae3bcb70d74267456d7ada4594872e3da4dbee15d816465909f4
6
+ metadata.gz: 0143d6f8a1247dc37d53bf657f8eb9e3d61836b61562d372d182b9b986cb4c8f74235895142549712a03a9a254523192f793b2b8a109e77d77de3a22b749d271
7
+ data.tar.gz: a268fde740ef44118e2d2ede9714ea682fd93049adedcd98891df223c1d6a4101834bc7dbc00f5056a15b280a141e30f05425cb5f7fe2b5b77d0ac5e6555872d
@@ -91,4 +91,4 @@ table {
91
91
  .sql_exp_col {
92
92
  padding-top: 8px;
93
93
  padding-left: 26px;
94
- }
94
+ }
@@ -7,6 +7,7 @@
7
7
  *= require rails_db/app
8
8
  *= require rails_db/sidebar
9
9
  *= require rails_db/pagination
10
+ *= require rails_db/table
10
11
  *= require font-awesome
11
12
  */
12
13
 
@@ -0,0 +1,7 @@
1
+ span.pk {
2
+ color: brown;
3
+ }
4
+
5
+ .delete_td {
6
+ width: 24px;
7
+ }
@@ -1,6 +1,8 @@
1
1
  module RailsDb
2
2
  class ApplicationController < ActionController::Base
3
3
 
4
+ helper :all
5
+
4
6
  if Rails::VERSION::MAJOR >= 4
5
7
  before_action :verify_access
6
8
  else
@@ -12,15 +12,34 @@ module RailsDb
12
12
  def data
13
13
  per_page = params[:per_page] || session[:per_page]
14
14
  session[:per_page] = per_page
15
- @table = RailsDb::Table.new(params[:table_id]).paginate :page => params[:page],
16
- :sort_column => params[:sort_column],
17
- :sort_order => params[:sort_order],
18
- :per_page => per_page
15
+ @table = RailsDb::Table.new(params[:table_id]).paginate page: params[:page],
16
+ sort_column: params[:sort_column],
17
+ sort_order: params[:sort_order],
18
+ per_page: per_page
19
19
  end
20
20
 
21
21
  def csv
22
22
  @table = RailsDb::Table.new(params[:table_id])
23
23
  send_data(@table.to_csv, type: 'text/csv; charset=utf-8; header=present', filename: "#{@table.name}.csv")
24
24
  end
25
+
26
+ def truncate
27
+ @table = RailsDb::Table.new(params[:table_id])
28
+ @table.truncate
29
+ render :data
30
+ end
31
+
32
+ def destroy
33
+ @table = RailsDb::Table.new(params[:table_id]).paginate page: params[:page],
34
+ sort_column: params[:sort_column],
35
+ sort_order: params[:sort_order],
36
+ per_page: session[:per_page]
37
+ @table.delete(params[:pk_id])
38
+ respond_to do |page|
39
+ page.html { redirect_to action: :data, table_id: params[:table_id] }
40
+ page.js {}
41
+ end
42
+ end
43
+
25
44
  end
26
45
  end
@@ -34,17 +34,18 @@ module RailsDb
34
34
  end
35
35
 
36
36
  def paginate_table_entries(entries)
37
+ params.delete(:id)
37
38
  return if entries.total_pages == 1
38
39
  prev_page_text = "#{fa_icon('arrow-left')} Previous".html_safe
39
40
  next_page_text = "Next #{fa_icon('arrow-right')}".html_safe
40
41
 
41
42
  html = '<div class="pagination">'
42
43
  if entries.previous_page
43
- html << link_to(prev_page_text, params.merge({ page: entries.previous_page }), { remote: true, class: 'page' })
44
+ html << link_to(prev_page_text, params.merge({ action: :data, page: entries.previous_page }), { remote: true, class: 'page' })
44
45
  end
45
46
  html << "#{page_links_for_pagination(entries)}"
46
47
  if entries.next_page
47
- html << link_to(next_page_text, params.merge({ page: entries.next_page }), { remote: true, class: 'page' })
48
+ html << link_to(next_page_text, params.merge({ action: :data, page: entries.next_page }), { remote: true, class: 'page' })
48
49
  end
49
50
  html << '</div>'
50
51
 
@@ -61,7 +62,7 @@ module RailsDb
61
62
  if page == entries.current_page
62
63
  links << content_tag(:b, page, { class: 'page current' })
63
64
  else
64
- links << link_to(page, params.merge({ page: page}), { remote: true, class: 'page' })
65
+ links << link_to(page, params.merge({ action: :data, page: page}), { remote: true, class: 'page' })
65
66
  end
66
67
  links << ' ... ' if page != pages.last && (page + 1) != pages[index+1]
67
68
  end
@@ -19,7 +19,7 @@ module RailsDb
19
19
  title = titleize_column(column, title)
20
20
  css_class = (column == params[:sort_column]) ? "current #{params[:sort_order]}" : nil
21
21
  sort_order = (column == params[:sort_column] && params[:sort_order] == 'asc') ? 'desc' : 'asc'
22
- link_to title, params.merge({ sort_column: column, sort_order: sort_order }), {remote: true, class: css_class }
22
+ link_to title, params.merge({ action: :data, sort_column: column, sort_order: sort_order }), {remote: true, class: css_class }
23
23
  end
24
24
 
25
25
  def titleize_column(column, title = nil)
@@ -30,5 +30,18 @@ module RailsDb
30
30
  link_to raw("#{fa_icon('database')} SQL Query"), rails_db.sql_path(sql: "select * from #{table} limit 10")
31
31
  end
32
32
 
33
+ def delete_row_path(table, record)
34
+ table_destroy_path(table,
35
+ pk_id: record[table.primary_key],
36
+ page: params[:page],
37
+ sort_column: params[:sort_column],
38
+ sort_order: params[:sort_order])
39
+ end
40
+
41
+ def table_pagination_path
42
+ params.delete(:pk_id)
43
+ params.merge({action: :data})
44
+ end
45
+
33
46
  end
34
47
  end
@@ -6,7 +6,7 @@
6
6
  <p>Welcome, in Rails DB you can do:</p>
7
7
 
8
8
  <ul>
9
- <li>view content of DB tables</li>
9
+ <li>view content and schema of DB tables (including indexes)</li>
10
10
  <li>sort content of DB tables</li>
11
11
  <li>execute SQL queries</li>
12
12
  <li>autocomplete for your SQL queries</li>
@@ -21,6 +21,7 @@
21
21
  <li>white/black lists</li>
22
22
  <li>data-tables inside your app</li>
23
23
  <li>ajax-ify Rails DB</li>
24
+ <li>delete records, truncate tables</li>
24
25
  <li>visualize SQL schema (future)</li>
25
26
  <li>CRUD for table records (future)</li>
26
27
  </ul>
@@ -12,29 +12,61 @@
12
12
  <dd><%= link_to raw("#{fa_icon('tasks')} Schema"), table_path(@table), remote: true %></dd>
13
13
  <dd><%= select_top_from_table(@table.name) %></dd>
14
14
  <dd><%= link_to raw("#{fa_icon('file-excel-o')} Export"), table_csv_path(@table) %></dd>
15
+ <dd>
16
+ <a href="#" data-options="align: bottom" data-dropdown="drop"><%= fa_icon 'th-large' %> Functions</a>
17
+ </dd>
15
18
  </dl>
16
19
 
20
+ <ul id="drop" class="f-dropdown" data-dropdown-content>
21
+ <li><%= link_to raw("#{fa_icon('trash-o')} Truncate Table"), table_truncate_path(@table), remote: true, confirm: 'Are you sure?', data: {confirm: 'Are you sure?'} %></a></li>
22
+ </ul>
23
+
17
24
  <div class='scrollable'>
18
25
  <table>
26
+
19
27
  <thead>
20
28
  <tr>
29
+ <% if @table.primary_key.present? %>
30
+ <th class='delete_td'></th>
31
+ <% end %>
21
32
  <% @table.columns.each do |column| %>
22
- <th><%= sortable column.name %></th>
33
+ <th>
34
+ <%= sortable column.name %>
35
+ </th>
23
36
  <% end %>
24
37
  </tr>
25
38
  </thead>
39
+
26
40
  <% n = 0 %>
41
+
27
42
  <tbody>
28
43
  <% @table.data.each do |record| %>
29
44
  <tr>
45
+ <% if @table.primary_key.present? %>
46
+ <td>
47
+ <%= link_to fa_icon('minus-circle'), delete_row_path(@table, record), remote: true, title: 'Delete Record', confirm: 'Are you sure you want to delete this record?', data: {confirm: 'Are you sure you want to delete this record?'} %>
48
+ </td>
49
+ <% end %>
50
+
30
51
  <% @table.columns.each do |column| %>
31
- <% name = column.name %>
32
- <td class="<%= name %> <%= column.type %>"><%= format_value(column, record[name]) %></td>
52
+ <td>
53
+ <% name = column.name %>
54
+ <%= format_value(column, record[name]) %>
55
+ </td>
33
56
  <% end %>
34
57
  </tr>
35
58
  <% end %>
36
59
  <% n += 1 %>
60
+ <% if @table.data.total_entries == 0 %>
61
+ <tr>
62
+ <% if @table.primary_key.present? %>
63
+ <td></td>
64
+ <% end %>
65
+ <td>No Records</td>
66
+ </tr>
67
+ <% end %>
37
68
  </tbody>
69
+
38
70
  <% if n > 10 %>
39
71
  <tfoot>
40
72
  <tr>
@@ -52,15 +84,17 @@
52
84
  <span class="radius info label">Time: <%= @table.data.time %> seconds</span>
53
85
  </p>
54
86
 
55
- <div class='left'>
56
- <%= form_tag nil, method: :get, remote: true do %>
57
- <%= select_tag :per_page, options_for_select([10, 15, 20, 50, 100, 200, 500], @table.data.per_page), class: 'per_page_pagination_select' %>
58
- <% end %>
59
- </div>
87
+ <% if @table.data.total_entries > 0 %>
88
+ <div class='left'>
89
+ <%= form_tag table_pagination_path, method: :get, remote: true do %>
90
+ <%= select_tag :per_page, options_for_select([10, 15, 20, 50, 100, 200, 500], @table.data.per_page), class: 'per_page_pagination_select' %>
91
+ <% end %>
92
+ </div>
60
93
 
61
- <div class='left per_page_pagination'>
62
- <%= paginate_table_entries @table.data %>
63
- </div>
94
+ <div class='left per_page_pagination'>
95
+ <%= paginate_table_entries @table.data %>
96
+ </div>
97
+ <% end %>
64
98
 
65
99
  <div class='clear'></div>
66
100
 
@@ -10,11 +10,23 @@
10
10
  <dd class="active"><%= link_to raw("#{fa_icon('tasks')} Schema"), table_path(@table), remote: true %></dd>
11
11
  <dd><%= select_top_from_table(@table.name) %></dd>
12
12
  <dd><%= link_to raw("#{fa_icon('file-excel-o')} Export"), table_csv_path(@table) %></dd>
13
+ <dd>
14
+ <a href="#" data-options="align: bottom" data-dropdown="drop"><%= fa_icon 'th-large' %> Functions</a>
15
+ </dd>
13
16
  </dl>
14
17
 
18
+ <ul id="drop" class="f-dropdown" data-dropdown-content>
19
+ <li><%= link_to raw("#{fa_icon('trash-o')} Truncate Table"), table_truncate_path(@table), remote: true, confirm: 'Are you sure?', data: {confirm: 'Are you sure?'} %></a></li>
20
+ </ul>
21
+
22
+ <h3>Schema</h3>
23
+
15
24
  <table>
16
25
  <thead>
17
26
  <tr>
27
+ <% if @table.primary_key.present? %>
28
+ <th>PK</th>
29
+ <% end %>
18
30
  <% @table.column_properties.each do |key| %>
19
31
  <th><%= key.titleize.upcase %></th>
20
32
  <% end %>
@@ -23,10 +35,62 @@
23
35
  <tbody>
24
36
  <% @table.columns.each do |col| %>
25
37
  <tr>
38
+ <% if @table.primary_key %>
39
+ <% if @table.primary_key == col.name %>
40
+ <td>
41
+ <span class='pk'><%= fa_icon 'key' %></span>
42
+ </td>
43
+ <% else %>
44
+ <td></td>
45
+ <% end %>
46
+ <% end %>
47
+
26
48
  <% @table.column_properties.each do |key| %>
27
- <td class="<%= key %>"><%= col.send(key) %></td>
49
+ <td class="<%= key %>">
50
+ <% value = col.send(key) %>
51
+ <%= value %>
52
+ </td>
28
53
  <% end %>
29
54
  </tr>
30
55
  <% end %>
31
56
  </tbody>
32
- </table>
57
+ </table>
58
+
59
+
60
+ <h3>Indexes</h3>
61
+
62
+ <table>
63
+ <thead>
64
+ <tr>
65
+ <th>Name</th>
66
+ <th>Unique</th>
67
+ <th>Columns</th>
68
+ <th>Length</th>
69
+ <th>Orders</th>
70
+ <% if Rails::VERSION::MAJOR >= 4 %>
71
+ <th>Where</th>
72
+ <th>Type</th>
73
+ <th>Using</th>
74
+ <% end %>
75
+ </tr>
76
+ </thead>
77
+ <tbody>
78
+ <% @table.indexes.each do |index| %>
79
+ <tr>
80
+ <td><%= index.name %></td>
81
+ <td><%= index.unique %></td>
82
+ <td><%= index.columns %></td>
83
+ <td><%= index.lengths %></td>
84
+ <td><%= index.orders %></td>
85
+ <% if Rails::VERSION::MAJOR >= 4 %>
86
+ <td><%= index.where %></td>
87
+ <td><%= index.type %></td>
88
+ <td><%= index.using %></td>
89
+ <% end %>
90
+ </tr>
91
+ <% end %>
92
+ <% if @table.indexes.none? %>
93
+ <tr><td colspan='7'>No Indexes</td></tr>
94
+ <% end %>
95
+ </tbody>
96
+ </table>
@@ -6,3 +6,5 @@ $('.sidebar_table').removeClass('selected');
6
6
  $('.sidebar_table_<%= @table.name %>').addClass('selected');
7
7
 
8
8
  stickyFooter();
9
+
10
+ $(document).foundation('reflow');
@@ -0,0 +1,5 @@
1
+ $('#main_content').html("<%= j(render 'data') %>");
2
+
3
+ stickyFooter();
4
+
5
+ $(document).foundation('reflow');
@@ -5,4 +5,6 @@ $('title').text("`<%= @table.name %>` Schema - Rails DB");
5
5
  $('.sidebar_table').removeClass('selected');
6
6
  $('.sidebar_table_<%= @table.name %>').addClass('selected');
7
7
 
8
- stickyFooter();
8
+ stickyFooter();
9
+
10
+ $(document).foundation('reflow');
@@ -1,19 +1,23 @@
1
1
  RailsDb::Engine.routes.draw do
2
2
  root :to => 'dashboard#index'
3
+
3
4
  resources :tables, :only => [:index, :show] do
4
5
  get 'data'
5
6
  get 'csv'
7
+ get 'truncate'
8
+ get 'destroy' # to handle opens in new window (GET)
6
9
  end
10
+
7
11
  get '/sql' => 'sql#index', as: :sql
12
+ get '/import' => 'sql#import', as: :sql_import
8
13
  post '/execute' => 'sql#execute', as: :sql_execute
9
14
  post '/sql-csv' => 'sql#csv', as: :sql_csv
10
-
11
- get '/import' => 'sql#import', as: :sql_import
12
15
  post '/import-start' => 'sql#import_start', as: :sql_start_import
13
16
 
14
17
  get '/data-table' => 'dashboard#data_table', as: :data_table
15
18
  end
16
19
 
20
+
17
21
  if RailsDb.automatic_routes_mount
18
22
  Rails.application.routes.draw do
19
23
  mount_rails_db_routes
@@ -28,6 +28,14 @@ module RailsDb
28
28
  'text/x-sql'
29
29
  end
30
30
 
31
+ def self.truncate(table_name)
32
+ execute("TRUNCATE TABLE #{table_name};")
33
+ end
34
+
35
+ def self.delete(table_name, pk_name, pk_id)
36
+ execute("DELETE FROM #{table_name} WHERE #{pk_name} = #{pk_id};")
37
+ end
38
+
31
39
  private
32
40
 
33
41
  def self.multiple_execute(sql, divider = ";\n")
@@ -13,6 +13,10 @@ module RailsDb
13
13
  'sqlite'
14
14
  end
15
15
 
16
+ def self.truncate(table_name)
17
+ execute("DELETE FROM #{table_name};")
18
+ end
19
+
16
20
  end
17
21
 
18
22
  end
@@ -29,6 +29,22 @@ module RailsDb
29
29
  end
30
30
  end
31
31
 
32
+ def indexes
33
+ connection.indexes(name)
34
+ end
35
+
36
+ def truncate
37
+ RailsDb::Database.adapter.truncate(name)
38
+ end
39
+
40
+ def primary_key
41
+ connection.primary_key(name)
42
+ end
43
+
44
+ def delete(id)
45
+ RailsDb::Database.adapter.delete(name, primary_key, id)
46
+ end
47
+
32
48
  end # module
33
49
 
34
50
  end
@@ -1,12 +1,13 @@
1
1
  module RailsDb
2
2
  module TablePagination
3
+ DEFAULT_PAGINATION_PER_PAGE = 10
3
4
 
4
5
  def next_page
5
6
  current_page < total_pages ? (current_page + 1) : nil
6
7
  end
7
8
 
8
9
  def paginate(options = {})
9
- self.per_page = (options[:per_page] || 10).to_i
10
+ self.per_page = (options[:per_page] || DEFAULT_PAGINATION_PER_PAGE).to_i
10
11
  self.current_page = (options[:page] || 1).to_i
11
12
  self.offset = current_page * per_page - per_page
12
13
  self.sort_column = options[:sort_column]
@@ -1,3 +1,3 @@
1
1
  module RailsDb
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6"
3
3
  end
@@ -3,8 +3,11 @@ require 'test_helper'
3
3
  class DashboardControllerTest < ActionDispatch::IntegrationTest
4
4
 
5
5
  test "should get index" do
6
- User.create(name: 'Igor')
7
- Account.create(name: 'Igor')
6
+ User.delete_all
7
+ Account.delete_all
8
+
9
+ user = User.create(name: 'Igor')
10
+ account = Account.create(name: 'Igor')
8
11
 
9
12
  get '/rails/db'
10
13
  assert_equal 200, status
@@ -31,6 +34,17 @@ class DashboardControllerTest < ActionDispatch::IntegrationTest
31
34
 
32
35
  get '/'
33
36
  assert_equal 200, status
37
+
38
+ get '/rails/db/tables/users/data?sort_column=id&sort_order=desc'
39
+ assert_equal 200, status
40
+
41
+ assert_equal 1, User.count
42
+ get "/rails/db/tables/users/destroy?pk_id=#{user.id}"
43
+ assert_equal 302, status
44
+ assert_equal 0, User.count
45
+
46
+ get '/rails/db/tables/accounts/csv'
47
+ assert_equal 200, status
34
48
  end
35
49
 
36
50
  end
@@ -6,11 +6,11 @@ class DatabaseTest < ActiveSupport::TestCase
6
6
  end
7
7
 
8
8
  test "tables" do
9
- assert_equal RailsDb::Database.tables, ["accounts", "comments", "contacts", "projects", "users"]
9
+ assert_equal RailsDb::Database.tables, ["accounts", "comments", "contacts", "legacy_accounts", "payments", "projects", "projects_users", "users"]
10
10
  end
11
11
 
12
12
  test "accessible tables" do
13
- assert_equal RailsDb::Database.accessible_tables, ["accounts", "comments", "contacts", "projects", "users"]
13
+ assert_equal RailsDb::Database.accessible_tables, ["accounts", "comments", "contacts", "legacy_accounts", "payments", "projects", "projects_users", "users"]
14
14
  end
15
15
 
16
16
  test 'adapter' do
@@ -0,0 +1,2 @@
1
+ class LegacyAccount < ActiveRecord::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class Payment < ActiveRecord::Base
2
+ end
@@ -1,6 +1,6 @@
1
1
  class Populate
2
2
 
3
- def self.populate
3
+ def Populate.populate
4
4
  require 'populator'
5
5
  require 'faker'
6
6
 
@@ -32,6 +32,11 @@ class Populate
32
32
  Project.populate 100 do |project|
33
33
  project.name = Faker::Company.name
34
34
  end
35
+
36
+ LegacyAccount.populate 100 do |account|
37
+ account.uuid = rand(1_000_000)
38
+ account.name = Faker::Company.name
39
+ end
35
40
  end
36
41
 
37
42
  end
@@ -0,0 +1,14 @@
1
+ class CreatePayments < ActiveRecord::Migration
2
+ def change
3
+ create_table :payments do |t|
4
+ t.decimal :amount
5
+ t.integer :project_id
6
+
7
+ t.timestamps null: false
8
+ end
9
+ add_index :payments, :project_id
10
+ add_index :contacts, [:name, :email]
11
+ add_index :users, [:name]
12
+ add_index :users, [:salary]
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ class AddNonPkTable < ActiveRecord::Migration
2
+ def change
3
+ create_table :projects_users, id: false do |t|
4
+ t.integer :project_id
5
+ t.integer :user_id
6
+ end
7
+ add_index :projects_users, :project_id
8
+ add_index :projects_users, :user_id
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ class CreateLegacyAccounts < ActiveRecord::Migration
2
+ def change
3
+ create_table :legacy_accounts, :primary_key => :uuid do |t|
4
+ t.string :name, uniq: true
5
+ end
6
+ end
7
+ end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20151015145740) do
14
+ ActiveRecord::Schema.define(version: 20151028191429) do
15
15
 
16
16
  create_table "accounts", force: :cascade do |t|
17
17
  t.string "name"
@@ -35,6 +35,21 @@ ActiveRecord::Schema.define(version: 20151015145740) do
35
35
  t.datetime "updated_at", null: false
36
36
  end
37
37
 
38
+ add_index "contacts", ["name", "email"], name: "index_contacts_on_name_and_email"
39
+
40
+ create_table "legacy_accounts", primary_key: "uuid", force: :cascade do |t|
41
+ t.string "name"
42
+ end
43
+
44
+ create_table "payments", force: :cascade do |t|
45
+ t.decimal "amount"
46
+ t.integer "project_id"
47
+ t.datetime "created_at", null: false
48
+ t.datetime "updated_at", null: false
49
+ end
50
+
51
+ add_index "payments", ["project_id"], name: "index_payments_on_project_id"
52
+
38
53
  create_table "projects", force: :cascade do |t|
39
54
  t.string "name"
40
55
  t.string "description_880941"
@@ -81,6 +96,14 @@ ActiveRecord::Schema.define(version: 20151015145740) do
81
96
  t.datetime "updated_at", null: false
82
97
  end
83
98
 
99
+ create_table "projects_users", id: false, force: :cascade do |t|
100
+ t.integer "project_id"
101
+ t.integer "user_id"
102
+ end
103
+
104
+ add_index "projects_users", ["project_id"], name: "index_projects_users_on_project_id"
105
+ add_index "projects_users", ["user_id"], name: "index_projects_users_on_user_id"
106
+
84
107
  create_table "users", force: :cascade do |t|
85
108
  t.string "name"
86
109
  t.integer "age"
@@ -93,5 +116,7 @@ ActiveRecord::Schema.define(version: 20151015145740) do
93
116
  end
94
117
 
95
118
  add_index "users", ["account_id"], name: "index_users_on_account_id"
119
+ add_index "users", ["name"], name: "index_users_on_name"
120
+ add_index "users", ["salary"], name: "index_users_on_salary"
96
121
 
97
122
  end
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ uuid: 1
5
+ name: MyString
6
+
7
+ two:
8
+ uuid: 1
9
+ name: MyString
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class LegacyAccountTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -7,12 +7,12 @@ class SqlImportTest < ActiveSupport::TestCase
7
7
  end
8
8
 
9
9
  test "import" do
10
- assert_equal RailsDb::Database.tables, ["accounts", "comments", "contacts", "projects", "users"]
10
+ assert_equal RailsDb::Database.tables, ["accounts", "comments", "contacts", "legacy_accounts", "payments", "projects", "projects_users", "users"]
11
11
  file = File.open("#{Rails.root}/../test_sql_#{RailsDb::Database.adapter.adapter_name}.sql")
12
12
  importer = RailsDb::SqlImport.new(file)
13
13
  importer.import
14
14
  assert importer.result.ok?, "Import successfull?"
15
- assert_equal RailsDb::Database.tables, ["accounts", "comments", "contacts", "projects", 't', "users"]
15
+ assert_equal RailsDb::Database.tables, ["accounts", "comments", "contacts", "legacy_accounts", "payments", "projects", "projects_users", 't', "users"]
16
16
  end
17
17
 
18
18
  end
@@ -12,8 +12,33 @@ class TableTest < ActiveSupport::TestCase
12
12
  end
13
13
 
14
14
  test 'to_csv' do
15
- User.create(name: "igor")
16
- assert_not_equal @users_table.to_csv, ""
15
+ User.create(name: 'igor')
16
+ assert_not_equal @users_table.to_csv, ''
17
+ end
18
+
19
+ test 'truncate' do
20
+ User.delete_all
21
+ User.create(name: 'igor')
22
+ assert_equal 1, User.count
23
+ @users_table.truncate
24
+ assert_equal 0, User.count
25
+ end
26
+
27
+ test 'primary_key' do
28
+ assert_equal 'id', @users_table.primary_key
29
+ projects_users_table = RailsDb::Table.new('projects_users')
30
+ assert_nil projects_users_table.primary_key
31
+ end
32
+
33
+ test 'delete' do
34
+ User.delete_all
35
+ user_1 = User.create(name: 'igor')
36
+ user_2 = User.create(name: 'john')
37
+ assert_equal 2, User.count
38
+ @users_table.delete(user_1.id)
39
+ assert_equal 1, User.count
40
+ assert_equal 0, User.where(name: 'igor').count
41
+ assert_equal 1, User.where(name: 'john').count
17
42
  end
18
43
 
19
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: '0.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-26 00:00:00.000000000 Z
11
+ date: 2015-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -216,6 +216,7 @@ files:
216
216
  - app/assets/stylesheets/rails_db/foundation_and_overrides.css.scss
217
217
  - app/assets/stylesheets/rails_db/pagination.css.scss
218
218
  - app/assets/stylesheets/rails_db/sidebar.css.scss
219
+ - app/assets/stylesheets/rails_db/table.css.scss
219
220
  - app/controllers/rails_db/application_controller.rb
220
221
  - app/controllers/rails_db/dashboard_controller.rb
221
222
  - app/controllers/rails_db/sql_controller.rb
@@ -244,6 +245,7 @@ files:
244
245
  - app/views/rails_db/tables/_show.html.erb
245
246
  - app/views/rails_db/tables/data.html.erb
246
247
  - app/views/rails_db/tables/data.js.erb
248
+ - app/views/rails_db/tables/destroy.js.erb
247
249
  - app/views/rails_db/tables/index.html.erb
248
250
  - app/views/rails_db/tables/show.html.erb
249
251
  - app/views/rails_db/tables/show.js.erb
@@ -292,6 +294,8 @@ files:
292
294
  - test/dummy/app/models/account.rb
293
295
  - test/dummy/app/models/comment.rb
294
296
  - test/dummy/app/models/contact.rb
297
+ - test/dummy/app/models/legacy_account.rb
298
+ - test/dummy/app/models/payment.rb
295
299
  - test/dummy/app/models/populate.rb
296
300
  - test/dummy/app/models/project.rb
297
301
  - test/dummy/app/models/user.rb
@@ -331,6 +335,9 @@ files:
331
335
  - test/dummy/db/migrate/20151014183823_create_projects.rb
332
336
  - test/dummy/db/migrate/20151014184243_add_long_text.rb
333
337
  - test/dummy/db/migrate/20151015145740_populate_db.rb
338
+ - test/dummy/db/migrate/20151027192250_create_payments.rb
339
+ - test/dummy/db/migrate/20151027223149_add_non_pk_table.rb
340
+ - test/dummy/db/migrate/20151028191429_create_legacy_accounts.rb
334
341
  - test/dummy/db/rails_db.sqlite3
335
342
  - test/dummy/db/rails_db_dev.sqlite3
336
343
  - test/dummy/db/schema.rb
@@ -342,11 +349,13 @@ files:
342
349
  - test/dummy/test/fixtures/accounts.yml
343
350
  - test/dummy/test/fixtures/comments.yml
344
351
  - test/dummy/test/fixtures/contacts.yml
352
+ - test/dummy/test/fixtures/legacy_accounts.yml
345
353
  - test/dummy/test/fixtures/projects.yml
346
354
  - test/dummy/test/fixtures/users.yml
347
355
  - test/dummy/test/models/account_test.rb
348
356
  - test/dummy/test/models/comment_test.rb
349
357
  - test/dummy/test/models/contact_test.rb
358
+ - test/dummy/test/models/legacy_account_test.rb
350
359
  - test/dummy/test/models/project_test.rb
351
360
  - test/dummy/test/models/user_test.rb
352
361
  - test/rails_db_data_table_helper_test.rb
@@ -401,6 +410,8 @@ test_files:
401
410
  - test/dummy/app/models/account.rb
402
411
  - test/dummy/app/models/comment.rb
403
412
  - test/dummy/app/models/contact.rb
413
+ - test/dummy/app/models/legacy_account.rb
414
+ - test/dummy/app/models/payment.rb
404
415
  - test/dummy/app/models/populate.rb
405
416
  - test/dummy/app/models/project.rb
406
417
  - test/dummy/app/models/user.rb
@@ -440,6 +451,9 @@ test_files:
440
451
  - test/dummy/db/migrate/20151014183823_create_projects.rb
441
452
  - test/dummy/db/migrate/20151014184243_add_long_text.rb
442
453
  - test/dummy/db/migrate/20151015145740_populate_db.rb
454
+ - test/dummy/db/migrate/20151027192250_create_payments.rb
455
+ - test/dummy/db/migrate/20151027223149_add_non_pk_table.rb
456
+ - test/dummy/db/migrate/20151028191429_create_legacy_accounts.rb
443
457
  - test/dummy/db/rails_db.sqlite3
444
458
  - test/dummy/db/rails_db_dev.sqlite3
445
459
  - test/dummy/db/schema.rb
@@ -453,11 +467,13 @@ test_files:
453
467
  - test/dummy/test/fixtures/accounts.yml
454
468
  - test/dummy/test/fixtures/comments.yml
455
469
  - test/dummy/test/fixtures/contacts.yml
470
+ - test/dummy/test/fixtures/legacy_accounts.yml
456
471
  - test/dummy/test/fixtures/projects.yml
457
472
  - test/dummy/test/fixtures/users.yml
458
473
  - test/dummy/test/models/account_test.rb
459
474
  - test/dummy/test/models/comment_test.rb
460
475
  - test/dummy/test/models/contact_test.rb
476
+ - test/dummy/test/models/legacy_account_test.rb
461
477
  - test/dummy/test/models/project_test.rb
462
478
  - test/dummy/test/models/user_test.rb
463
479
  - test/rails_db_data_table_helper_test.rb