rails_admin 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rails_admin might be problematic. Click here for more details.

Files changed (95) hide show
  1. data/Gemfile +18 -20
  2. data/README.md +8 -1
  3. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +5 -4
  4. data/app/assets/stylesheets/rails_admin/base/theming.css.scss +4 -4
  5. data/app/controllers/rails_admin/main_controller.rb +11 -2
  6. data/app/helpers/rails_admin/application_helper.rb +1 -1
  7. data/app/helpers/rails_admin/form_builder.rb +3 -3
  8. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +4 -4
  9. data/app/views/rails_admin/main/_form_filtering_select.html.haml +2 -2
  10. data/app/views/rails_admin/main/_form_nested_one.html.haml +1 -1
  11. data/app/views/rails_admin/main/_form_text.html.haml +2 -1
  12. data/app/views/rails_admin/main/export.html.haml +2 -2
  13. data/app/views/rails_admin/main/index.html.haml +5 -5
  14. data/app/views/rails_admin/main/show.html.haml +1 -1
  15. data/lib/generators/rails_admin/templates/initializer.erb +5 -5
  16. data/lib/rails_admin/abstract_model.rb +1 -0
  17. data/lib/rails_admin/config.rb +1 -1
  18. data/lib/rails_admin/config/actions/base.rb +1 -1
  19. data/lib/rails_admin/config/actions/edit.rb +5 -4
  20. data/lib/rails_admin/config/actions/new.rb +5 -4
  21. data/lib/rails_admin/config/fields/association.rb +10 -10
  22. data/lib/rails_admin/config/fields/base.rb +10 -4
  23. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +2 -2
  24. data/lib/rails_admin/config/fields/types/boolean.rb +4 -4
  25. data/lib/rails_admin/config/fields/types/bson_object_id.rb +4 -4
  26. data/lib/rails_admin/config/fields/types/carrierwave.rb +3 -3
  27. data/lib/rails_admin/config/fields/types/datetime.rb +5 -5
  28. data/lib/rails_admin/config/fields/types/enum.rb +5 -5
  29. data/lib/rails_admin/config/fields/types/file_upload.rb +10 -6
  30. data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -1
  31. data/lib/rails_admin/config/fields/types/has_one_association.rb +3 -3
  32. data/lib/rails_admin/config/fields/types/integer.rb +1 -1
  33. data/lib/rails_admin/config/fields/types/paperclip.rb +2 -2
  34. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +8 -4
  35. data/lib/rails_admin/config/fields/types/serialized.rb +2 -2
  36. data/lib/rails_admin/config/fields/types/string.rb +3 -3
  37. data/lib/rails_admin/config/fields/types/text.rb +22 -15
  38. data/lib/rails_admin/config/fields/types/time.rb +1 -1
  39. data/lib/rails_admin/config/hideable.rb +1 -1
  40. data/lib/rails_admin/config/model.rb +4 -0
  41. data/lib/rails_admin/config/sections/modal.rb +1 -1
  42. data/lib/rails_admin/engine.rb +1 -1
  43. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +2 -1
  44. data/lib/rails_admin/support/csv_converter.rb +1 -1
  45. data/lib/rails_admin/version.rb +2 -2
  46. data/lib/rails_admin/version.rbc +582 -0
  47. data/lib/tasks/rails_admin.rake +2 -2
  48. data/spec/controllers/main_controller_spec.rb +113 -45
  49. data/spec/dummy_app/Gemfile +11 -25
  50. data/spec/dummy_app/Gemfile.lock +214 -0
  51. data/spec/dummy_app/app/active_record/comment.rb +1 -1
  52. data/spec/dummy_app/app/active_record/field_test.rb +0 -1
  53. data/spec/dummy_app/config/initializers/strong_parameters.rb +2 -0
  54. data/spec/dummy_app/db/test.sqlite3 +0 -0
  55. data/spec/dummy_app/log/test.log +97612 -0
  56. data/spec/helpers/application_helper_spec.rb +24 -24
  57. data/spec/helpers/form_builder_spec.rb +4 -4
  58. data/spec/integration/authorization/cancan_spec.rb +3 -3
  59. data/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +2 -2
  60. data/spec/integration/basic/bulk_destroy/rails_admin_basic_bulk_destroy_spec.rb +2 -2
  61. data/spec/integration/basic/create/rails_admin_basic_create_spec.rb +9 -9
  62. data/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +1 -1
  63. data/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +4 -4
  64. data/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +9 -9
  65. data/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +10 -10
  66. data/spec/integration/basic/export/rails_admin_basic_export_spec.rb +5 -5
  67. data/spec/integration/basic/list/rails_admin_basic_list_spec.rb +32 -25
  68. data/spec/integration/basic/new/rails_admin_basic_new_spec.rb +8 -8
  69. data/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb +3 -3
  70. data/spec/integration/basic/show/rails_admin_basic_show_spec.rb +6 -6
  71. data/spec/integration/basic/update/rails_admin_basic_update_spec.rb +13 -13
  72. data/spec/integration/config/edit/rails_admin_config_edit_spec.rb +97 -76
  73. data/spec/integration/config/list/rails_admin_config_list_spec.rb +32 -32
  74. data/spec/integration/config/show/rails_admin_config_show_spec.rb +23 -23
  75. data/spec/integration/history/rails_admin_history_spec.rb +6 -6
  76. data/spec/integration/rails_admin_spec.rb +17 -17
  77. data/spec/integration/relation_spec.rb +7 -7
  78. data/spec/unit/abstract_model_spec.rb +11 -5
  79. data/spec/unit/active_record_extension_spec.rb +2 -2
  80. data/spec/unit/adapters/active_record/abstract_object_spec.rb +8 -8
  81. data/spec/unit/adapters/active_record_spec.rb +6 -6
  82. data/spec/unit/adapters/mongoid/abstract_object_spec.rb +1 -1
  83. data/spec/unit/adapters/mongoid_spec.rb +12 -12
  84. data/spec/unit/config/actions/base_spec.rb +2 -2
  85. data/spec/unit/config/actions_spec.rb +16 -16
  86. data/spec/unit/config/fields/base_spec.rb +61 -49
  87. data/spec/unit/config/fields/date_spec.rb +4 -4
  88. data/spec/unit/config/fields/datetime_spec.rb +4 -4
  89. data/spec/unit/config/fields/file_upload_spec.rb +21 -0
  90. data/spec/unit/config/fields/time_spec.rb +3 -3
  91. data/spec/unit/config/fields/timestamp_spec.rb +1 -1
  92. data/spec/unit/config/model_spec.rb +10 -10
  93. data/spec/unit/config/sections_spec.rb +4 -4
  94. data/spec/unit/config_spec.rb +9 -9
  95. metadata +17 -218
