obitum-rails_admin 0.0.2 → 0.0.3

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.
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