active_scaffold_sortable 3.2.1 → 3.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/jquery/active_scaffold_sortable.js +10 -8
- data/app/assets/javascripts/jquery/active_scaffold_sortable.js~ +45 -0
- data/app/assets/javascripts/prototype/active_scaffold_sortable.js~ +34 -0
- data/app/views/active_scaffold_overrides/_form_association.html.erb~ +6 -0
- data/app/views/active_scaffold_overrides/edit_associated.js.erb~ +6 -0
- data/frontends/default/active_scaffold_overrides/on_create.js.erb~ +4 -0
- data/frontends/default/active_scaffold_overrides/on_update.js.erb~ +17 -0
- data/lib/active_scaffold/actions/sortable.rb +2 -2
- data/lib/active_scaffold/actions/sortable.rb~ +81 -0
- data/lib/active_scaffold/config/sortable.rb +7 -5
- data/lib/active_scaffold_sortable/version.rb +1 -1
- data/lib/active_scaffold_sortable/view_helpers.rb~ +16 -0
- metadata +49 -40
@@ -23,14 +23,16 @@ ActiveScaffold.sortable = function(element) {
|
|
23
23
|
ActiveScaffold.update_positions(content);
|
24
24
|
};
|
25
25
|
} else {
|
26
|
-
var csrf = jQuery('meta[name=csrf-param]').attr('content') + '=' + jQuery('meta[name=csrf-token]').attr('content');
|
27
26
|
var url = element.data('reorder-url');
|
28
|
-
|
29
|
-
var
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
if (url) {
|
28
|
+
var csrf = jQuery('meta[name=csrf-param]').attr('content') + '=' + jQuery('meta[name=csrf-token]').attr('content');
|
29
|
+
sortable_options.update = function(event, ui) {
|
30
|
+
var body = jQuery(this).sortable('serialize',{key: encodeURIComponent(jQuery(this).attr('id') + '[]'), expression: new RegExp(element.data('format'))});
|
31
|
+
var params = element.data('with');
|
32
|
+
if (params) body += '&' + params;
|
33
|
+
jQuery.post(url, body + '&' + csrf);
|
34
|
+
};
|
35
|
+
}
|
34
36
|
}
|
35
37
|
sortable_options.handle = element.data('handle');
|
36
38
|
sortable_options.items = element.data('tag');
|
@@ -40,7 +42,7 @@ ActiveScaffold.sortable = function(element) {
|
|
40
42
|
jQuery(document).ready(function($) {
|
41
43
|
$(document).on('as:action_success', 'a.as_action', function(e, action_link) {
|
42
44
|
var sortable = $('.sortable-container', action_link.adapter);
|
43
|
-
if (sortable.length) $.each(sortable, function(i, s) { ActiveScaffold.sortable(s); });
|
45
|
+
if (sortable.length) $.each(sortable, function(i, s) { ActiveScaffold.sortable($(s)); });
|
44
46
|
});
|
45
47
|
var sortable = $('.sortable-container');
|
46
48
|
if (sortable.length) ActiveScaffold.sortable(sortable);
|
@@ -0,0 +1,45 @@
|
|
1
|
+
ActiveScaffold.update_positions = function(content) {
|
2
|
+
if (typeof(content) == 'string') content = jQuery('#' + content);
|
3
|
+
var element = content.closest('.sortable-container');
|
4
|
+
jQuery.each(content.find('.sub-form-record input[name$="[' + element.data('column') + ']"]'), function(i, field) {
|
5
|
+
jQuery(field).val(i);
|
6
|
+
});
|
7
|
+
}
|
8
|
+
ActiveScaffold.sortable = function(element) {
|
9
|
+
var form, content, sortable_options = {};
|
10
|
+
if (typeof(element) == 'string') {
|
11
|
+
content = jQuery('#' + element);
|
12
|
+
element = content.closest('.sortable-container');
|
13
|
+
} else {
|
14
|
+
var form = element.closest('form.as_form').length > 0;
|
15
|
+
if (form) content = element;
|
16
|
+
else content = element.find('.records:first');
|
17
|
+
}
|
18
|
+
|
19
|
+
if (form) {
|
20
|
+
sortable_options.update = function(event, ui) {
|
21
|
+
ActiveScaffold.update_positions(content);
|
22
|
+
};
|
23
|
+
} else {
|
24
|
+
var csrf = jQuery('meta[name=csrf-param]').attr('content') + '=' + jQuery('meta[name=csrf-token]').attr('content');
|
25
|
+
var url = element.data('reorder-url');
|
26
|
+
sortable_options.update = function(event, ui) {
|
27
|
+
var body = jQuery(this).sortable('serialize',{key: encodeURIComponent(jQuery(this).attr('id') + '[]'), expression: new RegExp(element.data('format'))});
|
28
|
+
var params = element.data('with');
|
29
|
+
if (params) body += '&' + params;
|
30
|
+
jQuery.post(url, body + '&' + csrf);
|
31
|
+
};
|
32
|
+
}
|
33
|
+
sortable_options.handle = element.data('handle');
|
34
|
+
sortable_options.items = element.data('tag');
|
35
|
+
content.sortable(sortable_options);
|
36
|
+
};
|
37
|
+
|
38
|
+
jQuery(document).ready(function($) {
|
39
|
+
$(document).on('as:action_success', 'a.as_action', function(e, action_link) {
|
40
|
+
var sortable = $('.sortable-container', action_link.adapter);
|
41
|
+
if (sortable.length) $.each(sortable, function(i, s) { ActiveScaffold.sortable(s); });
|
42
|
+
});
|
43
|
+
var sortable = $('.sortable-container');
|
44
|
+
if (sortable.length) ActiveScaffold.sortable(sortable);
|
45
|
+
});
|
@@ -0,0 +1,34 @@
|
|
1
|
+
ActiveScaffold.sortable = function(element) {
|
2
|
+
var form, content, sortable_options = {};
|
3
|
+
if (typeof(element) == 'string') {
|
4
|
+
content = $(element);
|
5
|
+
element = content.up('.sortable-container');
|
6
|
+
} else {
|
7
|
+
var form = !!element.up('form.as_form');
|
8
|
+
if (form) content = element.down('.sub-form');
|
9
|
+
else content = element.down('.records');
|
10
|
+
}
|
11
|
+
|
12
|
+
if (!form) {
|
13
|
+
var csrf = $$('meta[name=csrf-param]')[0].readAttribute('content') + '=' + $$('meta[name=csrf-token]')[0].readAttribute('content');
|
14
|
+
var url = element.readAttribute('data-reorder-url').append_params(csrf);
|
15
|
+
sortable_options.onUpdate = function() {
|
16
|
+
var body = Sortable.serialize(content);
|
17
|
+
var params = element.readAttribute('data-with');
|
18
|
+
if (params) body += '&' + params;
|
19
|
+
new Ajax.Request(url, {method: 'post', parameters: body + '&' + csrf});
|
20
|
+
}
|
21
|
+
}
|
22
|
+
sortable_options.handle = element.readAttribute('data-handle');
|
23
|
+
sortable_options.items = element.readAttribute('data-tag');
|
24
|
+
Sortable.create(content, sortable_options);
|
25
|
+
};
|
26
|
+
|
27
|
+
document.observe('dom:loaded', function(){
|
28
|
+
document.on('as:action_success', 'a.as_action', function(e, action_link) {
|
29
|
+
var sortable = $(action_link.adapter).find('.sortable-container');
|
30
|
+
if (sortable.length) sortable.invoke(function(s) { ActiveScaffold.sortable(s); });
|
31
|
+
});
|
32
|
+
var sortable = $$('.sortable-container');
|
33
|
+
if (sortable.length) ActiveScaffold.sortable(sortable[0]);
|
34
|
+
});
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<% config = active_scaffold_config_for(column.association.klass) %>
|
2
|
+
<% if config.actions.include? :sortable %>
|
3
|
+
<%= content_tag :div, render(:super), :class => 'sortable-container', :data => sort_params(config).merge(:tag => 'tbody') %>
|
4
|
+
<% else %>
|
5
|
+
<%= render :super %>
|
6
|
+
<% end %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%= render :super %>
|
2
|
+
<% config = active_scaffold_config_for(@column.association.klass) %>
|
3
|
+
<% if config.actions.include? :sortable %>
|
4
|
+
ActiveScaffold.update_position('<%= sub_form_list_id(:association => @column.name) %>');
|
5
|
+
ActiveScaffold.sortable('<%= sub_form_list_id(:association => @column.name) %>');
|
6
|
+
<% end %>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%= render(:super) %>
|
2
|
+
<%
|
3
|
+
# if we are currently editing a nested belongs_to association do not do any sorting stuff
|
4
|
+
unless nested_singular_association?
|
5
|
+
if ActiveScaffold.js_framework == :prototype
|
6
|
+
%>
|
7
|
+
<%= sortable_element_js(*sort_params) %>
|
8
|
+
<%
|
9
|
+
elsif ActiveScaffold.js_framework == :jquery
|
10
|
+
reorder_params = {}
|
11
|
+
reorder_params[:eid] = params[:eid] unless params[:eid].blank?
|
12
|
+
%>
|
13
|
+
<%= "ActiveScaffold.sortable('#{sort_params[0]}', #{controller_name.to_json}, #{reorder_params.to_json});".html_safe %>
|
14
|
+
<%
|
15
|
+
end if controller.send :successful?
|
16
|
+
end
|
17
|
+
%>
|
@@ -4,12 +4,12 @@ module ActiveScaffold::Actions
|
|
4
4
|
base.helper ActiveScaffold::Helpers::SortableHelpers
|
5
5
|
base.before_filter :sortable_authorized?, :only => :reorder
|
6
6
|
base.active_scaffold_config.configure do |config|
|
7
|
-
config.list.pagination = false
|
7
|
+
config.list.pagination = false if config.actions.include? :list
|
8
8
|
|
9
9
|
# turn sorting off
|
10
10
|
sortable_column = config.sortable.column.name
|
11
11
|
config.columns.each {|c| c.sort = false unless c.name == sortable_column }
|
12
|
-
config.list.sorting = { sortable_column => "asc" }
|
12
|
+
config.list.sorting = { sortable_column => "asc" } if config.actions.include? :list
|
13
13
|
|
14
14
|
config.actions.each do |action_name|
|
15
15
|
next if action_name == :subform
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module ActiveScaffold::Actions
|
2
|
+
module Sortable
|
3
|
+
def self.included(base)
|
4
|
+
base.helper ActiveScaffold::Helpers::SortableHelpers
|
5
|
+
base.before_filter :sortable_authorized?, :only => :reorder
|
6
|
+
base.active_scaffold_config.configure do |config|
|
7
|
+
config.list.pagination = false
|
8
|
+
|
9
|
+
# turn sorting off
|
10
|
+
sortable_column = config.sortable.column.name
|
11
|
+
config.columns.each {|c| c.sort = false unless c.name == sortable_column }
|
12
|
+
config.list.sorting = { sortable_column => "asc" }
|
13
|
+
|
14
|
+
config.actions.each do |action_name|
|
15
|
+
next if action_name == :subform
|
16
|
+
action = config.send(action_name)
|
17
|
+
action.columns.exclude(sortable_column) if action.respond_to? :columns
|
18
|
+
end
|
19
|
+
|
20
|
+
base.add_active_scaffold_path File.join(ActiveScaffold::Config::Sortable.plugin_directory, 'frontends', 'default')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def reorder
|
25
|
+
model = active_scaffold_config.model
|
26
|
+
|
27
|
+
unless (model.instance_methods & [:nested_set_scope, 'nested_set_scope']).empty?
|
28
|
+
reorder_children_in_tree(model)
|
29
|
+
else
|
30
|
+
if model.respond_to? :ancestry_column
|
31
|
+
reorder_ancestry_tree(model)
|
32
|
+
else
|
33
|
+
reorder_simple_list(model)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
do_refresh_list if active_scaffold_config.sortable.refresh_list
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
def sortable_authorized?
|
41
|
+
authorized_for?(:action => :update)
|
42
|
+
end
|
43
|
+
|
44
|
+
def reorder_ancestry_tree(model)
|
45
|
+
first_record = model.find(params[active_scaffold_tbody_id].first)
|
46
|
+
unless first_record.nil?
|
47
|
+
records = first_record.is_root? ? model.roots: first_record.parent.children
|
48
|
+
reorder_simple_list(model)
|
49
|
+
else
|
50
|
+
Rails.logger.info("Failed to find first record to reorder")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def reorder_simple_list(model)
|
55
|
+
column_name = active_scaffold_config.sortable.column.name
|
56
|
+
debugger
|
57
|
+
params[active_scaffold_tbody_id].each_with_index do |id, index|
|
58
|
+
model.update_all({column_name => index + 1}, {model.primary_key => id})
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def reorder_children_in_tree(model)
|
63
|
+
current_order = model.find(params[active_scaffold_tbody_id].first).try(:self_and_siblings)
|
64
|
+
new_order = params[active_scaffold_tbody_id].collect {|item_id| item_id.to_i}
|
65
|
+
new_order.each_with_index do |record_id, new_position|
|
66
|
+
if record_id != current_order[new_position].id
|
67
|
+
current_order = move_child(current_order.find {|child| child.id == record_id}, new_position, current_order)
|
68
|
+
end
|
69
|
+
end if new_order.length == current_order.length
|
70
|
+
end
|
71
|
+
|
72
|
+
def move_child(child, new_position, children)
|
73
|
+
old_position = children.index(child)
|
74
|
+
(old_position - new_position).abs.times do |step|
|
75
|
+
child.send((old_position - new_position) > 0 ? :move_left : :move_right)
|
76
|
+
end
|
77
|
+
child.self_and_siblings
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
@@ -50,11 +50,13 @@ module ActiveScaffold::Config
|
|
50
50
|
raise(ArgumentError, "Unknown handle column position: #{where}") unless [:first, :last].include?(where)
|
51
51
|
@options[:handle] = 'td.sortable-handle'
|
52
52
|
define_handle_column
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
53
|
+
@column.weight = 2**(0.size * 8 -2) -1 unless where == :first
|
54
|
+
if @core.actions.include? :list
|
55
|
+
if where == :first
|
56
|
+
@core.list.columns = [:active_scaffold_sortable] + @core.list.columns.names_without_auth_check unless @core.list.columns.include? :active_scaffold_sortable
|
57
|
+
else
|
58
|
+
@core.list.columns.add :active_scaffold_sortable
|
59
|
+
end
|
58
60
|
end
|
59
61
|
else
|
60
62
|
@options.delete(:handle)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module ActiveScaffoldSortable
|
2
|
+
module ViewHelpers
|
3
|
+
def sort_params(config = active_scaffold_config)
|
4
|
+
options = {
|
5
|
+
:tag => 'tr',
|
6
|
+
:reorder_url => url_for(params_for(:action => :reorder, :controller => controller_name)),
|
7
|
+
:format => '^[^_-](?:[A-Za-z0-9_-]*)-(.*)-row$'
|
8
|
+
}
|
9
|
+
options.merge config.sortable.options
|
10
|
+
end
|
11
|
+
|
12
|
+
def active_scaffold_sortable_column(record, column)
|
13
|
+
''
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_scaffold_sortable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 3.2.
|
9
|
+
- 2
|
10
|
+
version: 3.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sergio Cambra
|
@@ -16,10 +16,11 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-
|
19
|
+
date: 2013-03-08 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
22
|
+
type: :development
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
24
|
none: false
|
24
25
|
requirements:
|
25
26
|
- - ">="
|
@@ -28,12 +29,12 @@ dependencies:
|
|
28
29
|
segments:
|
29
30
|
- 0
|
30
31
|
version: "0"
|
32
|
+
version_requirements: *id001
|
31
33
|
prerelease: false
|
32
|
-
type: :development
|
33
|
-
requirement: *id001
|
34
34
|
name: shoulda
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
|
36
|
+
type: :development
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
38
|
none: false
|
38
39
|
requirements:
|
39
40
|
- - ~>
|
@@ -44,12 +45,12 @@ dependencies:
|
|
44
45
|
- 0
|
45
46
|
- 0
|
46
47
|
version: 1.0.0
|
48
|
+
version_requirements: *id002
|
47
49
|
prerelease: false
|
48
|
-
type: :development
|
49
|
-
requirement: *id002
|
50
50
|
name: bundler
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
-
|
52
|
+
type: :development
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
54
|
none: false
|
54
55
|
requirements:
|
55
56
|
- - ">="
|
@@ -58,26 +59,26 @@ dependencies:
|
|
58
59
|
segments:
|
59
60
|
- 0
|
60
61
|
version: "0"
|
62
|
+
version_requirements: *id003
|
61
63
|
prerelease: false
|
62
|
-
type: :development
|
63
|
-
requirement: *id003
|
64
64
|
name: rcov
|
65
65
|
- !ruby/object:Gem::Dependency
|
66
|
-
|
66
|
+
type: :runtime
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
68
|
none: false
|
68
69
|
requirements:
|
69
70
|
- - ">="
|
70
71
|
- !ruby/object:Gem::Version
|
71
|
-
hash:
|
72
|
+
hash: 2371454695
|
72
73
|
segments:
|
73
74
|
- 3
|
74
75
|
- 3
|
75
76
|
- 0
|
76
77
|
- rc
|
77
|
-
|
78
|
+
- 3
|
79
|
+
version: 3.3.0.rc3
|
80
|
+
version_requirements: *id004
|
78
81
|
prerelease: false
|
79
|
-
type: :runtime
|
80
|
-
requirement: *id004
|
81
82
|
name: active_scaffold
|
82
83
|
description: Sort Tree or List Structures by Drag n Drop
|
83
84
|
email: activescaffold@googlegroups.com
|
@@ -89,38 +90,46 @@ extra_rdoc_files:
|
|
89
90
|
- LICENSE.txt
|
90
91
|
- README.textile
|
91
92
|
files:
|
92
|
-
- app/views/active_scaffold_overrides/_form_association.html.erb
|
93
|
-
- app/views/active_scaffold_overrides/edit_associated.js.erb
|
94
|
-
- app/assets/images/active_scaffold/sortable.png
|
95
93
|
- app/assets/stylesheets/active_scaffold_sortable.css.scss
|
96
|
-
- app/assets/
|
94
|
+
- app/assets/images/active_scaffold/sortable.png
|
97
95
|
- app/assets/javascripts/active_scaffold_sortable.js.erb
|
98
96
|
- app/assets/javascripts/jquery/active_scaffold_sortable.js
|
99
|
-
-
|
97
|
+
- app/assets/javascripts/jquery/active_scaffold_sortable.js~
|
98
|
+
- app/assets/javascripts/prototype/active_scaffold_sortable.js
|
99
|
+
- app/assets/javascripts/prototype/active_scaffold_sortable.js~
|
100
|
+
- app/views/active_scaffold_overrides/_form_association.html.erb
|
101
|
+
- app/views/active_scaffold_overrides/edit_associated.js.erb
|
102
|
+
- app/views/active_scaffold_overrides/_form_association.html.erb~
|
103
|
+
- app/views/active_scaffold_overrides/edit_associated.js.erb~
|
100
104
|
- frontends/default/active_scaffold_overrides/_list.html.erb
|
105
|
+
- frontends/default/active_scaffold_overrides/on_create.js.erb
|
101
106
|
- frontends/default/active_scaffold_overrides/on_update.js.erb
|
102
107
|
- frontends/default/active_scaffold_overrides/reorder.js.erb
|
108
|
+
- frontends/default/active_scaffold_overrides/on_create.js.erb~
|
109
|
+
- frontends/default/active_scaffold_overrides/on_update.js.erb~
|
103
110
|
- lib/active_scaffold/actions/sortable.rb
|
111
|
+
- lib/active_scaffold/actions/sortable.rb~
|
104
112
|
- lib/active_scaffold/config/sortable.rb
|
105
113
|
- lib/active_scaffold/helpers/sortable_helpers.rb
|
106
|
-
- lib/active_scaffold_sortable
|
107
|
-
- lib/active_scaffold_sortable/core.rb
|
108
|
-
- lib/active_scaffold_sortable/view_helpers.rb
|
114
|
+
- lib/active_scaffold_sortable.rb
|
109
115
|
- lib/active_scaffold_sortable/config/core.rb
|
116
|
+
- lib/active_scaffold_sortable/core.rb
|
110
117
|
- lib/active_scaffold_sortable/version.rb
|
111
|
-
- lib/active_scaffold_sortable.rb
|
118
|
+
- lib/active_scaffold_sortable/engine.rb
|
119
|
+
- lib/active_scaffold_sortable/view_helpers.rb
|
120
|
+
- lib/active_scaffold_sortable/view_helpers.rb~
|
112
121
|
- LICENSE.txt
|
113
122
|
- README.textile
|
114
|
-
- test/
|
123
|
+
- test/auto_models_controller_test.rb
|
124
|
+
- test/config_test.rb
|
125
|
+
- test/controllers/auto_models_controller.rb
|
126
|
+
- test/controllers/models_controller.rb
|
127
|
+
- test/controllers/sortable_models_controller.rb
|
115
128
|
- test/models/auto_model.rb
|
116
129
|
- test/models/model.rb
|
130
|
+
- test/router_test.rb
|
117
131
|
- test/schema.rb
|
118
132
|
- test/test_helper.rb
|
119
|
-
- test/controllers/auto_models_controller.rb
|
120
|
-
- test/controllers/models_controller.rb
|
121
|
-
- test/controllers/sortable_models_controller.rb
|
122
|
-
- test/auto_models_controller_test.rb
|
123
|
-
- test/config_test.rb
|
124
133
|
homepage: http://github.com/activescaffold/active_scaffold_sortable
|
125
134
|
licenses:
|
126
135
|
- MIT
|
@@ -150,18 +159,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
159
|
requirements: []
|
151
160
|
|
152
161
|
rubyforge_project:
|
153
|
-
rubygems_version: 1.8.
|
162
|
+
rubygems_version: 1.8.23
|
154
163
|
signing_key:
|
155
164
|
specification_version: 3
|
156
165
|
summary: Drag n Drop Sorting for Activescaffold
|
157
166
|
test_files:
|
158
|
-
- test/
|
167
|
+
- test/auto_models_controller_test.rb
|
168
|
+
- test/config_test.rb
|
169
|
+
- test/controllers/auto_models_controller.rb
|
170
|
+
- test/controllers/models_controller.rb
|
171
|
+
- test/controllers/sortable_models_controller.rb
|
159
172
|
- test/models/auto_model.rb
|
160
173
|
- test/models/model.rb
|
174
|
+
- test/router_test.rb
|
161
175
|
- test/schema.rb
|
162
176
|
- test/test_helper.rb
|
163
|
-
- test/controllers/auto_models_controller.rb
|
164
|
-
- test/controllers/models_controller.rb
|
165
|
-
- test/controllers/sortable_models_controller.rb
|
166
|
-
- test/auto_models_controller_test.rb
|
167
|
-
- test/config_test.rb
|