data/Gemfile CHANGED
@@ -1,21 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Bundle gems for the local environment. Make sure to
4
- # put test-only gems in this group so their generators
5
- # and rake tasks are available in development mode:
6
3
  group :active_record do
7
4
  platforms :jruby do
8
- case ENV['CI_DB_ADAPTER']
9
- when 'mysql'
10
- gem 'activerecord-jdbcmysql-adapter', '~> 1.2'
11
- gem 'jdbc-mysql', '~> 5.1'
12
- when 'postgresql'
13
- gem 'activerecord-jdbcpostgresql-adapter', '~> 1.2'
14
- gem 'jdbc-postgres', '~> 9.0'
15
- else
16
- gem 'activerecord-jdbcsqlite3-adapter', '~> 1.2'
17
- gem 'jdbc-sqlite3', '~> 3.6'
18
- end
5
+ gem 'activerecord-jdbcsqlite3-adapter', '~> 1.2'
6
+ gem 'jdbc-sqlite3', '~> 3.6'
19
7
  end
20
8
 
21
9
  platforms :ruby, :mswin, :mingw do
@@ -28,7 +16,6 @@ group :active_record do
28
16
  gem 'sqlite3', '~> 1.3'
29
17
  end
30
18
  end
31
- gem 'carrierwave'
32
19
  end
