rails_db 0.9 → 0.9.9
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/Gemfile +2 -0
- data/Gemfile.lock +16 -1
- data/app/assets/javascripts/rails_db/application.js +16 -0
- data/app/assets/javascripts/rails_db/search.js +19 -0
- data/app/assets/javascripts/rails_db/show_hide_columns.js +1 -1
- data/app/assets/stylesheets/rails_db/app.css.scss +12 -6
- data/app/assets/stylesheets/rails_db/application.css +1 -0
- data/app/assets/stylesheets/rails_db/search.css.scss +15 -0
- data/app/controllers/rails_db/application_controller.rb +5 -0
- data/app/controllers/rails_db/tables_controller.rb +17 -13
- data/app/helpers/rails_db/application_helper.rb +11 -2
- data/app/helpers/rails_db/tables_helper.rb +5 -9
- data/app/views/rails_db/dashboard/index.html.erb +2 -1
- data/app/views/rails_db/shared/_sidebar.html.erb +1 -1
- data/app/views/rails_db/tables/_condition_fields.html.erb +10 -0
- data/app/views/rails_db/tables/_data.html.erb +43 -32
- data/app/views/rails_db/tables/_search.html.erb +76 -0
- data/app/views/rails_db/tables/_show.html.erb +8 -1
- data/app/views/rails_db/tables/data.js.erb +3 -1
- data/app/views/rails_db/tables/show.js.erb +2 -0
- data/lib/rails_db.rb +2 -0
- data/lib/rails_db/table.rb +8 -1
- data/lib/rails_db/version.rb +1 -1
- data/rails_db.gemspec +7 -5
- data/test/dummy/db/rails_db.sqlite3 +0 -0
- data/test/dummy/db/rails_db_dev.sqlite3 +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -1
- data/test/standalone/Gemfile +4 -0
- metadata +34 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee0ce0d6e3a70aa6c991f4dc375d28d219cb452a
|
4
|
+
data.tar.gz: 3fb59fa306290006d2e462abd6d88f0d10c3909c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90db375ee0998789dbc68d35c20518f63861d432cc7f93f646040e9f9b65fb3df386642f5a1e19a0fc4b5327d36304df3f87bb1a331515e589cd30941177d221
|
7
|
+
data.tar.gz: 5f5676c71b5c9b4439bd36b9e4edb5174348e1402c2bfc912cfc770113f662705bfa3510404e4c6a096ca068555ce5da966cfe931d492ac858e3a4196412d455
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rails_db (0.9)
|
4
|
+
rails_db (0.9.9)
|
5
5
|
axlsx_rails
|
6
6
|
codemirror-rails
|
7
7
|
font-awesome-rails
|
8
8
|
jquery-rails
|
9
|
+
kaminari
|
9
10
|
launchy
|
10
11
|
rails (>= 3.1.0)
|
12
|
+
ransack
|
11
13
|
sass
|
12
14
|
sass-rails
|
13
15
|
simple_form
|
@@ -76,6 +78,9 @@ GEM
|
|
76
78
|
railties (>= 4.2.0)
|
77
79
|
thor (>= 0.14, < 2.0)
|
78
80
|
json (1.8.3)
|
81
|
+
kaminari (0.16.3)
|
82
|
+
actionpack (>= 3.0.0)
|
83
|
+
activesupport (>= 3.0.0)
|
79
84
|
launchy (2.4.3)
|
80
85
|
addressable (~> 2.3)
|
81
86
|
loofah (2.0.3)
|
@@ -89,6 +94,8 @@ GEM
|
|
89
94
|
nokogiri (1.6.6.2)
|
90
95
|
mini_portile (~> 0.6.0)
|
91
96
|
pg (0.18.3)
|
97
|
+
polyamorous (1.2.0)
|
98
|
+
activerecord (>= 3.0)
|
92
99
|
rack (1.6.4)
|
93
100
|
rack-test (0.6.3)
|
94
101
|
rack (>= 1.0)
|
@@ -117,6 +124,12 @@ GEM
|
|
117
124
|
rake (>= 0.8.7)
|
118
125
|
thor (>= 0.18.1, < 2.0)
|
119
126
|
rake (10.4.2)
|
127
|
+
ransack (1.7.0)
|
128
|
+
actionpack (>= 3.0)
|
129
|
+
activerecord (>= 3.0)
|
130
|
+
activesupport (>= 3.0)
|
131
|
+
i18n
|
132
|
+
polyamorous (~> 1.2)
|
120
133
|
rubyzip (1.0.0)
|
121
134
|
sass (3.4.19)
|
122
135
|
sass-rails (5.0.4)
|
@@ -153,10 +166,12 @@ DEPENDENCIES
|
|
153
166
|
codemirror-rails
|
154
167
|
font-awesome-rails
|
155
168
|
jquery-rails
|
169
|
+
kaminari
|
156
170
|
mysql2 (<= 0.3.20)
|
157
171
|
pg
|
158
172
|
rails
|
159
173
|
rails_db!
|
174
|
+
ransack
|
160
175
|
sass
|
161
176
|
sass-rails
|
162
177
|
simple_form
|
@@ -24,6 +24,7 @@
|
|
24
24
|
//= require codemirror/addons/hint/show-hint.js
|
25
25
|
//= require codemirror/addons/hint/sql-hint.js
|
26
26
|
//= require rails_db/show_hide_columns.js
|
27
|
+
//= require rails_db/search.js
|
27
28
|
|
28
29
|
$(function(){
|
29
30
|
$(document).foundation();
|
@@ -93,3 +94,18 @@ function init_sql_editor(mime, tables) {
|
|
93
94
|
editor.setSize('100%', '300');
|
94
95
|
editor.focus();
|
95
96
|
};
|
97
|
+
|
98
|
+
function set_browser_url(url) {
|
99
|
+
if (typeof (history.pushState) != "undefined") {
|
100
|
+
window.history.pushState({"path": url}, '', url);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
$(window).bind('popstate', function(event) {
|
105
|
+
if (typeof (history.pushState) != "undefined") {
|
106
|
+
var state = event.originalEvent.state;
|
107
|
+
if (state) {
|
108
|
+
window.location = state.path;
|
109
|
+
}
|
110
|
+
}
|
111
|
+
});
|
@@ -0,0 +1,19 @@
|
|
1
|
+
$(function() {
|
2
|
+
$('body').on('click', '.remove_fields', function(event) {
|
3
|
+
$(this).closest('.field').remove();
|
4
|
+
return event.preventDefault();
|
5
|
+
});
|
6
|
+
|
7
|
+
$('body').on('click', '.add_fields', function(event) {
|
8
|
+
var regexp, time;
|
9
|
+
time = new Date().getTime();
|
10
|
+
regexp = new RegExp($(this).data('id'), 'g');
|
11
|
+
$(this).before($(this).data('fields').replace(regexp, time));
|
12
|
+
return event.preventDefault();
|
13
|
+
});
|
14
|
+
|
15
|
+
$('body').on('click', '.search-link', function(event) {
|
16
|
+
$("#search_form").toggle();
|
17
|
+
return false;
|
18
|
+
});
|
19
|
+
});
|
@@ -24,12 +24,14 @@ table {
|
|
24
24
|
background-position: right center;
|
25
25
|
}
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
&.custom_sorting {
|
28
|
+
th .asc {
|
29
|
+
background-image: asset-url('rails_db/up_arrow.gif');
|
30
|
+
}
|
31
|
+
|
32
|
+
th .desc {
|
33
|
+
background-image: asset-url('rails_db/down_arrow.gif');
|
34
|
+
}
|
33
35
|
}
|
34
36
|
|
35
37
|
th, td {
|
@@ -96,3 +98,7 @@ table {
|
|
96
98
|
padding-top: 8px;
|
97
99
|
padding-left: 26px;
|
98
100
|
}
|
101
|
+
|
102
|
+
.panel.no_bottom_padding {
|
103
|
+
padding-bottom: 0;
|
104
|
+
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module RailsDb
|
2
2
|
class ApplicationController < ActionController::Base
|
3
3
|
helper :all
|
4
|
+
helper_method :per_page
|
4
5
|
|
5
6
|
if Rails::VERSION::MAJOR >= 4
|
6
7
|
before_action :verify_access
|
@@ -20,6 +21,10 @@ module RailsDb
|
|
20
21
|
redirect_to('/', error: 'Access Denied', status: 401) unless result
|
21
22
|
end
|
22
23
|
|
24
|
+
def per_page
|
25
|
+
params[:per_page] || session[:per_page]
|
26
|
+
end
|
27
|
+
|
23
28
|
end
|
24
29
|
end
|
25
30
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RailsDb
|
2
2
|
class TablesController < RailsDb::ApplicationController
|
3
3
|
if Rails::VERSION::MAJOR >= 4
|
4
|
-
before_action :find_table, only: [:show, :data, :csv, :truncate, :destroy, :edit, :update, :xlsx]
|
4
|
+
before_action :find_table, only: [:show, :data, :csv, :truncate, :destroy, :edit, :update, :xlsx, :search]
|
5
5
|
else
|
6
6
|
before_filter :find_table
|
7
7
|
end
|
@@ -15,10 +15,16 @@ module RailsDb
|
|
15
15
|
|
16
16
|
def data
|
17
17
|
session[:per_page] = per_page
|
18
|
-
@
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
@model = @table.as_model
|
19
|
+
@q = @model.ransack(params[:q])
|
20
|
+
@sql = @q.result.page(params[:page]).per(per_page).to_sql
|
21
|
+
@records = @q.result.page(params[:page]).per(per_page)
|
22
|
+
@q.build_condition if @q.conditions.empty?
|
23
|
+
@q.build_sort if @q.sorts.empty?
|
24
|
+
respond_to do |page|
|
25
|
+
page.html {}
|
26
|
+
page.js {}
|
27
|
+
end
|
22
28
|
end
|
23
29
|
|
24
30
|
def csv
|
@@ -35,10 +41,12 @@ module RailsDb
|
|
35
41
|
end
|
36
42
|
|
37
43
|
def destroy
|
38
|
-
@
|
39
|
-
|
40
|
-
|
41
|
-
|
44
|
+
@model = @table.as_model
|
45
|
+
@q = @model.ransack(params[:q])
|
46
|
+
@sql = @q.result.page(params[:page]).per(per_page).to_sql
|
47
|
+
@records = @q.result.page(params[:page]).per(per_page)
|
48
|
+
@q.build_condition if @q.conditions.empty?
|
49
|
+
@q.build_sort if @q.sorts.empty?
|
42
50
|
@table.delete(params[:pk_id])
|
43
51
|
respond_to do |page|
|
44
52
|
page.html { redirect_to action: :data, table_id: params[:table_id] }
|
@@ -77,9 +85,5 @@ module RailsDb
|
|
77
85
|
@table ||= RailsDb::Table.new(params[:id] || params[:table_id])
|
78
86
|
end
|
79
87
|
|
80
|
-
def per_page
|
81
|
-
params[:per_page] || session[:per_page]
|
82
|
-
end
|
83
|
-
|
84
88
|
end
|
85
89
|
end
|
@@ -6,11 +6,20 @@ module RailsDb
|
|
6
6
|
RailsDb::Database.accessible_tables
|
7
7
|
end
|
8
8
|
|
9
|
+
def link_to_add_fields(name, f, type)
|
10
|
+
new_object = f.object.send "build_#{type}"
|
11
|
+
id = "new_#{type}"
|
12
|
+
fields = f.send("#{type}_fields", new_object, child_index: id) do |builder|
|
13
|
+
render(type.to_s + "_fields", f: builder)
|
14
|
+
end
|
15
|
+
link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")})
|
16
|
+
end
|
17
|
+
|
9
18
|
def sidebar_classes
|
10
19
|
if show_sidebar?
|
11
|
-
'large-3 pull-9 columns'
|
20
|
+
'large-3 large-pull-9 columns'
|
12
21
|
else
|
13
|
-
'large-3 pull-9 columns hide'
|
22
|
+
'large-3 large-pull-9 columns hide'
|
14
23
|
end
|
15
24
|
end
|
16
25
|
|
@@ -15,13 +15,6 @@ module RailsDb
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def sortable(column, title = nil)
|
19
|
-
title = titleize_column(column, title)
|
20
|
-
css_class = (column == params[:sort_column]) ? "current #{params[:sort_order]}" : nil
|
21
|
-
sort_order = (column == params[:sort_column] && params[:sort_order] == 'asc') ? 'desc' : 'asc'
|
22
|
-
link_to title, params.merge({ action: :data, sort_column: column, sort_order: sort_order }), {remote: true, class: css_class }
|
23
|
-
end
|
24
|
-
|
25
18
|
def titleize_column(column, title = nil)
|
26
19
|
column
|
27
20
|
end
|
@@ -34,8 +27,7 @@ module RailsDb
|
|
34
27
|
table_destroy_path(table,
|
35
28
|
pk_id: record[table.primary_key],
|
36
29
|
page: params[:page],
|
37
|
-
|
38
|
-
sort_order: params[:sort_order])
|
30
|
+
q: params[:q])
|
39
31
|
end
|
40
32
|
|
41
33
|
def table_pagination_path
|
@@ -55,5 +47,9 @@ module RailsDb
|
|
55
47
|
column_is_checked?(table_name, column_name) ? 'display' : 'display:none'
|
56
48
|
end
|
57
49
|
|
50
|
+
def search_form_class
|
51
|
+
params[:q].present? ? '' : 'hide'
|
52
|
+
end
|
53
|
+
|
58
54
|
end
|
59
55
|
end
|
@@ -3,13 +3,14 @@
|
|
3
3
|
<br/>
|
4
4
|
<br/>
|
5
5
|
|
6
|
-
<p>Welcome, in Rails DB you can
|
6
|
+
<p>Welcome, in Rails DB you can:</p>
|
7
7
|
|
8
8
|
<ul>
|
9
9
|
<li>use command line tools `railsdb` and `runsql` to run app and sql for your apps.</li>
|
10
10
|
<li>view content and schema of DB tables (including indexes)</li>
|
11
11
|
<li>edit content</li>
|
12
12
|
<li>sort content of DB tables</li>
|
13
|
+
<li>filters support</li>
|
13
14
|
<li>execute SQL queries</li>
|
14
15
|
<li>enjoy autocomplete for your SQL queries</li>
|
15
16
|
<li>filter tables for easier navigation</li>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<ul class="side-nav tables" id='rails_db_tables'>
|
6
6
|
<% rails_db_tables.each do |table| %>
|
7
7
|
<li>
|
8
|
-
<%= link_to table_data_path(table
|
8
|
+
<%= link_to table_data_path(table), remote: true, class: "sidebar_table sidebar_table_#{table}" do %>
|
9
9
|
<%= fa_icon 'table'%>
|
10
10
|
<%= table %>
|
11
11
|
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div class="field">
|
2
|
+
<%= f.attribute_fields do |a| %>
|
3
|
+
<%= a.attribute_select associations: [:category] %>
|
4
|
+
<% end %>
|
5
|
+
<%= f.predicate_select %>
|
6
|
+
<%= f.value_fields do |v| %>
|
7
|
+
<%= v.text_field :value %>
|
8
|
+
<% end %>
|
9
|
+
<%= link_to raw("#{fa_icon 'minus'} remove"), '#', class: "remove_fields" %>
|
10
|
+
</div>
|
@@ -18,21 +18,38 @@
|
|
18
18
|
<a href="#" data-options="align: bottom" data-dropdown="drop"><%= fa_icon 'th-large' %> Functions</a>
|
19
19
|
</dd>
|
20
20
|
<dd class="right"><%= link_to raw("#{fa_icon('cogs')} Settings"), '#', :class => 'settings-link', :table_name => "#{@table.name}" %></dd>
|
21
|
+
<dd class="right"><%= link_to raw("#{fa_icon('search')} Search"), '#', :class => 'search-link' %></dd>
|
21
22
|
</dl>
|
22
23
|
<div class="clearfix"></div>
|
23
24
|
|
24
|
-
|
25
25
|
<ul id="drop" class="f-dropdown" data-dropdown-content>
|
26
26
|
<li><%= link_to raw("#{fa_icon('trash-o')} Truncate Table"), table_truncate_path(@table), data: {confirm: 'Are you sure?'} %></li>
|
27
27
|
</ul>
|
28
28
|
|
29
29
|
<ul id="download-files" class="f-dropdown" data-dropdown-content>
|
30
|
-
<li><%= link_to raw("#{fa_icon('file-text-o')} Export to CSV"), table_csv_path(@table) %></li>
|
31
|
-
<li><%= link_to raw("#{fa_icon('file-excel-o')} Export to Excel"), table_xlsx_path(@table, format: 'xls') %></li>
|
30
|
+
<li><%= link_to raw("#{fa_icon('file-text-o')} Export table to CSV"), table_csv_path(@table) %></li>
|
31
|
+
<li><%= link_to raw("#{fa_icon('file-excel-o')} Export table to Excel"), table_xlsx_path(@table, format: 'xls') %></li>
|
32
32
|
</ul>
|
33
33
|
|
34
34
|
<div class='scrollable'>
|
35
|
-
|
35
|
+
<%= search_form_for @q, url: table_data_path(@table), method: :get, remote: true, html: { id: 'search_form', class: search_form_class } do |f| %>
|
36
|
+
<div class='panel no_bottom_padding'>
|
37
|
+
<h6>Search</h6>
|
38
|
+
<%= f.condition_fields do |c| %>
|
39
|
+
<%= render "condition_fields", f: c %>
|
40
|
+
<% end %>
|
41
|
+
<p><%= link_to_add_fields raw("#{fa_icon 'plus'} Add Conditions"), f, :condition %></p>
|
42
|
+
<div class="field sorting_options">
|
43
|
+
Sort:
|
44
|
+
<%= f.sort_fields do |s| %>
|
45
|
+
<%= s.sort_select %>
|
46
|
+
<% end %>
|
47
|
+
</div>
|
48
|
+
<div class="actions"><%= f.submit "Search", class: 'button small' %></div>
|
49
|
+
</div>
|
50
|
+
<% end %>
|
51
|
+
|
52
|
+
<div class='rails-db-settings panel no_bottom_padding' style="display:none">
|
36
53
|
<h6>Settings</h6>
|
37
54
|
<% @table.columns.each do |column| %>
|
38
55
|
<label class='column-name'>
|
@@ -40,47 +57,42 @@
|
|
40
57
|
<%= column.name %>
|
41
58
|
</label>
|
42
59
|
<% end %>
|
60
|
+
<div class='clearfix'></div>
|
43
61
|
</div>
|
44
62
|
|
45
|
-
<table>
|
63
|
+
<table id="search_records" class='table'>
|
46
64
|
<thead>
|
47
65
|
<tr>
|
48
|
-
<% if @table.primary_key
|
49
|
-
<th
|
50
|
-
<th class='edit_td'></th>
|
66
|
+
<% if @table.primary_key %>
|
67
|
+
<th colspan="2">Actions</th>
|
51
68
|
<% end %>
|
52
|
-
<% @
|
53
|
-
<th class="column_<%= column
|
54
|
-
<%=
|
69
|
+
<% @model.column_names.each do |column| %>
|
70
|
+
<th class="column_<%= column %>" style="<%= display_style_column(@table.name, column)%>">
|
71
|
+
<%= sort_link(@q, column) %>
|
55
72
|
</th>
|
56
73
|
<% end %>
|
57
74
|
</tr>
|
58
75
|
</thead>
|
59
|
-
|
60
|
-
<% n = 0 %>
|
61
|
-
|
62
76
|
<tbody>
|
63
|
-
<% @
|
77
|
+
<% @records.each do |record| %>
|
64
78
|
<tr class="row_<%= record[@table.primary_key] %>">
|
65
79
|
<%= render 'row', record: record %>
|
66
80
|
</tr>
|
67
81
|
<% end %>
|
68
|
-
|
69
|
-
<% if @
|
70
|
-
<
|
71
|
-
<% if @table.primary_key.present? %>
|
72
|
-
<td></td>
|
73
|
-
<% end %>
|
74
|
-
<td>No Records</td>
|
75
|
-
</tr>
|
82
|
+
|
83
|
+
<% if @records.none? %>
|
84
|
+
<td>No Records</td>
|
76
85
|
<% end %>
|
77
86
|
</tbody>
|
78
87
|
|
79
|
-
<% if
|
88
|
+
<% if @records.size > 10 %>
|
80
89
|
<tfoot>
|
81
90
|
<tr>
|
82
|
-
<% @table.
|
83
|
-
<th
|
91
|
+
<% if @table.primary_key %>
|
92
|
+
<th colspan="2">Actions</th>
|
93
|
+
<% end %>
|
94
|
+
<% @model.column_names.each do |column| %>
|
95
|
+
<th> <%= sort_link(@q, column) %> </th>
|
84
96
|
<% end %>
|
85
97
|
</tr>
|
86
98
|
</tfoot>
|
@@ -89,20 +101,19 @@
|
|
89
101
|
</div>
|
90
102
|
|
91
103
|
<p>
|
92
|
-
<span class="radius success label">Total: <%= pluralize @
|
93
|
-
<span class="radius info label">Time: <%= @table.data.time %> seconds</span>
|
104
|
+
<span class="radius success label">Total: <%= pluralize @records.total_count, 'record' %></span>
|
94
105
|
</p>
|
95
106
|
|
96
|
-
<% if @
|
107
|
+
<% if @records.total_count > 10 %>
|
97
108
|
<div class='left'>
|
98
109
|
<%= form_tag table_pagination_path, method: :get, remote: true do %>
|
99
|
-
<%= select_tag :per_page, options_for_select([10, 15, 20, 50, 100, 200, 500],
|
110
|
+
<%= select_tag :per_page, options_for_select([10, 15, 20, 50, 100, 200, 500], per_page), class: 'per_page_pagination_select' %>
|
100
111
|
<% end %>
|
101
112
|
</div>
|
102
113
|
|
103
114
|
<div class='left per_page_pagination'>
|
104
|
-
<%=
|
115
|
+
<%= paginate @records, remote: true %>
|
105
116
|
</div>
|
106
117
|
<% end %>
|
107
118
|
|
108
|
-
<div class='clear'></div>
|
119
|
+
<div class='clear'></div>
|
@@ -0,0 +1,76 @@
|
|
1
|
+
<% title "'#{@table.name}'"%>
|
2
|
+
|
3
|
+
<h2>Table: <%= @table.name %></h2>
|
4
|
+
|
5
|
+
<div class='clear'></div>
|
6
|
+
|
7
|
+
<hr/>
|
8
|
+
|
9
|
+
<dl class="sub-nav">
|
10
|
+
<dd><%= render '/rails_db/shared/exp_col' %></dd>
|
11
|
+
<dd class="active"><%= link_to raw("#{fa_icon('table')} Records"), table_data_path(@table), remote: true %></dd>
|
12
|
+
<dd><%= link_to raw("#{fa_icon('tasks')} Schema"), table_path(@table), remote: true %></dd>
|
13
|
+
<dd><%= select_top_from_table(@table.name) %></dd>
|
14
|
+
<dd>
|
15
|
+
<a href="#" data-options="align: bottom" data-dropdown="download-files"><%= fa_icon 'download' %> Export</a>
|
16
|
+
</dd>
|
17
|
+
<dd>
|
18
|
+
<a href="#" data-options="align: bottom" data-dropdown="drop"><%= fa_icon 'th-large' %> Functions</a>
|
19
|
+
</dd>
|
20
|
+
<dd class="right"><%= link_to raw("#{fa_icon('cogs')} Settings"), '#', :class => 'settings-link', :table_name => "#{@table.name}" %></dd>
|
21
|
+
<dd class="right"><%= link_to raw("#{fa_icon('search')} Search"), '#', :class => 'search-link' %></dd>
|
22
|
+
</dl>
|
23
|
+
<div class="clearfix"></div>
|
24
|
+
|
25
|
+
<ul id="drop" class="f-dropdown" data-dropdown-content>
|
26
|
+
<li><%= link_to raw("#{fa_icon('trash-o')} Truncate Table"), table_truncate_path(@table), data: {confirm: 'Are you sure?'} %></li>
|
27
|
+
</ul>
|
28
|
+
|
29
|
+
<ul id="download-files" class="f-dropdown" data-dropdown-content>
|
30
|
+
<li><%= link_to raw("#{fa_icon('file-text-o')} Export to CSV"), table_csv_path(@table) %></li>
|
31
|
+
<li><%= link_to raw("#{fa_icon('file-excel-o')} Export to Excel"), table_xlsx_path(@table, format: 'xls') %></li>
|
32
|
+
</ul>
|
33
|
+
|
34
|
+
<%= search_form_for @q, url: table_search_path(@table), method: :get, remote: true, html: { id: 'search_form', class: search_form_class } do |f| %>
|
35
|
+
<%= f.condition_fields do |c| %>
|
36
|
+
<%= render "condition_fields", f: c %>
|
37
|
+
<% end %>
|
38
|
+
<p><%= link_to_add_fields raw("#{fa_icon 'plus'} Add Conditions"), f, :condition %></p>
|
39
|
+
<div class="field sorting_options">
|
40
|
+
Sort:
|
41
|
+
<%= f.sort_fields do |s| %>
|
42
|
+
<%= s.sort_select %>
|
43
|
+
<% end %>
|
44
|
+
</div>
|
45
|
+
<div class="actions"><%= f.submit "Search", class: 'button small' %></div>
|
46
|
+
<% end %>
|
47
|
+
|
48
|
+
<div class='scrollable'>
|
49
|
+
<table id="search_records" class='table'>
|
50
|
+
<thead>
|
51
|
+
<tr>
|
52
|
+
<% if @table.primary_key %>
|
53
|
+
<th colspan="2">Actions</th>
|
54
|
+
<% end %>
|
55
|
+
<% @model.column_names.each do |column| %>
|
56
|
+
<th> <%= sort_link(@q, column) %> </th>
|
57
|
+
<% end %>
|
58
|
+
</tr>
|
59
|
+
</thead>
|
60
|
+
<tbody>
|
61
|
+
<% @records.each do |record| %>
|
62
|
+
<tr class="row_<%= record[@table.primary_key] %>">
|
63
|
+
<%= render 'row', record: record %>
|
64
|
+
</tr>
|
65
|
+
<% end %>
|
66
|
+
|
67
|
+
<% if @records.none? %>
|
68
|
+
<td>No Records</td>
|
69
|
+
<% end %>
|
70
|
+
</tbody>
|
71
|
+
</table>
|
72
|
+
</div>
|
73
|
+
|
74
|
+
<p>
|
75
|
+
<%= paginate @records, remote: true %>
|
76
|
+
</p>
|
@@ -9,12 +9,19 @@
|
|
9
9
|
<dd><%= link_to raw("#{fa_icon('table')} Records"), table_data_path(@table), remote: true %></dd>
|
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
|
-
<dd
|
12
|
+
<dd>
|
13
|
+
<a href="#" data-options="align: bottom" data-dropdown="download-files"><%= fa_icon 'download' %> Export</a>
|
14
|
+
</dd>
|
13
15
|
<dd>
|
14
16
|
<a href="#" data-options="align: bottom" data-dropdown="drop"><%= fa_icon 'th-large' %> Functions</a>
|
15
17
|
</dd>
|
16
18
|
</dl>
|
17
19
|
|
20
|
+
<ul id="download-files" class="f-dropdown" data-dropdown-content>
|
21
|
+
<li><%= link_to raw("#{fa_icon('file-text-o')} Export table to CSV"), table_csv_path(@table) %></li>
|
22
|
+
<li><%= link_to raw("#{fa_icon('file-excel-o')} Export table to Excel"), table_xlsx_path(@table, format: 'xls') %></li>
|
23
|
+
</ul>
|
24
|
+
|
18
25
|
<ul id="drop" class="f-dropdown" data-dropdown-content>
|
19
26
|
<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
27
|
</ul>
|
data/lib/rails_db.rb
CHANGED
data/lib/rails_db/table.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
|
1
3
|
module RailsDb
|
2
4
|
|
3
5
|
class Table
|
@@ -45,7 +47,12 @@ module RailsDb
|
|
45
47
|
end
|
46
48
|
|
47
49
|
def create_model(table_name, &block)
|
48
|
-
klass = Class.new(ActiveRecord::Base)
|
50
|
+
klass = Class.new(ActiveRecord::Base) do
|
51
|
+
def self.model_name
|
52
|
+
ActiveModel::Name.new(self, nil, table_name)
|
53
|
+
end
|
54
|
+
self.table_name = table_name
|
55
|
+
end
|
49
56
|
klass.class_eval(&block) if block_given?
|
50
57
|
klass
|
51
58
|
end
|
data/lib/rails_db/version.rb
CHANGED
data/rails_db.gemspec
CHANGED
@@ -17,16 +17,18 @@ Gem::Specification.new do |s|
|
|
17
17
|
|
18
18
|
s.executables = ["railsdb", "rails_db", 'runsql']
|
19
19
|
|
20
|
-
s.add_dependency
|
21
|
-
s.add_dependency
|
22
|
-
s.add_dependency
|
23
|
-
s.add_dependency
|
24
|
-
s.add_dependency
|
20
|
+
s.add_dependency 'rails', ">= 3.1.0"
|
21
|
+
s.add_dependency 'font-awesome-rails'
|
22
|
+
s.add_dependency 'sass'
|
23
|
+
s.add_dependency 'sass-rails'
|
24
|
+
s.add_dependency 'jquery-rails'
|
25
25
|
s.add_dependency 'codemirror-rails'
|
26
26
|
s.add_dependency 'launchy'
|
27
27
|
s.add_dependency 'terminal-table'
|
28
28
|
s.add_dependency 'axlsx_rails'
|
29
29
|
s.add_dependency 'simple_form'
|
30
|
+
s.add_dependency 'ransack'
|
31
|
+
s.add_dependency 'kaminari'
|
30
32
|
|
31
33
|
s.add_development_dependency "sqlite3"
|
32
34
|
s.add_development_dependency "mysql2", '<= 0.3.20'
|
Binary file
|
Binary file
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
91954
|
data/test/standalone/Gemfile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
+
|
4
|
+
|
3
5
|
gem 'rails'
|
4
6
|
gem 'sass'
|
5
7
|
gem 'jquery-rails'
|
@@ -8,6 +10,8 @@ gem 'codemirror-rails'
|
|
8
10
|
gem 'terminal-table'
|
9
11
|
gem 'axlsx_rails'
|
10
12
|
gem 'simple_form'
|
13
|
+
gem 'ransack'
|
14
|
+
gem 'kaminari'
|
11
15
|
|
12
16
|
group :assets do
|
13
17
|
gem 'sass-rails'
|
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:
|
4
|
+
version: 0.9.9
|
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-11-
|
11
|
+
date: 2015-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -150,6 +150,34 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: ransack
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: kaminari
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
182
|
name: sqlite3
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -235,6 +263,7 @@ files:
|
|
235
263
|
- app/assets/javascripts/rails_db/foundation/foundation.tooltip.js
|
236
264
|
- app/assets/javascripts/rails_db/foundation/foundation.topbar.js
|
237
265
|
- app/assets/javascripts/rails_db/jquery.cookie.js
|
266
|
+
- app/assets/javascripts/rails_db/search.js
|
238
267
|
- app/assets/javascripts/rails_db/show_hide_columns.js
|
239
268
|
- app/assets/javascripts/rails_db/sticky.js
|
240
269
|
- app/assets/javascripts/rails_db/vendor/fastclick.js
|
@@ -250,6 +279,7 @@ files:
|
|
250
279
|
- app/assets/stylesheets/rails_db/foundation_and_overrides.css.scss
|
251
280
|
- app/assets/stylesheets/rails_db/normalize.css
|
252
281
|
- app/assets/stylesheets/rails_db/pagination.css.scss
|
282
|
+
- app/assets/stylesheets/rails_db/search.css.scss
|
253
283
|
- app/assets/stylesheets/rails_db/sidebar.css.scss
|
254
284
|
- app/assets/stylesheets/rails_db/table.css.scss
|
255
285
|
- app/controllers/rails_db/application_controller.rb
|
@@ -278,9 +308,11 @@ files:
|
|
278
308
|
- app/views/rails_db/sql/import.html.erb
|
279
309
|
- app/views/rails_db/sql/index.html.erb
|
280
310
|
- app/views/rails_db/sql/xls.xls.axlsx
|
311
|
+
- app/views/rails_db/tables/_condition_fields.html.erb
|
281
312
|
- app/views/rails_db/tables/_data.html.erb
|
282
313
|
- app/views/rails_db/tables/_edit.html.erb
|
283
314
|
- app/views/rails_db/tables/_row.html.erb
|
315
|
+
- app/views/rails_db/tables/_search.html.erb
|
284
316
|
- app/views/rails_db/tables/_show.html.erb
|
285
317
|
- app/views/rails_db/tables/data.html.erb
|
286
318
|
- app/views/rails_db/tables/data.js.erb
|