rails_admin 0.1.2 → 0.2.0

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