33
20
 
34
21
  group :mongoid do
@@ -39,15 +26,26 @@ end
39
26
 
40
27
  group :debug do
41
28
  platform :mri_19 do
42
- gem 'debugger'
43
- gem 'simplecov', :require => false
29
+ gem 'debugger', '~> 1.2'
30
+ gem 'simplecov', '~> 0.6', :require => false
44
31
  end
45
32
  end
46
33
 
47
34
  group :development, :test do
48
- gem 'cancan'
49
- gem 'devise'
50
- gem 'paperclip'
35
+ gem 'strong_parameters', '~> 0.1.5'
36
+ gem 'cancan', '~> 1.6'
37
+ gem 'capybara', '~> 1.1'
38
+ gem 'carrierwave', '~> 0.6'
39
+ gem 'database_cleaner', '~> 0.8'
40
+ gem 'devise', '~> 2.1'
41
+ gem 'dragonfly', '~> 0.9'
42
+ gem 'factory_girl', '~> 4.1'
43
+ gem 'generator_spec', '~> 0.8'
44
+ gem 'launchy', '~> 2.1'
45
+ gem 'mini_magick', '~> 3.4'
46
+ gem 'paperclip', '~> 3.3'
47
+ gem 'rspec-rails', '~> 2.11'
48
+ gem 'timecop', '~> 0.5'
51
49
  end
52
50
 
53
51
  gemspec
