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.
Files changed (48) hide show
  1. data/app/assets/javascripts/rails_admin/ra.filter-box.js +33 -24
  2. data/app/assets/javascripts/rails_admin/ui.js.coffee +1 -1
  3. data/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.css.scss +1 -1
  4. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +5 -0
  5. data/app/controllers/rails_admin/main_controller.rb +16 -14
  6. data/app/helpers/rails_admin/application_helper.rb +1 -1
  7. data/app/helpers/rails_admin/form_builder.rb +7 -11
  8. data/app/views/layouts/rails_admin/application.html.haml +1 -1
  9. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +4 -4
  10. data/app/views/rails_admin/main/_form_filtering_select.html.haml +4 -4
  11. data/app/views/rails_admin/main/_form_text.html.haml +1 -1
  12. data/app/views/rails_admin/main/index.html.haml +22 -6
  13. data/config/locales/fr.yml +24 -0
  14. data/config/locales/rails_admin.en.yml +1 -0
  15. data/lib/rails_admin/adapters/active_record.rb +45 -46
  16. data/lib/rails_admin/config/actions/edit.rb +7 -3
  17. data/lib/rails_admin/config/actions/index.rb +3 -1
  18. data/lib/rails_admin/config/actions/new.rb +4 -4
  19. data/lib/rails_admin/config/actions.rb +1 -1
  20. data/lib/rails_admin/config/fields/association.rb +19 -9
  21. data/lib/rails_admin/config/fields/base.rb +28 -39
  22. data/lib/rails_admin/config/fields/factories/belongs_to_association.rb +2 -2
  23. data/lib/rails_admin/config/fields/factories/carrierwave.rb +1 -1
  24. data/lib/rails_admin/config/fields/factories/enum.rb +1 -1
  25. data/lib/rails_admin/config/fields/factories/password.rb +1 -1
  26. data/lib/rails_admin/config/fields/factories/serialized.rb +17 -0
  27. data/lib/rails_admin/config/fields/types/all.rb +1 -0
  28. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +6 -8
  29. data/lib/rails_admin/config/fields/types/boolean.rb +4 -2
  30. data/lib/rails_admin/config/fields/types/has_one_association.rb +5 -1
  31. data/lib/rails_admin/config/fields/types/hidden.rb +4 -2
  32. data/lib/rails_admin/config/fields/types/integer.rb +3 -1
  33. data/lib/rails_admin/config/fields/types/password.rb +2 -5
  34. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +1 -1
  35. data/lib/rails_admin/config/fields/types/serialized.rb +22 -0
  36. data/lib/rails_admin/config/fields/types/string.rb +0 -2
  37. data/lib/rails_admin/config/fields/types/text.rb +1 -3
  38. data/lib/rails_admin/config/fields.rb +2 -1
  39. data/lib/rails_admin/config/groupable.rb +18 -0
  40. data/lib/rails_admin/config/has_fields.rb +1 -1
  41. data/lib/rails_admin/extensions/history/history.rb +1 -1
  42. data/lib/rails_admin/version.rb +1 -1
  43. data/spec/controllers/main_controller_spec.rb +67 -1
  44. data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +2 -1
  45. data/spec/unit/adapters/active_record_spec.rb +22 -0
  46. data/spec/unit/config/actions_spec.rb +4 -0
  47. metadata +11 -193
  48. 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[:child_model_proc].call)
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 associated_label_method
64
- @associated_label_method ||= associated_model_config.object_label_method
63
+ def associated_object_label_method
64
+ @associated_object_label_method ||= associated_model_config.object_label_method
65
65
  end
66
-
67
- # Reader for the association's child key
68
- def child_key
69
- association[:child_key]
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/fields'
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(:css_class) do
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(:column_width) do
43
+ register_instance_option :column_width do
54
44
  nil
55
45
  end
56
46
 
57
- register_instance_option(:sortable) do
47
+ register_instance_option :sortable do
58
48
  !virtual? || children_fields.first || false
59
49
  end
60
50
 
61
- register_instance_option(:searchable) do
51
+ register_instance_option :searchable do
62
52
  !virtual? || children_fields.first || false
63
53
  end
64
54
 
65
- register_instance_option(:queryable?) do
55
+ register_instance_option :queryable? do
66
56
  !virtual?
67
57
  end
68
58
 
69
- register_instance_option(:filterable?) do
59
+ register_instance_option :filterable? do
70
60
  !!searchable
71
61
  end
72
62
 
73
- register_instance_option(:search_operator) do
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(:sort_reverse?) do
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(:searchable_columns) do
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(:formatted_value) do
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(:pretty_value) do
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(:export_value) do
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(:help) do
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(:html_attributes) do
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(:label) do
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(:length) do
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(:valid_length) do
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(:required?) do
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(:serial?) do
174
+ register_instance_option :serial? do
185
175
  properties && properties[:serial?]
186
176
  end
187
177
 
188
- register_instance_option(:view_helper) do
189
- @view_helper ||= self.class.instance_variable_get("@view_helper")
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[:child_key] == properties[:name] }
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[:child_key].to_s }
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.include?(:"#{properties[:name]}_enum") || parent.abstract_model.model.instance_methods.include?("#{properties[:name]}_enum")
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 RailsAdmin::Config::Fields::Types::Password.column_names.include?(properties[:name])
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(child_key)
27
+ bindings[:object].send(foreign_key)
34
28
  end
35
29
 
36
30
  def method_name
37
- nested_form ? "#{association[:child_key]}_attributes" : association[:child_key]
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
- @view_helper = :check_box
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
- @view_helper = :hidden_field
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
- @view_helper = :number_field
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
- @column_names = [:password]
12
- @view_helper = :password_field
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[:parent_model_proc].call.map{|type| RailsAdmin.config(type) }.select{|config| !config.excluded? }
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
@@ -8,8 +8,6 @@ module RailsAdmin
8
8
 
9
9
  RailsAdmin::Config::Fields::Types::register(self)
10
10
 
11
- @view_helper = :text_field
12
-
13
11
  register_instance_option(:html_attributes) do
14
12
  {
15
13
  :maxlength => length,
@@ -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?(:parent_model_proc)
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).map{|f| f.group :default; f }
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[:child_key].to_param)
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
 
@@ -2,5 +2,5 @@ module RailsAdmin
2
2
  # FIXME: this needs to be manually kept in sync with the gemspec's
3
3
  # s.version until http://jira.codehaus.org/browse/JRUBY-5319 is
4
4
  # fixed
5
- VERSION = "0.0.2"
5
+ VERSION = "0.0.3"
6
6
  end
@@ -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("$.filters.append('Name', 'name', 'string', '', '', '', false, '1');$.filters.append('Team', 'team', 'belongs_to_association', '', '', '', false, '2');")
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