active_list 6.5.1 → 6.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/active_list.rb +11 -11
- data/lib/active_list/definition.rb +0 -2
- data/lib/active_list/definition/abstract_column.rb +4 -9
- data/lib/active_list/definition/action_column.rb +49 -57
- data/lib/active_list/definition/association_column.rb +26 -28
- data/lib/active_list/definition/attribute_column.rb +6 -11
- data/lib/active_list/definition/check_box_column.rb +0 -5
- data/lib/active_list/definition/data_column.rb +17 -24
- data/lib/active_list/definition/empty_column.rb +0 -4
- data/lib/active_list/definition/field_column.rb +0 -4
- data/lib/active_list/definition/status_column.rb +0 -4
- data/lib/active_list/definition/table.rb +31 -37
- data/lib/active_list/definition/text_field_column.rb +0 -4
- data/lib/active_list/exporters.rb +0 -4
- data/lib/active_list/exporters/abstract_exporter.rb +15 -19
- data/lib/active_list/exporters/csv_exporter.rb +5 -11
- data/lib/active_list/exporters/excel_csv_exporter.rb +7 -13
- data/lib/active_list/exporters/open_document_spreadsheet_exporter.rb +29 -35
- data/lib/active_list/generator.rb +27 -32
- data/lib/active_list/generator/finder.rb +35 -50
- data/lib/active_list/helpers.rb +6 -8
- data/lib/active_list/rails/engine.rb +3 -3
- data/lib/active_list/rails/integration.rb +2 -10
- data/lib/active_list/renderers.rb +0 -4
- data/lib/active_list/renderers/abstract_renderer.rb +2 -7
- data/lib/active_list/renderers/simple_renderer.rb +58 -71
- data/lib/active_list/version.rb +1 -3
- data/test/active_list_test.rb +4 -6
- data/test/code_generation_test.rb +0 -2
- data/test/dummy/Gemfile +1 -2
- data/test/dummy/app/controllers/contacts_controller.rb +10 -10
- data/test/dummy/app/controllers/people_controller.rb +10 -11
- data/test/dummy/config.ru +1 -1
- data/test/dummy/config/application.rb +2 -2
- data/test/dummy/config/boot.rb +1 -1
- data/test/dummy/config/environments/test.rb +6 -3
- data/test/dummy/config/initializers/session_store.rb +1 -1
- data/test/dummy/config/initializers/wrap_parameters.rb +1 -1
- data/test/dummy/db/seeds.rb +5 -5
- data/test/dummy/script/rails +2 -2
- data/test/people_controller_test.rb +11 -15
- data/test/table_test.rb +0 -1
- data/test/test_helper.rb +6 -7
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 972efe1084c46b43af24147f815d2b63a0df506e
|
4
|
+
data.tar.gz: 6f0597c282d17598f0a71641ac127cc0b7174ebd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15c0e1d3f882e0a7a4695f583e1b40db285370e09fdc7b62b89a3fe1d13cf9d9f603599b01e1ccd48be7349511d72181e00e59678b0335fe7fe2bea3f246ff42
|
7
|
+
data.tar.gz: 7b94b8274545d712ce4e3aef8b1ba8ab8eb8b2002c2d8fb195524aa468088cb7c60a6d54a6acc58106676e348883227de63aff1ddadca640a850031e11ffc51a
|
data/lib/active_list.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
require 'csv'
|
2
3
|
require 'action_dispatch'
|
3
4
|
require 'rails'
|
@@ -5,13 +6,12 @@ require 'code_string'
|
|
5
6
|
require 'i18n-complements'
|
6
7
|
|
7
8
|
module ActiveList
|
8
|
-
|
9
9
|
# Build and returns a short UID
|
10
10
|
def self.new_uid
|
11
11
|
@@last_uid ||= 0
|
12
12
|
uid = @@last_uid.to_s(36).to_sym
|
13
13
|
@@last_uid += 1
|
14
|
-
|
14
|
+
uid
|
15
15
|
end
|
16
16
|
|
17
17
|
autoload :VERSION, 'active_list/version'
|
@@ -24,7 +24,7 @@ module ActiveList
|
|
24
24
|
# Set the temporary directory
|
25
25
|
# Pathname or callable are acceptable
|
26
26
|
def self.temporary_directory=(dir)
|
27
|
-
if dir.respond_to?(:call)
|
27
|
+
if dir.respond_to?(:call) || dir.is_a?(Pathname)
|
28
28
|
@@temporary_directory = dir
|
29
29
|
else
|
30
30
|
@@temporary_directory = Pathname(dir)
|
@@ -40,12 +40,13 @@ module ActiveList
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
|
44
43
|
mattr_reader :renderers
|
45
44
|
@@renderers = {}
|
46
45
|
|
47
46
|
def self.register_renderer(name, renderer)
|
48
|
-
|
47
|
+
unless renderer < ActiveList::Renderers::AbstractRenderer
|
48
|
+
fail ArgumentError, 'A renderer must be ActiveList::Renderers::Renderer'
|
49
|
+
end
|
49
50
|
@@renderers[name] = renderer
|
50
51
|
end
|
51
52
|
|
@@ -53,10 +54,11 @@ module ActiveList
|
|
53
54
|
@@exporters = {}
|
54
55
|
|
55
56
|
def self.register_exporter(name, exporter)
|
56
|
-
|
57
|
+
unless exporter < ActiveList::Exporters::AbstractExporter
|
58
|
+
fail ArgumentError, "ActiveList::Exporters::AbstractExporter expected (got #{exporter.name}/#{exporter.ancestors.inspect})"
|
59
|
+
end
|
57
60
|
@@exporters[name] = exporter
|
58
61
|
end
|
59
|
-
|
60
62
|
end
|
61
63
|
|
62
64
|
ActiveList.temporary_directory = Pathname(Dir.tmpdir)
|
@@ -67,14 +69,12 @@ ActiveList.register_exporter(:ods, ActiveList::Exporters::OpenDocumentSpreadshe
|
|
67
69
|
ActiveList.register_exporter(:csv, ActiveList::Exporters::CsvExporter)
|
68
70
|
ActiveList.register_exporter(:xcsv, ActiveList::Exporters::ExcelCsvExporter)
|
69
71
|
|
70
|
-
|
71
|
-
unless "string".respond_to? :dig
|
72
|
+
unless 'string'.respond_to? :dig
|
72
73
|
class ::String
|
73
74
|
def dig(depth = 1)
|
74
|
-
|
75
|
+
strip.gsub(/^/, ' ' * depth) + "\n"
|
75
76
|
end
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|
79
|
-
|
80
80
|
require 'active_list/rails'
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module ActiveList
|
2
|
-
|
3
2
|
module Definition
|
4
3
|
autoload :AbstractColumn, 'active_list/definition/abstract_column'
|
5
4
|
autoload :ActionColumn, 'active_list/definition/action_column'
|
@@ -13,5 +12,4 @@ module ActiveList
|
|
13
12
|
autoload :Table, 'active_list/definition/table'
|
14
13
|
autoload :TextFieldColumn, 'active_list/definition/text_field_column'
|
15
14
|
end
|
16
|
-
|
17
15
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module ActiveList
|
2
|
-
|
3
2
|
module Definition
|
4
|
-
|
5
3
|
class AbstractColumn
|
6
4
|
attr_reader :table, :name, :id, :options
|
7
5
|
|
@@ -10,11 +8,11 @@ module ActiveList
|
|
10
8
|
@name = name.to_sym
|
11
9
|
@options = options
|
12
10
|
@hidden = !!@options.delete(:hidden)
|
13
|
-
@id = ActiveList.new_uid
|
11
|
+
@id = 'c' + @table.new_column_id # ActiveList.new_uid
|
14
12
|
end
|
15
13
|
|
16
14
|
def header_code
|
17
|
-
|
15
|
+
fail NotImplementedError, "#{self.class.name}#header_code is not implemented."
|
18
16
|
end
|
19
17
|
|
20
18
|
def hidden?
|
@@ -39,16 +37,13 @@ module ActiveList
|
|
39
37
|
@id
|
40
38
|
end
|
41
39
|
|
42
|
-
|
40
|
+
alias_method :sort_id, :name
|
43
41
|
|
44
42
|
def check_options!(options, *keys)
|
45
43
|
for key in options.keys
|
46
|
-
|
44
|
+
fail ArgumentError, "Key :#{key} is unexpected. (Expecting: #{keys.to_sentence})"
|
47
45
|
end
|
48
46
|
end
|
49
|
-
|
50
47
|
end
|
51
|
-
|
52
48
|
end
|
53
|
-
|
54
49
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
module ActiveList
|
3
|
-
|
4
3
|
module Definition
|
5
|
-
|
6
4
|
class ActionColumn < AbstractColumn
|
7
5
|
include ActiveList::Helpers
|
8
6
|
|
9
|
-
ID_PLACEHOLDER =
|
7
|
+
ID_PLACEHOLDER = '##IDS##'
|
10
8
|
|
11
9
|
USE_MODES = [:none, :single, :many, :both]
|
12
10
|
|
@@ -16,25 +14,25 @@ module ActiveList
|
|
16
14
|
super(table, name, options)
|
17
15
|
@use_mode = (@options.delete(:on) || :single).to_sym
|
18
16
|
unless USE_MODES.include?(@use_mode)
|
19
|
-
|
17
|
+
fail "Invalid use mode: #{@use_mode.inspect}"
|
20
18
|
end
|
21
|
-
if @name.to_s ==
|
22
|
-
@options[:method] = :delete
|
19
|
+
if @name.to_s == 'destroy' && !@options.key?(:method)
|
20
|
+
@options[:method] = :delete
|
23
21
|
end
|
24
|
-
if @name.to_s ==
|
25
|
-
@options[:confirm] ||= :are_you_sure_you_want_to_delete
|
22
|
+
if @name.to_s == 'destroy' && !@options.key?(:confirm)
|
23
|
+
@options[:confirm] ||= :are_you_sure_you_want_to_delete
|
26
24
|
end
|
27
|
-
@options[:if] ||= :destroyable? if @name.to_s ==
|
28
|
-
@options[:if] ||= :editable? if @name.to_s ==
|
25
|
+
@options[:if] ||= :destroyable? if @name.to_s == 'destroy'
|
26
|
+
@options[:if] ||= :editable? if @name.to_s == 'edit'
|
29
27
|
@options[:confirm] = :are_you_sure if @options[:confirm].is_a?(TrueClass)
|
30
28
|
end
|
31
29
|
|
32
30
|
def use_single?
|
33
|
-
@use_mode == :single
|
31
|
+
@use_mode == :single || @use_mode == :both
|
34
32
|
end
|
35
33
|
|
36
34
|
def use_many?
|
37
|
-
@use_mode == :many
|
35
|
+
@use_mode == :many || @use_mode == :both
|
38
36
|
end
|
39
37
|
|
40
38
|
def use_none?
|
@@ -42,7 +40,7 @@ module ActiveList
|
|
42
40
|
end
|
43
41
|
|
44
42
|
def global?
|
45
|
-
self.use_none?
|
43
|
+
self.use_none? || self.use_many?
|
46
44
|
end
|
47
45
|
|
48
46
|
def header_code
|
@@ -53,17 +51,13 @@ module ActiveList
|
|
53
51
|
url = @options[:url] ||= {}
|
54
52
|
url[:controller] ||= (@options[:controller] || table.model.name.tableize)
|
55
53
|
url[:action] ||= @name.to_s
|
56
|
-
if @options.
|
57
|
-
|
58
|
-
|
59
|
-
if use_many? and use_mode == :many
|
60
|
-
url[:id] ||= ID_PLACEHOLDER
|
61
|
-
end
|
62
|
-
return url
|
54
|
+
url[:format] = @options[:format] if @options.key? :format
|
55
|
+
url[:id] ||= ID_PLACEHOLDER if use_many? && use_mode == :many
|
56
|
+
url
|
63
57
|
end
|
64
58
|
|
65
59
|
def operation(record = 'record_of_the_death')
|
66
|
-
link_options =
|
60
|
+
link_options = ''
|
67
61
|
if @options[:confirm]
|
68
62
|
link_options << ", 'data-confirm' => #{(@options[:confirm]).inspect}.t(scope: 'labels')"
|
69
63
|
end
|
@@ -71,62 +65,60 @@ module ActiveList
|
|
71
65
|
link_options << ", method: :#{@options[:method].to_s.underscore}"
|
72
66
|
end
|
73
67
|
action = @name
|
74
|
-
format = @options[:format] ? ", format: '#{@options[:format]}'" :
|
68
|
+
format = @options[:format] ? ", format: '#{@options[:format]}'" : ''
|
75
69
|
if @options[:remote]
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
70
|
+
fail StandardError, 'Sure to use :remote ?'
|
71
|
+
# remote_options = @options.dup
|
72
|
+
# remote_options['data-confirm'] = "#{@options[:confirm].inspect}.tl".c unless @options[:confirm].nil?
|
73
|
+
# remote_options.delete :remote
|
74
|
+
# remote_options.delete :image
|
75
|
+
# remote_options = remote_options.inspect.to_s
|
76
|
+
# remote_options = remote_options[1..-2]
|
77
|
+
# code = "link_to_remote(#{image}"
|
78
|
+
# code += ", {url: {action: "+@name.to_s+", id: "+record+".id"+format+"}"
|
79
|
+
# code += ", "+remote_options+"}"
|
80
|
+
# code += ", {title: #{action.inspect}.tl}"
|
81
|
+
# code += ")"
|
88
82
|
elsif @options[:actions]
|
89
83
|
unless use_single?
|
90
|
-
|
84
|
+
fail StandardError, 'Only compatible with single actions'
|
91
85
|
end
|
92
86
|
unless @options[:actions].is_a? Hash
|
93
|
-
|
87
|
+
fail StandardError, ':actions parameter have to be a Hash.'
|
94
88
|
end
|
95
89
|
cases = []
|
96
90
|
for expected, url in @options[:actions]
|
97
|
-
url[:id] ||=
|
98
|
-
url[:id] =
|
99
|
-
url[:redirect] ||=
|
100
|
-
url.delete_if{|
|
101
|
-
cases << "#{record}.#{@name} == #{expected.inspect}\nlink_to(content_tag(:i) + h(#{url[:action].inspect}.t(scope: 'rest.actions'))"
|
102
|
-
|
103
|
-
|
104
|
-
|
91
|
+
url[:id] ||= 'RECORD.id'.c
|
92
|
+
url[:id] = 'RECORD.id'.c if url[:id] == ID_PLACEHOLDER
|
93
|
+
url[:redirect] ||= 'params[:redirect]'.c
|
94
|
+
url.delete_if { |_k, v| v.nil? }
|
95
|
+
cases << "#{record}.#{@name} == #{expected.inspect}\nlink_to(content_tag(:i) + h(#{url[:action].inspect}.t(scope: 'rest.actions'))"\
|
96
|
+
', {' + url.collect { |k, v| "#{k}: " + urlify(v, record) }.join(', ') + format + '}' \
|
97
|
+
", {class: '#{@name}'" + link_options + '}'\
|
98
|
+
")\n"
|
105
99
|
end
|
106
100
|
|
107
|
-
code =
|
101
|
+
code = 'if ' + cases.join('elsif ') + 'end'
|
108
102
|
else
|
109
103
|
url = @options[:url] ||= {}
|
110
|
-
url[:controller] ||= (@options[:controller] ||
|
104
|
+
url[:controller] ||= (@options[:controller] || 'RECORD.class.name.tableize'.c)
|
111
105
|
url[:action] ||= @name.to_s
|
112
|
-
url[:id] ||=
|
113
|
-
url[:id] =
|
114
|
-
url[:redirect] ||=
|
115
|
-
url.delete_if{|
|
116
|
-
url =
|
117
|
-
code = "{class: '#{@name}'" + link_options +
|
118
|
-
code = "link_to(content_tag(:i) + h(' ' + :#{action}.t(scope: 'rest.actions')), " + url +
|
106
|
+
url[:id] ||= 'RECORD.id'.c
|
107
|
+
url[:id] = 'RECORD.id'.c if url[:id] == ID_PLACEHOLDER
|
108
|
+
url[:redirect] ||= 'params[:redirect]'.c
|
109
|
+
url.delete_if { |_k, v| v.nil? }
|
110
|
+
url = '{' + url.collect { |k, v| "#{k}: " + urlify(v, record) }.join(', ') + format + '}'
|
111
|
+
code = "{class: '#{@name}'" + link_options + '}'
|
112
|
+
code = "link_to(content_tag(:i) + h(' ' + :#{action}.t(scope: 'rest.actions')), " + url + ', ' + code + ')'
|
119
113
|
end
|
120
114
|
if @options[:if]
|
121
|
-
code =
|
115
|
+
code = 'if ' + recordify!(@options[:if], record) + "\n" + code.dig + 'end'
|
122
116
|
end
|
123
117
|
if @options[:unless]
|
124
|
-
code =
|
118
|
+
code = 'unless ' + recordify!(@options[:unless], record) + "\n" + code.dig + 'end'
|
125
119
|
end
|
126
120
|
code.c
|
127
121
|
end
|
128
122
|
end
|
129
|
-
|
130
123
|
end
|
131
|
-
|
132
124
|
end
|
@@ -1,85 +1,83 @@
|
|
1
1
|
module ActiveList
|
2
|
-
|
3
2
|
module Definition
|
4
|
-
|
5
3
|
class AssociationColumn < DataColumn
|
6
|
-
|
7
4
|
attr_reader :label_method, :reflection
|
8
5
|
|
9
6
|
def initialize(table, name, options = {})
|
10
7
|
super(table, name, options)
|
11
8
|
unless @options[:through]
|
12
|
-
|
9
|
+
fail ArgumentError, 'Option :through must be given'
|
13
10
|
end
|
14
11
|
reflection_name = @options.delete(:through).to_sym
|
15
12
|
if @reflection = @table.model.reflect_on_association(reflection_name)
|
16
13
|
if @reflection.macro == :belongs_to
|
17
|
-
|
14
|
+
# Do some stuff
|
18
15
|
elsif @reflection.macro == :has_one
|
19
|
-
|
16
|
+
# Do some stuff
|
20
17
|
else
|
21
|
-
|
18
|
+
fail ArgumentError, "Only belongs_to are usable. Can't handle: #{reflection.macro} :#{reflection.name}."
|
22
19
|
end
|
23
20
|
else
|
24
|
-
|
21
|
+
fail UnknownReflection, "Reflection #{reflection_name} cannot be found for #{table.model.name}."
|
25
22
|
end
|
26
|
-
unless klass =
|
27
|
-
|
23
|
+
unless klass = begin
|
24
|
+
@reflection.class_name.constantize
|
25
|
+
rescue
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
fail StandardError, "Given reflection #{reflection_name} seems to be invalid"
|
28
29
|
end
|
29
30
|
columns_def = klass.columns_hash.keys.map(&:to_sym)
|
30
31
|
unless @label_method = @options.delete(:label_method)
|
31
32
|
columns = columns_def + @reflection.class_name.constantize.instance_methods.map(&:to_sym)
|
32
|
-
unless @label_method = LABELS_COLUMNS.detect{|m| columns.include?(m)}
|
33
|
-
|
33
|
+
unless @label_method = LABELS_COLUMNS.detect { |m| columns.include?(m) }
|
34
|
+
fail ArgumentError, ":label_method option must be given for association #{name}. (#{columns.inspect})"
|
34
35
|
end
|
35
36
|
end
|
36
37
|
unless @sort_column = @options.delete(:sort)
|
37
38
|
if columns_def.include?(@label_method)
|
38
39
|
@sort_column = @label_method
|
39
40
|
else
|
40
|
-
unless @sort_column = LABELS_COLUMNS.detect{|m| columns_def.include?(m)}
|
41
|
+
unless @sort_column = LABELS_COLUMNS.detect { |m| columns_def.include?(m) }
|
41
42
|
@sort_column = :id
|
42
43
|
end
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
|
-
|
48
48
|
# Code for rows
|
49
49
|
def datum_code(record = 'record_of_the_death', child = false)
|
50
|
-
code =
|
50
|
+
code = ''
|
51
51
|
if child
|
52
|
-
code =
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
code = 'nil'
|
53
|
+
# if @options[:children].is_a?(FalseClass)
|
54
|
+
# code = "nil"
|
55
|
+
# else
|
56
|
+
# code = "#{record}.#{table.options[:children]}.#{@reflection.name}.#{@options[:children] || @label_method}"
|
57
|
+
# end
|
58
58
|
else
|
59
59
|
code = "(#{record}.#{@reflection.name} ? #{record}.#{@reflection.name}.#{@label_method} : nil)"
|
60
60
|
end
|
61
|
-
|
61
|
+
code.c
|
62
62
|
end
|
63
63
|
|
64
64
|
def class_name
|
65
|
-
|
65
|
+
@reflection.class_name
|
66
66
|
end
|
67
67
|
|
68
68
|
def record_expr(record = 'record_of_the_death')
|
69
|
-
|
69
|
+
"#{record}.#{@reflection.name}"
|
70
70
|
end
|
71
71
|
|
72
72
|
def sort_expression
|
73
|
-
same_table_reflections = table.reflections.select{|r| r.table_name == @reflection.table_name}
|
74
|
-
if same_table_reflections.size > 1
|
73
|
+
same_table_reflections = table.reflections.select { |r| r.table_name == @reflection.table_name }
|
74
|
+
if same_table_reflections.size > 1 && same_table_reflections.index { |r| r.name == @reflection.name } > 0
|
75
75
|
# "#{@reflection.name.to_s.pluralize}_#{@reflection.class_name.constantize.table_name}.#{@sort_column}"
|
76
76
|
"#{@reflection.name.to_s.pluralize}_#{table.model.table_name}.#{@sort_column}"
|
77
77
|
else
|
78
78
|
"#{@reflection.class_name.constantize.table_name}.#{@sort_column}"
|
79
79
|
end
|
80
80
|
end
|
81
|
-
|
82
81
|
end
|
83
|
-
|
84
82
|
end
|
85
83
|
end
|
@@ -1,9 +1,6 @@
|
|
1
1
|
module ActiveList
|
2
|
-
|
3
2
|
module Definition
|
4
|
-
|
5
3
|
class AttributeColumn < DataColumn
|
6
|
-
|
7
4
|
attr_reader :column, :label_method, :sort_column
|
8
5
|
|
9
6
|
def initialize(table, name, options = {})
|
@@ -18,31 +15,31 @@ module ActiveList
|
|
18
15
|
@sort_column = :id
|
19
16
|
end
|
20
17
|
end
|
21
|
-
@column
|
18
|
+
@column = @table.model.columns_hash[@label_method.to_s]
|
22
19
|
end
|
23
20
|
|
24
21
|
# Code for rows
|
25
22
|
def datum_code(record = 'record_of_the_death', child = false)
|
26
|
-
code =
|
23
|
+
code = ''
|
27
24
|
if child
|
28
25
|
if @options[:children].is_a?(FalseClass)
|
29
|
-
code =
|
26
|
+
code = 'nil'
|
30
27
|
else
|
31
28
|
code = "#{record}.#{table.options[:children]}.#{@options[:children] || @label_method}"
|
32
29
|
end
|
33
30
|
else
|
34
31
|
code = "#{record}.#{@label_method}"
|
35
32
|
end
|
36
|
-
|
33
|
+
code.c
|
37
34
|
end
|
38
35
|
|
39
36
|
# Returns the class name of the used model
|
40
37
|
def class_name
|
41
|
-
|
38
|
+
table.model.name
|
42
39
|
end
|
43
40
|
|
44
41
|
def enumerize?
|
45
|
-
|
42
|
+
table.model.send(@label_method).send(:values)
|
46
43
|
return true
|
47
44
|
rescue
|
48
45
|
return false
|
@@ -51,8 +48,6 @@ module ActiveList
|
|
51
48
|
def sort_expression
|
52
49
|
"#{@table.model.table_name}.#{@sort_column}"
|
53
50
|
end
|
54
|
-
|
55
51
|
end
|
56
|
-
|
57
52
|
end
|
58
53
|
end
|