data/README.md CHANGED
@@ -1,10 +1,17 @@
1
- # RailsAdmin [![Build Status](https://secure.travis-ci.org/sferik/rails_admin.png?branch=master)][travis] [![Dependency Status](https://gemnasium.com/sferik/rails_admin.png?travis)][gemnasium] [![Code Climate](https://codeclimate.com/badge.png)][codeclimate] [![Click here to lend your support to: RailsAdmin and make a donation at www.pledgie.com !](https://www.pledgie.com/campaigns/15917.png)][pledgie]
1
+ # RailsAdmin
2
+ [![Build Status](https://secure.travis-ci.org/sferik/rails_admin.png?branch=master)][travis]
3
+ [![Dependency Status](https://gemnasium.com/sferik/rails_admin.png?travis)][gemnasium]
4
+ [![Code Climate](https://codeclimate.com/badge.png)][codeclimate]
5
+ [![Pledgie](https://www.pledgie.com/campaigns/15917.png)][pledgie]
6
+ [![Flattr](http://api.flattr.com/button/flattr-badge-large.png)][flattr]
7
+
2
8
  RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data.
3
9
 
4
10
  [travis]: http://travis-ci.org/sferik/rails_admin
5
11
  [gemnasium]: https://gemnasium.com/sferik/rails_admin
6
12
  [codeclimate]: https://codeclimate.com/github/sferik/rails_admin
7
13
  [pledgie]: http://www.pledgie.com/campaigns/15917
14
+ [flattr]: http://flattr.com/thing/799416/sferikrailsadmin-on-GitHub
8
15
 
9
16
  It started as a port of [MerbAdmin][merb-admin] to Rails 3 and was implemented
10
17
  as a [Ruby Summer of Code project][rubysoc] by [Bogdan Gaza][hurrycane] with
@@ -191,19 +191,20 @@ $(document).live 'rails_admin.dom_ready', ->
191
191
 
192
192
  # bootstrap_wysihtml5
193
193
 
194
- goBootstrapWysihtml5s = (array) =>
194
+ goBootstrapWysihtml5s = (array, config_options) =>
195
195
  array.each ->
196
196
  $(@).addClass('bootstrap-wysihtml5ed')
197
197
  $(@).closest('.controls').addClass('well')
198
- $(@).wysihtml5()
198
+ $(@).wysihtml5(config_options)
199
199
 
200
200
  array = $('form [data-richtext=bootstrap-wysihtml5]').not('.bootstrap-wysihtml5ed')
201
201
  if array.length
202
202
  @array = array
203
203
  if not window.wysihtml5
204
204
  options = $(array[0]).data('options')
205
+ config_options = $.parseJSON(options['config_options'])
205
206
  $('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
206
207
  $.getScript options['jspath'], (script, textStatus, jqXHR) =>
207
- goBootstrapWysihtml5s(@array)
208
+ goBootstrapWysihtml5s(@array, config_options)
208
209
  else
209
- goBootstrapWysihtml5s(@array)
210
+ goBootstrapWysihtml5s(@array, config_options)
@@ -102,7 +102,7 @@ body.rails_admin {
102
102
  margin-left:-10px;
103
103
  .control-group > label {
104
104
  padding-left:10px;
105
- width:130px;
105
+ width:135px;
106
106
  }
107
107
  legend {
108
108
  float:left;
@@ -119,7 +119,7 @@ body.rails_admin {
119
119
  margin-left:-20px;
120
120
  .control-group > label {
121
121
  padding-left:20px;
122
- width:120px;
122
+ width:125px;
123
123
  }
124
124
  legend {
125
125
  margin-left:20px;
@@ -135,7 +135,7 @@ body.rails_admin {
135
135
  margin-left:-30px;
136
136
  .control-group > label {
137
137
  padding-left:30px;
138
- width:110px;
138
+ width:115px;
139
139
  }
140
140
  legend {
141
141
  margin-left:30px;
@@ -151,7 +151,7 @@ body.rails_admin {
151
151
  margin-left:-40px;
152
152
  .control-group > label {
153
153
  padding-left:40px;
154
- width:100px;
154
+ width:105px;
155
155
  }
156
156
  legend {
157
157
  margin-left:40px;
@@ -87,11 +87,20 @@ module RailsAdmin
87
87
  end
88
88
  end
89
89
 
90
+ def satisfy_strong_params!
91
+ if @abstract_model.model.ancestors.map(&:to_s).include?('ActiveModel::ForbiddenAttributesProtection')
92
+ params[@abstract_model.param_key].try :permit!
93
+ end
94
+ end
95
+
90
96
  def sanitize_params_for!(action, model_config = @model_config, _params = params[@abstract_model.param_key])
91
97
  return unless _params.present?
92
- fields = model_config.send(action).fields
98
+ fields = model_config.send(action).with(:controller => self, :view => self.view_context, :object => @object).visible_fields
99
+ allowed_methods = fields.map{|f|
100
+ f.allowed_methods
101
+ }.flatten.uniq.map(&:to_s) << "id" << "_destroy"
93
102
  fields.select{ |f| f.respond_to?(:parse_input) }.each {|f| f.parse_input(_params) }
94
-
103
+ _params.slice!(*allowed_methods)
95
104
  fields.select(&:nested_form).each do |association|
96
105
  children_params = association.multiple? ? _params[association.method_name].try(:values) : [_params[association.method_name]].compact
97
106
  (children_params || []).each do |children_param|
@@ -70,7 +70,7 @@ module RailsAdmin
70
70
  nodes.map do |node|
71
71
  model_param = node.abstract_model.to_param
72
72
  url = url_for(:action => :index, :controller => 'rails_admin/main', :model_name => model_param)
73
- level_class = "nav-level-#{level}" if level > 0
73
+ level_class = " nav-level-#{level}" if level > 0
74
74
 
75
75
  li = content_tag :li, "data-model"=>model_param do
76
76
  link_to node.label_plural, url, :class => "pjax#{level_class}"
@@ -18,7 +18,7 @@ module RailsAdmin
18
18
  action = options[:action]
19
19
  end
20
20
 
21
- groups = options[:model_config].send(action).with(:form => self, :object => @object, :view => @template).visible_groups
21
+ groups = options[:model_config].send(action).with(:form => self, :object => @object, :view => @template, :controller => @template.controller).visible_groups
22
22
 
23
23
  object_infos +
24
24
  groups.map do |fieldset|
@@ -29,7 +29,7 @@ module RailsAdmin
29
29
  end
30
30
 
31
31
  def fieldset_for fieldset, nested_in
32
- if (fields = fieldset.with(:form => self, :object => @object, :view => @template).visible_fields).length > 0
32
+ if (fields = fieldset.with(:form => self, :object => @object, :view => @template, :controller => @template.controller).visible_fields).length > 0
33
33
  @template.content_tag :fieldset do
34
34
  contents = []
35
35
  contents << @template.content_tag(:legend, %{<i class="icon-chevron-#{(fieldset.active? ? 'down' : 'right')}"></i> #{fieldset.label}}.html_safe, :style => "#{fieldset.name == :default ? 'display:none' : ''}")
@@ -102,7 +102,7 @@ module RailsAdmin
102
102
  def dom_name field
103
103
  (@dom_name ||= {})[field.name] ||= %{#{@object_name}#{options[:index] && "[#{options[:index]}]"}[#{field.method_name}]#{field.is_a?(Config::Fields::Association) && field.multiple? ? '[]' : ''}}
104
104
  end
105
-
105
+
106
106
  protected
107
107
  def without_field_error_proc_added_div
108
108
  default_field_error_proc = ::ActionView::Base.field_error_proc
@@ -11,16 +11,16 @@
11
11
  selected_ids = selected.map{|s| s.send(field.associated_primary_key)}
12
12
 
13
13
  current_action = params[:action].in?(['create', 'new']) ? 'create' : 'update'
14
-
14
+
15
15
  xhr = !field.associated_collection_cache_all
16
-
16
+
17
17
  collection = if xhr
18
18
  selected.map { |o| [o.send(field.associated_object_label_method), o.send(field.associated_primary_key)] }
19
19
  else
20
20
  i = 0
21
21
  controller.list_entries(config, :index, field.associated_collection_scope, false).map { |o| [o.send(field.associated_object_label_method), o.send(field.associated_primary_key)] }.sort_by {|a| [selected_ids.index(a[1]) || selected_ids.size, i+=1] }
22
22
  end
23
-
23
+
24
24
  js_data = {
25
25
  :xhr => xhr,
26
26
  :'edit-url' => (authorized?(:edit, config.abstract_model) ? edit_path(:model_name => config.abstract_model.to_param, :id => '__ID__') : ''),
@@ -36,7 +36,7 @@
36
36
  :down => t("admin.misc.down")
37
37
  }
38
38
  }
39
-
39
+
40
40
  %input{:name => form.dom_name(field), :type => "hidden", :value => ""}
41
41
 
42
42
  - selected_ids = (hdv = field.html_default_value).nil? ? selected_ids : hdv
@@ -17,9 +17,9 @@
17
17
  edit_url = authorized?(:edit, config.abstract_model) ? edit_path(:model_name => config.abstract_model.to_param, :modal => true, :id => '__ID__') : ''
18
18
 
19
19
  xhr = !field.associated_collection_cache_all
20
-
20
+
21
21
  collection = xhr ? [[selected_name, selected_id]] : controller.list_entries(config, :index, field.associated_collection_scope, false).map { |o| [o.send(field.associated_object_label_method), o.send(field.associated_primary_key)] }
22
-
22
+
23
23
  js_data = {
24
24
  :xhr => xhr,
25
25
  :remote_source => index_path(config.abstract_model.to_param, :source_object_id => form.object.id, :source_abstract_model => source_abstract_model.to_param, :associated_collection => field.name, :current_action => current_action, :compact => true)
@@ -7,4 +7,4 @@
7
7
  - form.object.send("build_#{field.name}") unless form.object.send(field.name)
8
8
  .tab-content
9
9
  = form.fields_for field.name do |nested_form|
10
- = nested_form.generate({:action => :nested, :model_config => field.associated_model_config, :nested_in => field.name })
10
+ = nested_form.generate({:action => :nested, :model_config => field.associated_model_config, :nested_in => field.name })
@@ -20,7 +20,8 @@
20
20
  richtext = 'bootstrap-wysihtml5'
21
21
  js_data = {
22
22
  :csspath => field.bootstrap_wysihtml5_css_location,
23
- :jspath => field.bootstrap_wysihtml5_js_location
23
+ :jspath => field.bootstrap_wysihtml5_js_location,
24
+ :config_options => field.bootstrap_wysihtml5_config_options.to_json
24
25
  }
25
26
  else
26
27
  richtext = false
@@ -1,5 +1,5 @@
1
1
  - params = request.params.except(:action, :controller, :utf8, :page, :per_page, :format, :authenticity_token)
2
- - visible_fields = @model_config.export.with(:view => self, :object => @abstract_model.model.new).visible_fields
2
+ - visible_fields = @model_config.export.with(:view => self, :object => @abstract_model.model.new, :controller => self.controller).visible_fields
3
3
 
4
4
  = form_tag export_path(params.merge(:all => true)), :method => 'post', :class => 'form-horizontal denser' do
5
5
 
@@ -27,7 +27,7 @@
27
27
  = field.label
28
28
 
29
29
  - visible_fields.select{ |f| f.association? && !f.association[:polymorphic] }.each do |field|
30
- - fields = field.associated_model_config.export.with(:view => self, :object => (associated_model = field.associated_model_config.abstract_model.model).new).visible_fields.select{ |f| !f.association? }
30
+ - fields = field.associated_model_config.export.with(:controller => self.controller, :view => self, :object => (associated_model = field.associated_model_config.abstract_model.model).new).visible_fields.select{ |f| !f.association? }
31
31
  .control-group
32
32
  %label.control-label{:rel => 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), :onclick => 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from_associated', :name => field.label.downcase)
33
33
  .controls
@@ -11,7 +11,7 @@
11
11
  export_action = RailsAdmin::Config::Actions.find(:export, { :controller => self.controller, :abstract_model => @abstract_model })
12
12
  export_action = export_action && authorized?(export_action.authorization_key, @abstract_model) ? export_action : nil
13
13
 
14
- properties = @model_config.list.with(:view => self, :object => @abstract_model.model.new).visible_fields
14
+ properties = @model_config.list.with(:controller => self.controller, :view => self, :object => @abstract_model.model.new).visible_fields
15
15
  # columns paginate
16
16
  @filterable_fields = @model_config.list.fields.select(&:filterable?)
17
17
  sets = get_column_sets(properties)
@@ -80,9 +80,9 @@
80
80
  monthNamesShort: #{raw RailsAdmin::Config::Fields::Types::Datetime.abbr_month_names.to_json}
81
81
  }
82
82
  }
83
-
83
+
84
84
  = @ordered_filter_string
85
-
85
+
86
86
  });
87
87
  %style
88
88
  - properties.select{ |p| p.column_width.present? }.each do |property|
@@ -135,6 +135,6 @@
135
135
  - total_count = @objects.total_count.to_i
136
136
  = paginate(@objects, :theme => 'twitter-bootstrap', :remote => true)
137
137
  = link_to(t("admin.misc.show_all"), index_path(params.merge(:all => true)), :class => "show-all btn clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size
138
- .clearfix.total-count= "#{total_count} #{@model_config.label_plural.downcase}"
138
+ .clearfix.total-count= "#{total_count} #{@model_config.pluralize(total_count).downcase}"
139
139
  - else
140
- .clearfix.total-count= "#{@objects.size} #{@model_config.label_plural.downcase}"
140
+ .clearfix.total-count= "#{@objects.size} #{@model_config.pluralize(@objects.size).downcase}"
@@ -1,5 +1,5 @@
1
1
  - @model_config.show.with(:object => @object, :view => self).visible_groups.each do |fieldset|
2
- - unless (fields = fieldset.with(:object => @object, :view => self).visible_fields).empty?
2
+ - unless (fields = fieldset.with(:object => @object, :view => self, :controller => self.controller).visible_fields).empty?
3
3
  - if !(values = fields.map{ |f| v = f.value; (!v.nil? && v != '' && v != []) ? v : nil }).compact.empty? || !RailsAdmin::config.compact_show_view
4
4
  .fieldset
5
5
  %h4
@@ -41,7 +41,7 @@ RailsAdmin.config do |config|
41
41
  # Each model configuration can alternatively:
42
42
  # - stay here in a `config.model 'ModelName' do ... end` block
43
43
  # - go in the model definition file in a `rails_admin do ... end` block
44
-
44
+
45
45
  # This is your choice to make:
46
46
  # - This initializer is loaded once at startup (modifications will show up when restarting the application) but all RailsAdmin configuration would stay in one place.
47
47
  # - Models are reloaded at each request in development mode (when modified), which may smooth your RailsAdmin development workflow.
@@ -58,7 +58,7 @@ RailsAdmin.config do |config|
58
58
  # config.model '<%= abstract_model.model.model_name %>' do
59
59
 
60
60
  # # You can copy this to a 'rails_admin do ... end' block inside your <%= abstract_model.model.model_name.underscore %>.rb model definition
61
-
61
+
62
62
  # # Found associations:
63
63
 
64
64
  <%= abstract_model.config.export.fields.select{|f| f.association?}.map do |field|
@@ -72,16 +72,16 @@ end.join("\n") %>
72
72
  end.join("\n") %>
73
73
 
74
74
  # # Cross-section configuration:
75
-
75
+
76
76
  # # object_label_method :name # Name of the method called for pretty printing an *instance* of ModelName
77
77
  # # label 'My model' # Name of ModelName (smartly defaults to ActiveRecord's I18n API)
78
78
  # # label_plural 'My models' # Same, plural
79
79
  # # weight 0 # Navigation priority. Bigger is higher.
80
80
  # # parent OtherModel # Set parent model for navigation. MyModel will be nested below. OtherModel will be on first position of the dropdown
81
81
  # # navigation_label # Sets dropdown entry's name in navigation. Only for parents!
82
-
82
+
83
83
  # # Section specific configuration:
84
-
84
+
85
85
  # list do
86
86
  # # filters [:id, :name] # Array of field names which filters should be shown by default in the table header
87
87
  # # items_per_page 100 # Override default_items_per_page
@@ -18,6 +18,7 @@ module RailsAdmin
18
18
  m = m.is_a?(Class) ? m : m.constantize
19
19
  (am = old_new(m)).model && am.adapter ? am : nil
20
20
  rescue LoadError, NameError
21
+ puts "[RailsAdmin] Could not load model #{m}, assuming model is non existing. (#{$!})" unless Rails.env.test?
21
22
  nil
22
23
  end
23
24
 
@@ -69,7 +69,7 @@ module RailsAdmin
69
69
  # accepts a hash of static links to be shown below the main navigation
70
70
  attr_accessor :navigation_static_links
71
71
  attr_accessor :navigation_static_label
72
-
72
+
73
73
  # yell about fields that are not marked as accessible
74
74
  attr_accessor :yell_for_non_accessible_fields
75
75
 
@@ -9,7 +9,7 @@ module RailsAdmin
9
9
  include RailsAdmin::Config::Proxyable
10
10
  include RailsAdmin::Config::Configurable
11
11
  include RailsAdmin::Config::Hideable
12
-
12
+
13
13
  register_instance_option :only do
14
14
  nil
15
15
  end
@@ -28,9 +28,10 @@ module RailsAdmin
28
28
  @modified_assoc = []
29
29
 
30
30
  @old_object = @object.dup
31
-
32
- sanitize_params_for! :update
33
-
31
+
32
+ satisfy_strong_params!
33
+ sanitize_params_for!(request.xhr? ? :modal : :update)
34
+
34
35
  @object.set_attributes(params[@abstract_model.param_key], _attr_accessible_role)
35
36
  @authorization_adapter && @authorization_adapter.attributes_for(:update, @abstract_model).each do |name, value|
36
37
  @object.send("#{name}=", value)
@@ -40,7 +41,7 @@ module RailsAdmin
40
41
  @auditing_adapter && @auditing_adapter.update_object(@abstract_model, @object, @cached_assocations_hash, associations_hash, @modified_assoc, @old_object, _current_user)
41
42
  respond_to do |format|
42
43
  format.html { redirect_to_on_success }
43
- format.js { render :json => { :id => @object.id, :label => @model_config.with(:object => @object).object_label } }
44
+ format.js { render :json => { :id => @object.id.to_s, :label => @model_config.with(:object => @object).object_label } }
44
45
  end
45
46
  else
46
47
  handle_save_error :edit
@@ -34,18 +34,19 @@ module RailsAdmin
34
34
 
35
35
  @modified_assoc = []
36
36
  @object = @abstract_model.new
37
- sanitize_params_for! :create
38
-
37
+ satisfy_strong_params!
38
+ sanitize_params_for!(request.xhr? ? :modal : :create)
39
+
39
40
  @object.set_attributes(params[@abstract_model.param_key], _attr_accessible_role)
40
41
  @authorization_adapter && @authorization_adapter.attributes_for(:create, @abstract_model).each do |name, value|
41
42
  @object.send("#{name}=", value)
42
43
  end
43
-
44
+
44
45
  if @object.save
45
46
  @auditing_adapter && @auditing_adapter.create_object("Created #{@model_config.with(:object => @object).object_label}", @object, @abstract_model, _current_user)
46
47
  respond_to do |format|
47
48
  format.html { redirect_to_on_success }
48
- format.js { render :json => { :id => @object.id, :label => @model_config.with(:object => @object).object_label } }
49
+ format.js { render :json => { :id => @object.id.to_s, :label => @model_config.with(:object => @object).object_label } }
49
50
  end
50
51
  else
51
52
  handle_save_error
@@ -15,7 +15,7 @@ module RailsAdmin
15
15
  @properties
16
16
  end
17
17
 
18
- register_instance_option(:pretty_value) do
18
+ register_instance_option :pretty_value do
19
19
  v = bindings[:view]
20
20
  [value].flatten.select(&:present?).map do |associated|
21
21
  amc = polymorphic? ? RailsAdmin.config(associated) : associated_model_config # perf optimization for non-polymorphic associations
@@ -29,12 +29,12 @@ module RailsAdmin
29
29
  # Accessor whether association is visible or not. By default
30
30
  # association checks whether the child model is excluded in
31
31
  # configuration or not.
32
- register_instance_option(:visible?) do
32
+ register_instance_option :visible? do
33
33
  @visible ||= !self.associated_model_config.excluded?
34
34
  end
35
35
 
36
36
  # use the association name as a key, not the association key anymore!
37
- register_instance_option(:label) do
37
+ register_instance_option :label do
38
38
  (@label ||= {})[::I18n.locale] ||= abstract_model.model.human_attribute_name association[:name]
39
39
  end
40
40
 
@@ -46,12 +46,12 @@ module RailsAdmin
46
46
  scope.limit(associated_collection_scope_limit)
47
47
  end
48
48
  end
49
-
49
+
50
50
  # inverse relationship
51
51
  register_instance_option :inverse_of do
52
52
  association[:inverse_of]
53
53
  end
54
-
54
+
55
55
  # preload entire associated collection (per associated_collection_scope) on load
56
56
  # Be sure to set limit in associated_collection_scope if set is large
57
57
  register_instance_option :associated_collection_cache_all do
@@ -67,17 +67,17 @@ module RailsAdmin
67
67
  def associated_object_label_method
68
68
  @associated_object_label_method ||= associated_model_config.object_label_method
69
69
  end
70
-
70
+
71
71
  # Reader for associated primary key
72
72
  def associated_primary_key
73
73
  @associated_primary_key ||= association[:primary_key_proc].call
74
74
  end
75
-
75
+
76
76
  # Reader for the association's key
77
77
  def foreign_key
78
78
  association[:foreign_key]
79
79
  end
80
-
80
+
81
81
  # Reader whether this is a polymorphic association
82
82
  def polymorphic?
83
83
  association[:polymorphic]
@@ -92,12 +92,12 @@ module RailsAdmin
92
92
  def value
93
93
  bindings[:object].send(association[:name])
94
94
  end
95
-
95
+
96
96
  # has many?
97
97
  def multiple?
98
98
  true
99
99
  end
100
-
100
+
101
101
  def virtual?
102
102
  true
103
103
  end