obitum-rails_admin 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/app/assets/javascripts/rails_admin/ra.filter-box.js +33 -24
- data/app/assets/javascripts/rails_admin/ui.js.coffee +1 -1
- data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +1 -1
- data/app/assets/stylesheets/rails_admin/base/theming.css.scss +5 -0
- data/app/controllers/rails_admin/main_controller.rb +16 -14
- data/app/helpers/rails_admin/application_helper.rb +1 -1
- data/app/helpers/rails_admin/form_builder.rb +7 -11
- data/app/views/layouts/rails_admin/application.html.haml +1 -1
- data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +4 -4
- data/app/views/rails_admin/main/_form_filtering_select.html.haml +4 -4
- data/app/views/rails_admin/main/_form_text.html.haml +1 -1
- data/app/views/rails_admin/main/index.html.haml +22 -6
- data/config/locales/fr.yml +24 -0
- data/config/locales/rails_admin.en.yml +1 -0
- data/lib/rails_admin/adapters/active_record.rb +45 -46
- data/lib/rails_admin/config/actions/edit.rb +7 -3
- data/lib/rails_admin/config/actions/index.rb +3 -1
- data/lib/rails_admin/config/actions/new.rb +4 -4
- data/lib/rails_admin/config/actions.rb +1 -1
- data/lib/rails_admin/config/fields/association.rb +19 -9
- data/lib/rails_admin/config/fields/base.rb +28 -39
- data/lib/rails_admin/config/fields/factories/belongs_to_association.rb +2 -2
- data/lib/rails_admin/config/fields/factories/carrierwave.rb +1 -1
- data/lib/rails_admin/config/fields/factories/enum.rb +1 -1
- data/lib/rails_admin/config/fields/factories/password.rb +1 -1
- data/lib/rails_admin/config/fields/factories/serialized.rb +17 -0
- data/lib/rails_admin/config/fields/types/all.rb +1 -0
- data/lib/rails_admin/config/fields/types/belongs_to_association.rb +6 -8
- data/lib/rails_admin/config/fields/types/boolean.rb +4 -2
- data/lib/rails_admin/config/fields/types/has_one_association.rb +5 -1
- data/lib/rails_admin/config/fields/types/hidden.rb +4 -2
- data/lib/rails_admin/config/fields/types/integer.rb +3 -1
- data/lib/rails_admin/config/fields/types/password.rb +2 -5
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +1 -1
- data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
- data/lib/rails_admin/config/fields/types/string.rb +0 -2
- data/lib/rails_admin/config/fields/types/text.rb +1 -3
- data/lib/rails_admin/config/fields.rb +2 -1
- data/lib/rails_admin/config/groupable.rb +18 -0
- data/lib/rails_admin/config/has_fields.rb +1 -1
- data/lib/rails_admin/extensions/history/history.rb +1 -1
- data/lib/rails_admin/version.rb +1 -1
- data/spec/controllers/main_controller_spec.rb +67 -1
- data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +2 -1
- data/spec/unit/adapters/active_record_spec.rb +22 -0
- data/spec/unit/config/actions_spec.rb +4 -0
- metadata +11 -193
- data/lib/rails_admin/config/fields/groupable.rb +0 -25
@@ -56,24 +56,29 @@ module RailsAdmin
|
|
56
56
|
|
57
57
|
# Reader for the association's child model's configuration
|
58
58
|
def associated_model_config
|
59
|
-
@associated_model_config ||= RailsAdmin.config(association[:
|
59
|
+
@associated_model_config ||= RailsAdmin.config(association[:model_proc].call)
|
60
60
|
end
|
61
61
|
|
62
62
|
# Reader for the association's child model object's label method
|
63
|
-
def
|
64
|
-
@
|
63
|
+
def associated_object_label_method
|
64
|
+
@associated_object_label_method ||= associated_model_config.object_label_method
|
65
65
|
end
|
66
|
-
|
67
|
-
# Reader for
|
68
|
-
def
|
69
|
-
association[:
|
66
|
+
|
67
|
+
# Reader for associated primary key
|
68
|
+
def associated_primary_key
|
69
|
+
@associated_primary_key ||= association[:primary_key_proc].call
|
70
|
+
end
|
71
|
+
|
72
|
+
# Reader for the association's key
|
73
|
+
def foreign_key
|
74
|
+
association[:foreign_key]
|
70
75
|
end
|
71
76
|
|
72
77
|
# Reader for the inverse relationship
|
73
78
|
def inverse_of
|
74
79
|
association[:inverse_of]
|
75
80
|
end
|
76
|
-
|
81
|
+
|
77
82
|
# Reader whether this is a polymorphic association
|
78
83
|
def polymorphic?
|
79
84
|
association[:polymorphic]
|
@@ -88,7 +93,12 @@ module RailsAdmin
|
|
88
93
|
def value
|
89
94
|
bindings[:object].send(association[:name])
|
90
95
|
end
|
91
|
-
|
96
|
+
|
97
|
+
# has many?
|
98
|
+
def multiple?
|
99
|
+
true
|
100
|
+
end
|
101
|
+
|
92
102
|
def virtual?
|
93
103
|
true
|
94
104
|
end
|
@@ -1,12 +1,7 @@
|
|
1
|
-
require 'active_support/core_ext/string/inflections'
|
2
|
-
require 'active_model/mass_assignment_security'
|
3
|
-
|
4
1
|
require 'rails_admin/config/proxyable'
|
5
2
|
require 'rails_admin/config/configurable'
|
6
3
|
require 'rails_admin/config/hideable'
|
7
|
-
require 'rails_admin/config/
|
8
|
-
require 'rails_admin/config/fields/association'
|
9
|
-
require 'rails_admin/config/fields/groupable'
|
4
|
+
require 'rails_admin/config/groupable'
|
10
5
|
|
11
6
|
module RailsAdmin
|
12
7
|
module Config
|
@@ -15,15 +10,12 @@ module RailsAdmin
|
|
15
10
|
include RailsAdmin::Config::Proxyable
|
16
11
|
include RailsAdmin::Config::Configurable
|
17
12
|
include RailsAdmin::Config::Hideable
|
18
|
-
|
13
|
+
include RailsAdmin::Config::Groupable
|
14
|
+
|
19
15
|
attr_reader :name, :properties, :abstract_model
|
20
16
|
attr_accessor :defined, :order, :section
|
21
17
|
attr_reader :parent, :root
|
22
18
|
|
23
|
-
def self.inherited(klass)
|
24
|
-
klass.instance_variable_set("@view_helper", :text_field)
|
25
|
-
end
|
26
|
-
|
27
19
|
def initialize(parent, name, properties)
|
28
20
|
@parent = parent
|
29
21
|
@root = parent.root
|
@@ -34,11 +26,9 @@ module RailsAdmin
|
|
34
26
|
@order = 0
|
35
27
|
@properties = properties
|
36
28
|
@section = parent
|
37
|
-
|
38
|
-
extend RailsAdmin::Config::Fields::Groupable
|
39
29
|
end
|
40
30
|
|
41
|
-
register_instance_option
|
31
|
+
register_instance_option :css_class do
|
42
32
|
"#{self.name}_field"
|
43
33
|
end
|
44
34
|
|
@@ -50,37 +40,37 @@ module RailsAdmin
|
|
50
40
|
properties.blank?
|
51
41
|
end
|
52
42
|
|
53
|
-
register_instance_option
|
43
|
+
register_instance_option :column_width do
|
54
44
|
nil
|
55
45
|
end
|
56
46
|
|
57
|
-
register_instance_option
|
47
|
+
register_instance_option :sortable do
|
58
48
|
!virtual? || children_fields.first || false
|
59
49
|
end
|
60
50
|
|
61
|
-
register_instance_option
|
51
|
+
register_instance_option :searchable do
|
62
52
|
!virtual? || children_fields.first || false
|
63
53
|
end
|
64
54
|
|
65
|
-
register_instance_option
|
55
|
+
register_instance_option :queryable? do
|
66
56
|
!virtual?
|
67
57
|
end
|
68
58
|
|
69
|
-
register_instance_option
|
59
|
+
register_instance_option :filterable? do
|
70
60
|
!!searchable
|
71
61
|
end
|
72
62
|
|
73
|
-
register_instance_option
|
63
|
+
register_instance_option :search_operator do
|
74
64
|
@search_operator ||= RailsAdmin::Config.default_search_operator
|
75
65
|
end
|
76
66
|
|
77
67
|
# serials and dates are reversed in list, which is more natural (last modified items first).
|
78
|
-
register_instance_option
|
68
|
+
register_instance_option :sort_reverse? do
|
79
69
|
false
|
80
70
|
end
|
81
71
|
|
82
72
|
# list of columns I should search for that field [{ :column => 'table_name.column', :type => field.type }, {..}]
|
83
|
-
register_instance_option
|
73
|
+
register_instance_option :searchable_columns do
|
84
74
|
@searchable_columns ||= case self.searchable
|
85
75
|
when true
|
86
76
|
[{ :column => "#{self.abstract_model.model.table_name}.#{self.name}", :type => self.type }]
|
@@ -113,27 +103,27 @@ module RailsAdmin
|
|
113
103
|
end
|
114
104
|
end
|
115
105
|
|
116
|
-
register_instance_option
|
106
|
+
register_instance_option :formatted_value do
|
117
107
|
value.to_s
|
118
108
|
end
|
119
109
|
|
120
110
|
# output for pretty printing (show, list)
|
121
|
-
register_instance_option
|
111
|
+
register_instance_option :pretty_value do
|
122
112
|
formatted_value.presence || ' - '
|
123
113
|
end
|
124
114
|
|
125
115
|
# output for printing in export view (developers beware: no bindings[:view] and no data!)
|
126
|
-
register_instance_option
|
116
|
+
register_instance_option :export_value do
|
127
117
|
pretty_value
|
128
118
|
end
|
129
119
|
|
130
120
|
|
131
121
|
# Accessor for field's help text displayed below input field.
|
132
|
-
register_instance_option
|
122
|
+
register_instance_option :help do
|
133
123
|
(@help ||= {})[::I18n.locale] ||= (required? ? I18n.translate("admin.form.required") : I18n.translate("admin.form.optional")) + '. '
|
134
124
|
end
|
135
125
|
|
136
|
-
register_instance_option
|
126
|
+
register_instance_option :html_attributes do
|
137
127
|
{}
|
138
128
|
end
|
139
129
|
|
@@ -144,20 +134,20 @@ module RailsAdmin
|
|
144
134
|
# Accessor for field's label.
|
145
135
|
#
|
146
136
|
# @see RailsAdmin::AbstractModel.properties
|
147
|
-
register_instance_option
|
137
|
+
register_instance_option :label do
|
148
138
|
(@label ||= {})[::I18n.locale] ||= abstract_model.model.human_attribute_name name
|
149
139
|
end
|
150
140
|
|
151
141
|
# Accessor for field's maximum length per database.
|
152
142
|
#
|
153
143
|
# @see RailsAdmin::AbstractModel.properties
|
154
|
-
register_instance_option
|
144
|
+
register_instance_option :length do
|
155
145
|
@length ||= properties && properties[:length]
|
156
146
|
end
|
157
147
|
|
158
148
|
# Accessor for field's length restrictions per validations
|
159
149
|
#
|
160
|
-
register_instance_option
|
150
|
+
register_instance_option :valid_length do
|
161
151
|
@valid_length ||= abstract_model.model.validators_on(name).find{|v|
|
162
152
|
v.is_a?(ActiveModel::Validations::LengthValidator)}.try{|v| v.options} || {}
|
163
153
|
end
|
@@ -169,7 +159,7 @@ module RailsAdmin
|
|
169
159
|
# Accessor for whether this is field is mandatory.
|
170
160
|
#
|
171
161
|
# @see RailsAdmin::AbstractModel.properties
|
172
|
-
register_instance_option
|
162
|
+
register_instance_option :required? do
|
173
163
|
@required ||= !!([name] + children_fields).uniq.find do |column_name|
|
174
164
|
!!abstract_model.model.validators_on(column_name).find do |v|
|
175
165
|
v.is_a?(ActiveModel::Validations::PresenceValidator) && !v.options[:allow_nil] ||
|
@@ -181,16 +171,16 @@ module RailsAdmin
|
|
181
171
|
# Accessor for whether this is a serial field (aka. primary key, identifier).
|
182
172
|
#
|
183
173
|
# @see RailsAdmin::AbstractModel.properties
|
184
|
-
register_instance_option
|
174
|
+
register_instance_option :serial? do
|
185
175
|
properties && properties[:serial?]
|
186
176
|
end
|
187
177
|
|
188
|
-
register_instance_option
|
189
|
-
|
178
|
+
register_instance_option :view_helper do
|
179
|
+
:text_field
|
190
180
|
end
|
191
181
|
|
192
|
-
register_instance_option :read_only do
|
193
|
-
not editable
|
182
|
+
register_instance_option :read_only? do
|
183
|
+
not editable?
|
194
184
|
end
|
195
185
|
|
196
186
|
# init status in the view
|
@@ -217,12 +207,11 @@ module RailsAdmin
|
|
217
207
|
bindings[:view].render :partial => partial.to_s, :locals => {:field => self, :form => bindings[:form] }
|
218
208
|
end
|
219
209
|
|
220
|
-
def editable
|
210
|
+
def editable?
|
221
211
|
return false if @properties && @properties[:read_only]
|
222
212
|
!bindings[:object].class.active_authorizer[bindings[:view].controller.send(:_attr_accessible_role)].deny?(self.method_name)
|
223
213
|
end
|
224
214
|
|
225
|
-
|
226
215
|
# Is this an association
|
227
216
|
def association?
|
228
217
|
kind_of?(RailsAdmin::Config::Fields::Association)
|
@@ -239,7 +228,7 @@ module RailsAdmin
|
|
239
228
|
#
|
240
229
|
# @see RailsAdmin::Config::Fields::Base.register_instance_option(:required?)
|
241
230
|
def optional?
|
242
|
-
not required
|
231
|
+
not required?
|
243
232
|
end
|
244
233
|
|
245
234
|
# Inverse accessor whether this field is required.
|
@@ -3,12 +3,12 @@ require 'rails_admin/config/fields/types'
|
|
3
3
|
require 'rails_admin/config/fields/types/belongs_to_association'
|
4
4
|
|
5
5
|
RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
|
6
|
-
if association = parent.abstract_model.associations.find {|a| a[:
|
6
|
+
if association = parent.abstract_model.associations.find {|a| a[:foreign_key] == properties[:name] }
|
7
7
|
field = RailsAdmin::Config::Fields::Types.load("#{association[:polymorphic] ? :polymorphic : :belongs_to}_association").new(parent, association[:name], association)
|
8
8
|
fields << field
|
9
9
|
|
10
10
|
child_columns = []
|
11
|
-
id_column = parent.abstract_model.properties.find {|p| p[:name].to_s == association[:
|
11
|
+
id_column = parent.abstract_model.properties.find {|p| p[:name].to_s == association[:foreign_key].to_s }
|
12
12
|
child_columns << RailsAdmin::Config::Fields.default_factory.call(parent, id_column, fields)
|
13
13
|
|
14
14
|
if association[:polymorphic]
|
@@ -3,7 +3,7 @@ require 'rails_admin/config/fields/types'
|
|
3
3
|
require 'rails_admin/config/fields/types/file_upload'
|
4
4
|
|
5
5
|
RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
|
6
|
-
extensions = [nil, :file_name
|
6
|
+
extensions = [nil, :file_name]
|
7
7
|
model = parent.abstract_model.model
|
8
8
|
|
9
9
|
if defined?(::CarrierWave) && (model = parent.abstract_model.model).kind_of?(CarrierWave::Mount) && model.uploaders.include?(attachment_name = properties[:name].to_s.chomp('_file_name').to_sym)
|
@@ -2,7 +2,7 @@ require 'rails_admin/config/fields'
|
|
2
2
|
require 'rails_admin/config/fields/types/enum'
|
3
3
|
|
4
4
|
RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
|
5
|
-
if parent.abstract_model.model.instance_methods.
|
5
|
+
if parent.abstract_model.model.instance_methods.map(&:to_s).include?("#{properties[:name]}_enum")
|
6
6
|
fields << RailsAdmin::Config::Fields::Types::Enum.new(parent, properties[:name], properties)
|
7
7
|
true
|
8
8
|
else
|
@@ -8,7 +8,7 @@ require 'rails_admin/config/fields/types/password'
|
|
8
8
|
# @see RailsAdmin::Config::Fields::Types::Password.column_names
|
9
9
|
# @see RailsAdmin::Config::Fields.register_factory
|
10
10
|
RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
|
11
|
-
if
|
11
|
+
if [:password].include?(properties[:name])
|
12
12
|
fields << RailsAdmin::Config::Fields::Types::Password.new(parent, properties[:name], properties)
|
13
13
|
true
|
14
14
|
else
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rails_admin/config/fields'
|
2
|
+
require 'rails_admin/config/fields/types/serialized'
|
3
|
+
|
4
|
+
# Register a custom field factory for properties named as password. More property
|
5
|
+
# names can be registered in RailsAdmin::Config::Fields::Password.column_names
|
6
|
+
# array.
|
7
|
+
#
|
8
|
+
# @see RailsAdmin::Config::Fields::Types::Password.column_names
|
9
|
+
# @see RailsAdmin::Config::Fields.register_factory
|
10
|
+
RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
|
11
|
+
if parent.abstract_model.model.serialized_attributes.keys.include?(properties[:name].to_s)
|
12
|
+
fields << RailsAdmin::Config::Fields::Types::Serialized.new(parent, properties[:name], properties)
|
13
|
+
true
|
14
|
+
else
|
15
|
+
false
|
16
|
+
end
|
17
|
+
end
|
@@ -18,6 +18,7 @@ require 'rails_admin/config/fields/types/polymorphic_association'
|
|
18
18
|
require 'rails_admin/config/fields/types/string'
|
19
19
|
require 'rails_admin/config/fields/types/hidden'
|
20
20
|
require 'rails_admin/config/fields/types/text'
|
21
|
+
require 'rails_admin/config/fields/types/serialized'
|
21
22
|
require 'rails_admin/config/fields/types/time'
|
22
23
|
require 'rails_admin/config/fields/types/timestamp'
|
23
24
|
require 'rails_admin/config/fields/types/color'
|
@@ -5,10 +5,8 @@ module RailsAdmin
|
|
5
5
|
module Fields
|
6
6
|
module Types
|
7
7
|
class BelongsToAssociation < RailsAdmin::Config::Fields::Association
|
8
|
-
# Register field type for the type loader
|
9
8
|
RailsAdmin::Config::Fields::Types::register(self)
|
10
9
|
|
11
|
-
# Accessor for field's formatted value
|
12
10
|
register_instance_option :formatted_value do
|
13
11
|
(o = value) && o.send(associated_model_config.object_label_method)
|
14
12
|
end
|
@@ -25,16 +23,16 @@ module RailsAdmin
|
|
25
23
|
nested_form ? :form_nested_one : :form_filtering_select
|
26
24
|
end
|
27
25
|
|
28
|
-
def associated_model_config
|
29
|
-
@config ||= RailsAdmin.config(association[:parent_model_proc].call)
|
30
|
-
end
|
31
|
-
|
32
26
|
def selected_id
|
33
|
-
bindings[:object].send(
|
27
|
+
bindings[:object].send(foreign_key)
|
34
28
|
end
|
35
29
|
|
36
30
|
def method_name
|
37
|
-
nested_form ? "#{
|
31
|
+
nested_form ? "#{self.name}_attributes" : association[:foreign_key]
|
32
|
+
end
|
33
|
+
|
34
|
+
def multiple?
|
35
|
+
false
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
@@ -7,8 +7,10 @@ module RailsAdmin
|
|
7
7
|
class Boolean < RailsAdmin::Config::Fields::Base
|
8
8
|
# Register field type for the type loader
|
9
9
|
RailsAdmin::Config::Fields::Types::register(self)
|
10
|
-
|
11
|
-
|
10
|
+
|
11
|
+
register_instance_option :view_helper do
|
12
|
+
:check_box
|
13
|
+
end
|
12
14
|
|
13
15
|
register_instance_option(:formatted_value) do
|
14
16
|
bindings[:view].image_tag("rails_admin/#{value ? 'bullet_black' : 'bullet_white'}.png", :alt => value.to_s)
|
@@ -17,7 +17,7 @@ module RailsAdmin
|
|
17
17
|
(o = value) && o.send(associated_model_config.object_label_method)
|
18
18
|
end
|
19
19
|
|
20
|
-
def editable
|
20
|
+
def editable?
|
21
21
|
(nested_form || abstract_model.model.new.respond_to?("#{self.name}_id=")) && super
|
22
22
|
end
|
23
23
|
|
@@ -28,6 +28,10 @@ module RailsAdmin
|
|
28
28
|
def method_name
|
29
29
|
nested_form ? "#{self.name}_attributes" : "#{self.name}_id"
|
30
30
|
end
|
31
|
+
|
32
|
+
def multiple?
|
33
|
+
false
|
34
|
+
end
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
@@ -7,8 +7,10 @@ module RailsAdmin
|
|
7
7
|
class Hidden < RailsAdmin::Config::Fields::Base
|
8
8
|
RailsAdmin::Config::Fields::Types::register(self)
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
register_instance_option :view_helper do
|
11
|
+
:hidden_field
|
12
|
+
end
|
13
|
+
|
12
14
|
register_instance_option(:partial) do
|
13
15
|
:form_field
|
14
16
|
end
|
@@ -8,7 +8,9 @@ module RailsAdmin
|
|
8
8
|
# Register field type for the type loader
|
9
9
|
RailsAdmin::Config::Fields::Types::register(self)
|
10
10
|
|
11
|
-
|
11
|
+
register_instance_option :view_helper do
|
12
|
+
:number_field
|
13
|
+
end
|
12
14
|
|
13
15
|
register_instance_option(:sort_reverse?) do
|
14
16
|
serial?
|
@@ -8,11 +8,8 @@ module RailsAdmin
|
|
8
8
|
# Register field type for the type loader
|
9
9
|
RailsAdmin::Config::Fields::Types::register(self)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
def self.column_names
|
15
|
-
@column_names
|
11
|
+
register_instance_option :view_helper do
|
12
|
+
:password_field
|
16
13
|
end
|
17
14
|
|
18
15
|
def parse_input(params)
|
@@ -46,7 +46,7 @@ module RailsAdmin
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def associated_model_config
|
49
|
-
@associated_model_config ||= association[:
|
49
|
+
@associated_model_config ||= association[:model_proc].call.map{|type| RailsAdmin.config(type) }.select{|config| !config.excluded? }
|
50
50
|
end
|
51
51
|
|
52
52
|
def polymorphic_type_collection
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rails_admin/config/fields/types/text'
|
2
|
+
|
3
|
+
module RailsAdmin
|
4
|
+
module Config
|
5
|
+
module Fields
|
6
|
+
module Types
|
7
|
+
class Serialized < RailsAdmin::Config::Fields::Types::Text
|
8
|
+
# Register field type for the type loader
|
9
|
+
RailsAdmin::Config::Fields::Types::register(self)
|
10
|
+
|
11
|
+
register_instance_option :formatted_value do
|
12
|
+
YAML.dump value
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse_input(params)
|
16
|
+
params[name] = (params[name].blank? ? nil : YAML.load(params[name]))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -7,9 +7,7 @@ module RailsAdmin
|
|
7
7
|
class Text < RailsAdmin::Config::Fields::Base
|
8
8
|
# Register field type for the type loader
|
9
9
|
RailsAdmin::Config::Fields::Types::register(self)
|
10
|
-
|
11
|
-
@view_helper = :text_area
|
12
|
-
|
10
|
+
|
13
11
|
# CKEditor is disabled by default
|
14
12
|
register_instance_option(:ckeditor) do
|
15
13
|
false
|
@@ -8,7 +8,7 @@ module RailsAdmin
|
|
8
8
|
mattr_reader :default_factory
|
9
9
|
@@default_factory = lambda do |parent, properties, fields|
|
10
10
|
# If it's an association
|
11
|
-
if properties.has_key?(:
|
11
|
+
if properties.has_key?(:model_proc)
|
12
12
|
association = parent.abstract_model.associations.find {|a| a[:name].to_s == properties[:name].to_s}
|
13
13
|
field = RailsAdmin::Config::Fields::Types.load("#{association[:polymorphic] ? :polymorphic : properties[:type]}_association").new(parent, properties[:name], association)
|
14
14
|
else
|
@@ -85,3 +85,4 @@ require 'rails_admin/config/fields/factories/paperclip'
|
|
85
85
|
require 'rails_admin/config/fields/factories/dragonfly'
|
86
86
|
require 'rails_admin/config/fields/factories/carrierwave'
|
87
87
|
require 'rails_admin/config/fields/factories/belongs_to_association'
|
88
|
+
require 'rails_admin/config/fields/factories/serialized'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rails_admin/config/fields/group'
|
2
|
+
|
3
|
+
module RailsAdmin
|
4
|
+
module Config
|
5
|
+
module Groupable
|
6
|
+
# Register a group instance variable and accessor methods for objects
|
7
|
+
# extending the has groups mixin. The extended objects must implement
|
8
|
+
# reader for a parent object which includes this module.
|
9
|
+
#
|
10
|
+
# @see RailsAdmin::Config::HasGroups.group
|
11
|
+
# @see RailsAdmin::Config::Fields::Group
|
12
|
+
def group(name = nil)
|
13
|
+
@group = parent.group(name) unless name.nil? # setter
|
14
|
+
@group ||= parent.group(:default) # getter
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -126,7 +126,7 @@ module RailsAdmin
|
|
126
126
|
# parent is RailsAdmin::Config::Model, recursion is on Section's classes
|
127
127
|
@_ro_fields ||= parent.send(self.class.superclass.to_s.underscore.split('/').last)._fields(true).freeze
|
128
128
|
else # recursion tail
|
129
|
-
@_ro_fields = @_fields = RailsAdmin::Config::Fields.factory(self)
|
129
|
+
@_ro_fields = @_fields = RailsAdmin::Config::Fields.factory(self)
|
130
130
|
end
|
131
131
|
readonly ? @_ro_fields : (@_fields ||= @_ro_fields.map(&:clone))
|
132
132
|
end
|
@@ -19,7 +19,7 @@ class RailsAdmin::History < ActiveRecord::Base
|
|
19
19
|
end
|
20
20
|
|
21
21
|
model.associations.each do |t|
|
22
|
-
assoc = changed_property_list.index(t[:
|
22
|
+
assoc = changed_property_list.index(t[:foreign_key].to_param)
|
23
23
|
changed_property_list[assoc] = "associated #{t[:pretty_name]}" if assoc
|
24
24
|
end
|
25
25
|
|
data/lib/rails_admin/version.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe RailsAdmin::MainController do
|
@@ -107,8 +109,72 @@ describe RailsAdmin::MainController do
|
|
107
109
|
controller.list_entries.length.should == @players.size
|
108
110
|
|
109
111
|
end
|
112
|
+
end
|
110
113
|
|
114
|
+
describe "index" do
|
115
|
+
it "uses source association's primary key with :compact, not target model's default primary key" do
|
116
|
+
class TeamWithNumberedPlayers < ActiveRecord::Base
|
117
|
+
self.table_name = 'teams'
|
118
|
+
has_many :numbered_players, :class_name => 'Player', :primary_key => :number, :foreign_key => 'team_id'
|
119
|
+
end
|
120
|
+
FactoryGirl.create :team
|
121
|
+
TeamWithNumberedPlayers.first.numbered_players = [FactoryGirl.create(:player, :number => 123)]
|
122
|
+
returned = get :index, {:model_name => 'player', :source_object_id => Team.first.id, :source_abstract_model => 'team_with_numbered_players', :associated_collection => 'numbered_players', :current_action => :create, :compact => true, :format => :json}
|
123
|
+
returned.body.should =~ /\"id\"\:123/
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "sanitize_params_for!" do
|
128
|
+
it 'sanitize params recursively in nested forms' do
|
129
|
+
RailsAdmin.config Comment do
|
130
|
+
configure :created_at do
|
131
|
+
show
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
RailsAdmin.config NestedFieldTest do
|
136
|
+
configure :created_at do
|
137
|
+
show
|
138
|
+
end
|
139
|
+
end
|
111
140
|
|
112
|
-
|
141
|
+
I18n.locale = :fr
|
142
|
+
controller.params = {
|
143
|
+
"field_test"=>{
|
144
|
+
:"datetime_field"=>"1 août 2010",
|
145
|
+
"nested_field_tests_attributes"=>{
|
146
|
+
"new_1330520162002"=>{
|
147
|
+
"comment_attributes"=>{
|
148
|
+
:"created_at"=>"2 août 2010"
|
149
|
+
},
|
150
|
+
:"created_at"=>"3 août 2010"
|
151
|
+
}
|
152
|
+
},
|
153
|
+
"comment_attributes"=>{
|
154
|
+
:"created_at"=>"4 août 2010"
|
155
|
+
}
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
controller.send(:sanitize_params_for!, :create, RailsAdmin.config(FieldTest), controller.params['field_test'])
|
160
|
+
|
161
|
+
controller.params.should == {
|
162
|
+
"field_test"=>{
|
163
|
+
:datetime_field=>'Sun, 01 Aug 2010 00:00:00 UTC +00:00',
|
164
|
+
"nested_field_tests_attributes"=>{
|
165
|
+
"new_1330520162002"=>{
|
166
|
+
"comment_attributes"=>{
|
167
|
+
:created_at=>'Mon, 02 Aug 2010 00:00:00 UTC +00:00'
|
168
|
+
},
|
169
|
+
:created_at=>'Tue, 03 Aug 2010 00:00:00 UTC +00:00'
|
170
|
+
}
|
171
|
+
},
|
172
|
+
"comment_attributes"=>{
|
173
|
+
:created_at=>'Wed, 04 Aug 2010 00:00:00 UTC +00:00'
|
174
|
+
}
|
175
|
+
}
|
176
|
+
}
|
177
|
+
I18n.locale = :en
|
178
|
+
end
|
113
179
|
end
|
114
180
|
end
|
@@ -246,7 +246,8 @@ describe "RailsAdmin Basic List" do
|
|
246
246
|
end
|
247
247
|
|
248
248
|
visit index_path(:model_name => "player")
|
249
|
-
should have_content(
|
249
|
+
should have_content(%{$.filters.append("Name", "name", "string", null, null, "", 1);})
|
250
|
+
should have_content(%{$.filters.append("Team", "team", "belongs_to_association", null, null, "", 2);})
|
250
251
|
end
|
251
252
|
end
|
252
253
|
|