rails_admin 3.0.0.rc → 3.0.0.rc4

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.

Potentially problematic release.


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

Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -8
  3. data/app/assets/javascripts/{rails_admin.js → rails_admin/application.js} +0 -0
  4. data/app/assets/stylesheets/{rails_admin.scss → rails_admin/application.scss} +0 -0
  5. data/app/controllers/rails_admin/main_controller.rb +2 -3
  6. data/app/helpers/rails_admin/application_helper.rb +33 -11
  7. data/app/views/layouts/rails_admin/_head.html.erb +8 -5
  8. data/app/views/layouts/rails_admin/_secondary_navigation.html.erb +2 -2
  9. data/app/views/layouts/rails_admin/application.html.erb +1 -1
  10. data/app/views/rails_admin/main/export.html.erb +1 -1
  11. data/app/views/rails_admin/main/index.html.erb +2 -2
  12. data/app/views/rails_admin/main/show.html.erb +11 -9
  13. data/lib/generators/rails_admin/install_generator.rb +8 -6
  14. data/lib/rails_admin/abstract_model.rb +3 -4
  15. data/lib/rails_admin/adapters/active_record.rb +2 -1
  16. data/lib/rails_admin/adapters/mongoid.rb +2 -2
  17. data/lib/rails_admin/config/actions/base.rb +5 -0
  18. data/lib/rails_admin/config/actions/export.rb +2 -1
  19. data/lib/rails_admin/config/actions/index.rb +2 -1
  20. data/lib/rails_admin/config/actions/new.rb +2 -1
  21. data/lib/rails_admin/config/actions/show_in_app.rb +4 -0
  22. data/lib/rails_admin/config/fields/base.rb +2 -2
  23. data/lib/rails_admin/config/fields/factories/active_storage.rb +2 -1
  24. data/lib/rails_admin/config/fields/factories/association.rb +4 -4
  25. data/lib/rails_admin/config/fields/factories/carrierwave.rb +2 -1
  26. data/lib/rails_admin/config/fields/factories/devise.rb +2 -1
  27. data/lib/rails_admin/config/fields/factories/dragonfly.rb +2 -1
  28. data/lib/rails_admin/config/fields/factories/paperclip.rb +2 -1
  29. data/lib/rails_admin/config/fields/types/datetime.rb +2 -1
  30. data/lib/rails_admin/config.rb +14 -3
  31. data/lib/rails_admin/engine.rb +8 -9
  32. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +2 -2
  33. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +1 -1
  34. data/lib/rails_admin/version.rb +34 -1
  35. data/package.json +1 -1
  36. data/src/rails_admin/ui.js +19 -3
  37. data/vendor/assets/javascripts/rails_admin/flatpickr-with-locales.js +958 -395
  38. metadata +11 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5dbfec366d5d5bdfd29d652fb12b08631ac61984d67b770e82ccdb863e08e5c
4
- data.tar.gz: 79bad15a57aea48250afd9257354caaac639767d794c7fe0dadc893c25b34cd4
3
+ metadata.gz: e9316454f8142d78f5723f035c4dae4d4c1e43b1a4f67b9fe3382a46fac7a3a7
4
+ data.tar.gz: 42019837af600e34a153786615addcc21c1709bdffb78f96dddfd322ad54d5d6
5
5
  SHA512:
6
- metadata.gz: e152b02c903442a40d247078958dca2d762c60476e9ce374e37085b11a9419925dbaa0d6f834b3f13c38e12a4e832ab5ea437f465fc6e71f7a1fa206efec28a6
7
- data.tar.gz: 5abb152ffd68f269badf7805e08e328a68b97efbc40030736ebaf45b1fe81de3005694004e3d7526fdd4139ee4beaf66154013b2bee71b3ca8e8402be7f9e17f
6
+ metadata.gz: 57095a84c563d2b37d54a03ec88a412b32438c7ff0653075380fe86669c9d19206219b896d3827f931f1a1f98434e98b9209ec2fb2a5735f98410fff758cf6a8
7
+ data.tar.gz: 2d3f9afaaef4ebe8a69793ba8e4da469ee5ea91e1821aa2d82f91884165354a79d0b8b5b08d0988f04584eef4f0aebff985006043ace64e8814c434789f65ffb
data/README.md CHANGED
@@ -1,17 +1,15 @@
1
1
  # RailsAdmin
2
2
 
3
3
  [![Gem Version](https://img.shields.io/gem/v/rails_admin.svg)][gem]
4
- [![Build Status](https://img.shields.io/github/workflow/status/sferik/rails_admin/Test)][ghactions]
5
- [![Coverage Status](https://img.shields.io/coveralls/sferik/rails_admin.svg)][coveralls]
6
- [![Inline docs](http://inch-ci.org/github/sferik/rails_admin.svg)][inch]
7
- [![Code Climate](https://codeclimate.com/github/sferik/rails_admin.svg)][codeclimate]
4
+ [![Build Status](https://img.shields.io/github/workflow/status/railsadminteam/rails_admin/Test)][ghactions]
5
+ [![Coverage Status](https://img.shields.io/coveralls/railsadminteam/rails_admin.svg)][coveralls]
6
+ [![Code Climate](https://codeclimate.com/github/railsadminteam/rails_admin.svg)][codeclimate]
8
7
  [![SemVer](https://api.dependabot.com/badges/compatibility_score?dependency-name=rails_admin&package-manager=bundler&version-scheme=semver)][semver]
9
8
 
10
9
  [gem]: https://rubygems.org/gems/rails_admin
11
10
  [ghactions]: https://github.com/railsadminteam/rails_admin/actions
12
- [coveralls]: https://coveralls.io/r/sferik/rails_admin
13
- [inch]: http://inch-ci.org/github/sferik/rails_admin
14
- [codeclimate]: https://codeclimate.com/github/sferik/rails_admin
11
+ [coveralls]: https://coveralls.io/r/railsadminteam/rails_admin
12
+ [codeclimate]: https://codeclimate.com/github/railsadminteam/rails_admin
15
13
  [semver]: https://dependabot.com/compatibility-score.html?dependency-name=rails_admin&package-manager=bundler&version-scheme=semver
16
14
 
17
15
  RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data.
@@ -47,7 +45,7 @@ RailsAdmin is a Rails engine that provides an easy-to-use interface for managing
47
45
 
48
46
  ## Installation
49
47
 
50
- 1. On your gemfile: `gem 'rails_admin', ['>= 3.0.0.rc', '< 4']`
48
+ 1. On your gemfile: `gem 'rails_admin', ['>= 3.0.0.rc4', '< 4']`
51
49
  2. Run `bundle install`
52
50
  3. Run `rails g rails_admin:install`
53
51
  4. Provide a namespace for the routes when asked
@@ -13,9 +13,8 @@ module RailsAdmin
13
13
 
14
14
  def list_entries(model_config = @model_config, auth_scope_key = :index, additional_scope = get_association_scope_from_params, pagination = !(params[:associated_collection] || params[:all] || params[:bulk_ids]))
15
15
  scope = model_config.scope
16
- if auth_scope = @authorization_adapter&.query(auth_scope_key, model_config.abstract_model)
17
- scope = scope.merge(auth_scope)
18
- end
16
+ auth_scope = @authorization_adapter&.query(auth_scope_key, model_config.abstract_model)
17
+ scope = scope.merge(auth_scope) if auth_scope
19
18
  scope = scope.instance_eval(&additional_scope) if additional_scope
20
19
  get_collection(model_config, scope, pagination)
21
20
  end
@@ -20,17 +20,24 @@ module RailsAdmin
20
20
  end
21
21
 
22
22
  def edit_user_link
23
- return nil unless _current_user.respond_to?(:email)
24
- return nil unless abstract_model = RailsAdmin.config(_current_user.class).abstract_model
25
-
26
- content = [
27
- RailsAdmin::Config.show_gravatar && _current_user.email.present? && image_tag("#{request.ssl? ? 'https://secure' : 'http://www'}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", alt: ''),
28
- content_tag(:span, _current_user.email),
29
- ].compact.join.html_safe
30
- if (edit_action = RailsAdmin::Config::Actions.find(:edit, controller: controller, abstract_model: abstract_model, object: _current_user)).try(:authorized?)
31
- link_to content, rails_admin.url_for(action: edit_action.action_name, model_name: abstract_model.to_param, id: _current_user.id, controller: 'rails_admin/main'), class: 'nav-link'
23
+ return nil unless _current_user.try(:email).present?
24
+ return nil unless (abstract_model = RailsAdmin.config(_current_user.class).abstract_model)
25
+
26
+ edit_action = action(:edit, abstract_model, _current_user)
27
+ authorized = edit_action.try(:authorized?)
28
+ content = edit_user_link_label
29
+
30
+ if authorized
31
+ edit_url = rails_admin.url_for(
32
+ action_name: edit_action.action_name,
33
+ model_name: abstract_model.to_param,
34
+ controller: 'rails_admin/main',
35
+ id: _current_user.id,
36
+ )
37
+
38
+ link_to content, edit_url, class: 'nav-link'
32
39
  else
33
- content_tag :span, content
40
+ content_tag :span, content, class: 'nav-link'
34
41
  end
35
42
  end
36
43
 
@@ -162,7 +169,7 @@ module RailsAdmin
162
169
  else
163
170
  'javascript:void(0)'
164
171
  end
165
- content_tag(:a, label, {href: href, target: action.link_target, class: ['nav-link', current_action?(action) && 'active', !action.enabled? && 'disabled'].compact})
172
+ content_tag(:a, label, {href: href, target: action.link_target, class: ['nav-link', current_action?(action) && 'active', !action.enabled? && 'disabled'].compact}.merge(action.turbo? ? {} : {data: {turbo: 'false'}}))
166
173
  else
167
174
  content_tag(:span, label)
168
175
  end
@@ -206,5 +213,20 @@ module RailsAdmin
206
213
  end
207
214
  raise e
208
215
  end
216
+
217
+ private
218
+
219
+ def edit_user_link_label
220
+ [
221
+ RailsAdmin::Config.show_gravatar &&
222
+ image_tag(gravatar_url(_current_user.email), alt: ''),
223
+
224
+ content_tag(:span, _current_user.email),
225
+ ].filter(&:present?).join.html_safe
226
+ end
227
+
228
+ def gravatar_url(email)
229
+ "https://secure.gravatar.com/avatar/#{Digest::MD5.hexdigest email}?s=30"
230
+ end
209
231
  end
210
232
  end
@@ -5,13 +5,16 @@
5
5
  <%= csrf_meta_tag %>
6
6
  <% case RailsAdmin::config.asset_source
7
7
  when :webpacker %>
8
- <%= stylesheet_pack_tag "rails_admin" %>
9
- <%= javascript_pack_tag "rails_admin", async: true %>
10
- <% when :webpack, :sprockets %>
8
+ <%= stylesheet_pack_tag "rails_admin", data: {'turbo-track': 'reload'} %>
9
+ <%= javascript_pack_tag "rails_admin", async: true, data: {'turbo-track': 'reload'} %>
10
+ <% when :sprockets %>
11
11
  <% handle_asset_dependency_error do %>
12
- <%= stylesheet_link_tag "rails_admin.css", media: :all %>
13
- <%= javascript_include_tag "rails_admin.js", async: true %>
12
+ <%= stylesheet_link_tag "rails_admin/application.css", media: :all, data: {'turbo-track': 'reload'} %>
13
+ <%= javascript_include_tag "rails_admin/application.js", async: true, data: {'turbo-track': 'reload'} %>
14
14
  <% end %>
15
+ <% when :webpack %>
16
+ <%= stylesheet_link_tag "rails_admin.css", media: :all, data: {'turbo-track': 'reload'} %>
17
+ <%= javascript_include_tag "rails_admin.js", async: true, data: {'turbo-track': 'reload'} %>
15
18
  <% else
16
19
  raise "Unknown asset_source: #{RailsAdmin::config.asset_source}"
17
20
  end %>
@@ -1,7 +1,7 @@
1
1
  <ul class="navbar-nav ms-auto root_links">
2
2
  <% actions(:root).select(&:show_in_navigation).each do |action| %>
3
3
  <li class="nav-item <%= action.action_name %>_root_link">
4
- <%= link_to wording_for(:menu, action), { action: action.action_name, controller: 'rails_admin/main' }, class: ['nav-link'] %>
4
+ <%= link_to wording_for(:menu, action), { action: action.action_name, controller: 'rails_admin/main' }, {class: ['nav-link']}.merge(action.turbo? ? {} : {data: {turbo: 'false'}}) %>
5
5
  </li>
6
6
  <% end %>
7
7
  <% if main_app_root_path = (main_app.root_path rescue false) %>
@@ -17,7 +17,7 @@
17
17
  <% end %>
18
18
  <% if logout_path.present? %>
19
19
  <li class="nav-item">
20
- <%= link_to t('admin.misc.log_out'), logout_path, method: logout_method, class: 'nav-link label label-danger' %>
20
+ <%= link_to t('admin.misc.log_out'), logout_path, method: logout_method, class: 'nav-link label label-danger', data: {turbo: 'false'} %>
21
21
  </li>
22
22
  <% end %>
23
23
  <% end %>
@@ -14,7 +14,7 @@
14
14
  <%= render "layouts/rails_admin/sidebar_navigation" %>
15
15
  </div>
16
16
  <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2">
17
- <div class="container">
17
+ <div class="container-fluid">
18
18
  <%= render template: 'layouts/rails_admin/content' %>
19
19
  </div>
20
20
  </div>
@@ -1,6 +1,6 @@
1
1
  <% params = request.params.except(:action, :controller, :utf8, :page, :per_page, :format, :authenticity_token) %>
2
2
  <% visible_fields = @model_config.export.with(view: self, object: @abstract_model.model.new, controller: self.controller).visible_fields %>
3
- <%= form_tag export_path(params.merge(all: true)), method: 'post', class: "main" do %>
3
+ <%= form_tag export_path(params.merge(all: true)), method: 'post', class: "main", data: {turbo: false} do %>
4
4
  <input name="send_data" type="hidden" value="true" />
5
5
  <fieldset id="fields_to_export" class="mb-3">
6
6
  <legend>
@@ -96,8 +96,8 @@
96
96
  <ul class="nav nav-tabs" id="scope_selector">
97
97
  <% @model_config.list.scopes.each_with_index do |scope, index| %>
98
98
  <% scope = '_all' if scope.nil? %>
99
- <li class="<%= 'active' if scope.to_s == params[:scope] || (params[:scope].blank? && index == 0) %>">
100
- <a href="<%= index_path(params.merge(scope: scope, page: nil)) %>">
99
+ <li class="nav-item">
100
+ <a href="<%= index_path(params.merge(scope: scope, page: nil)) %>" class="nav-link <%= 'active' if scope.to_s == params[:scope] || (params[:scope].blank? && index == 0) %>">
101
101
  <%= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize)) %>
102
102
  </a>
103
103
  </li>
@@ -10,16 +10,18 @@
10
10
  <%= fieldset.help %>
11
11
  </p>
12
12
  <% end %>
13
- <dl>
13
+ <div class="list-group">
14
14
  <% fields.each_with_index do |field, index| %>
15
- <dt>
16
- <span class="<%= field.type_css_class %> <%= field.css_class %> label label-info">
17
- <%= field.label %>
18
- </span>
19
- </dt>
20
- <dd class="well">
21
- <%= field.pretty_value %>
22
- </dd>
15
+ <div class="list-group-item border-0 <%= field.type_css_class %> <%= field.css_class %>">
16
+ <div class="card">
17
+ <h5 class="card-header bg-light">
18
+ <%= field.label %>
19
+ </h5>
20
+ <div class="card-body">
21
+ <%= field.pretty_value %>
22
+ </div>
23
+ </div>
24
+ </div>
23
25
  <% end %>
24
26
  </dl>
25
27
  </div>
@@ -8,12 +8,16 @@ module RailsAdmin
8
8
  include Generators::Utils::InstanceMethods
9
9
 
10
10
  argument :_namespace, type: :string, required: false, desc: 'RailsAdmin url namespace'
11
- class_option :asset, type: :string, required: false, default: nil, desc: 'Asset delivery method [options: webpack, webpacker, sprockets]'
11
+ class_option :asset, type: :string, required: false, default: nil, desc: 'Asset delivery method [options: webpacker, sprockets]'
12
12
  desc 'RailsAdmin installation generator'
13
13
 
14
14
  def install
15
- namespace = ask_for('Where do you want to mount rails_admin?', 'admin', _namespace)
16
- route("mount RailsAdmin::Engine => '/#{namespace}', as: 'rails_admin'")
15
+ if File.read(File.join(destination_root, 'config/routes.rb')).include?('mount RailsAdmin::Engine')
16
+ display "Skipped route addition, since it's already there"
17
+ else
18
+ namespace = ask_for('Where do you want to mount rails_admin?', 'admin', _namespace)
19
+ route("mount RailsAdmin::Engine => '/#{namespace}', as: 'rails_admin'")
20
+ end
17
21
  if File.exist? File.join(destination_root, 'config/initializers/rails_admin.rb')
18
22
  insert_into_file 'config/initializers/rails_admin.rb', " config.asset_source = :#{asset}\n", after: "RailsAdmin.config do |config|\n"
19
23
  else
@@ -35,9 +39,7 @@ module RailsAdmin
35
39
  def asset
36
40
  return options['asset'] if options['asset']
37
41
 
38
- if Rails.root.join('webpack.config.js').exist?
39
- 'webpack'
40
- elsif defined?(Webpacker)
42
+ if defined?(Webpacker)
41
43
  'webpacker'
42
44
  else
43
45
  'sprockets'
@@ -19,7 +19,7 @@ module RailsAdmin
19
19
  def new(m)
20
20
  m = m.constantize unless m.is_a?(Class)
21
21
  (am = old_new(m)).model && am.adapter ? am : nil
22
- rescue *([LoadError, NameError] + (defined?(ActiveRecord) ? ['ActiveRecord::NoDatabaseError'.constantize] : []))
22
+ rescue *([LoadError, NameError] + (defined?(ActiveRecord) ? ['ActiveRecord::NoDatabaseError'.constantize, 'ActiveRecord::ConnectionNotEstablished'.constantize] : []))
23
23
  puts "[RailsAdmin] Could not load model #{m}, assuming model is non existing. (#{$ERROR_INFO})" unless Rails.env.test?
24
24
  nil
25
25
  end
@@ -86,9 +86,8 @@ module RailsAdmin
86
86
  associations.each do |association|
87
87
  case association.type
88
88
  when :has_one
89
- if child = object.send(association.name)
90
- yield(association, [child])
91
- end
89
+ child = object.send(association.name)
90
+ yield(association, [child]) if child
92
91
  when :has_many
93
92
  children = object.send(association.name)
94
93
  yield(association, Array.new(children))
@@ -13,7 +13,8 @@ module RailsAdmin
13
13
  end
14
14
 
15
15
  def get(id, scope = scoped)
16
- return unless object = scope.where(primary_key => id).first
16
+ object = scope.where(primary_key => id).first
17
+ return unless object
17
18
 
18
19
  object.extend(ObjectExtension)
19
20
  end
@@ -52,10 +52,10 @@ module RailsAdmin
52
52
  scope
53
53
  rescue NoMethodError => e
54
54
  if /page/.match?(e.message)
55
- e = e.exception <<-EOM.gsub(/^\s{12}/, '')
55
+ e = e.exception <<-ERROR.gsub(/^\s{12}/, '')
56
56
  #{e.message}
57
57
  If you don't have kaminari-mongoid installed, add `gem 'kaminari-mongoid'` to your Gemfile.
58
- EOM
58
+ ERROR
59
59
  end
60
60
  raise e
61
61
  end
@@ -78,6 +78,11 @@ module RailsAdmin
78
78
  nil
79
79
  end
80
80
 
81
+ # Determines whether to navigate via Turbo Drive or not
82
+ register_instance_option :turbo? do
83
+ true
84
+ end
85
+
81
86
  # This block is evaluated in the context of the controller when action is called
82
87
  # You can access:
83
88
  # - @objects if you're on a model scope
@@ -14,7 +14,8 @@ module RailsAdmin
14
14
 
15
15
  register_instance_option :controller do
16
16
  proc do
17
- if format = params[:json] && :json || params[:csv] && :csv || params[:xml] && :xml
17
+ format = params[:json] && :json || params[:csv] && :csv || params[:xml] && :xml
18
+ if format
18
19
  request.format = format
19
20
  @schema = HashHelper.symbolize(params[:schema].slice(:except, :include, :methods, :only).permit!.to_h) if params[:schema] # to_json and to_xml expect symbols for keys AND values.
20
21
  @objects = list_entries(@model_config, :export)
@@ -20,7 +20,8 @@ module RailsAdmin
20
20
 
21
21
  register_instance_option :breadcrumb_parent do
22
22
  parent_model = bindings[:abstract_model].try(:config).try(:parent)
23
- if am = parent_model && RailsAdmin.config(parent_model).try(:abstract_model)
23
+ am = parent_model && RailsAdmin.config(parent_model).try(:abstract_model)
24
+ if am
24
25
  [:index, am]
25
26
  else
26
27
  [:dashboard]
@@ -21,7 +21,8 @@ module RailsAdmin
21
21
  @authorization_adapter&.attributes_for(:new, @abstract_model)&.each do |name, value|
22
22
  @object.send("#{name}=", value)
23
23
  end
24
- if object_params = params[@abstract_model.param_key]
24
+ object_params = params[@abstract_model.param_key]
25
+ if object_params
25
26
  sanitize_params_for!(request.xhr? ? :modal : :create)
26
27
  @object.assign_attributes(@object.attributes.merge(object_params.to_h))
27
28
  end
@@ -25,6 +25,10 @@ module RailsAdmin
25
25
  register_instance_option :link_icon do
26
26
  'fas fa-eye'
27
27
  end
28
+
29
+ register_instance_option :turbo? do
30
+ false
31
+ end
28
32
  end
29
33
  end
30
34
  end
@@ -301,14 +301,14 @@ module RailsAdmin
301
301
  def value
302
302
  bindings[:object].safe_send(name)
303
303
  rescue NoMethodError => e
304
- raise e.exception <<-EOM.gsub(/^\s{10}/, '')
304
+ raise e.exception <<-ERROR.gsub(/^\s{10}/, '')
305
305
  #{e.message}
306
306
  If you want to use a RailsAdmin virtual field(= a field without corresponding instance method),
307
307
  you should declare 'formatted_value' in the field definition.
308
308
  field :#{name} do
309
309
  formatted_value{ bindings[:object].call_some_method }
310
310
  end
311
- EOM
311
+ ERROR
312
312
  end
313
313
 
314
314
  # Reader for nested attributes
@@ -16,7 +16,8 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
16
16
  ["#{name}_attachment".to_sym, "#{name}_blob".to_sym]
17
17
  end
18
18
  children_fields = associations.map do |child_name|
19
- next unless child_association = parent.abstract_model.associations.detect { |p| p.name.to_sym == child_name }
19
+ child_association = parent.abstract_model.associations.detect { |p| p.name.to_sym == child_name }
20
+ next unless child_association
20
21
 
21
22
  child_field = fields.detect { |f| f.name == child_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_association, fields)
22
23
  child_field.hide unless field == child_field
@@ -3,7 +3,8 @@ 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.detect { |a| a.foreign_key == properties.name && %i[belongs_to has_and_belongs_to_many].include?(a.type) }
6
+ association = parent.abstract_model.associations.detect { |a| a.foreign_key == properties.name && %i[belongs_to has_and_belongs_to_many].include?(a.type) }
7
+ if association
7
8
  field = RailsAdmin::Config::Fields::Types.load("#{association.polymorphic? ? :polymorphic : association.type}_association").new(parent, association.name, association)
8
9
  fields << field
9
10
 
@@ -15,9 +16,8 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
15
16
  end.collect { |k| association.send(k) }.compact
16
17
 
17
18
  parent.abstract_model.properties.select { |p| possible_field_names.include? p.name }.each do |column|
18
- unless child_field = fields.detect { |f| f.name.to_s == column.name.to_s }
19
- child_field = RailsAdmin::Config::Fields.default_factory.call(parent, column, fields)
20
- end
19
+ child_field = fields.detect { |f| f.name.to_s == column.name.to_s }
20
+ child_field ||= RailsAdmin::Config::Fields.default_factory.call(parent, column, fields)
21
21
  child_columns << child_field
22
22
  end
23
23
 
@@ -12,7 +12,8 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
12
12
  fields << field
13
13
  children_fields = []
14
14
  columns.each do |children_column_name|
15
- next unless child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
15
+ child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
16
+ next unless child_properties
16
17
 
17
18
  children_field = fields.detect { |f| f.name == children_column_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
18
19
  children_field.hide unless field == children_field
@@ -12,7 +12,8 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
12
12
  properties = parent.abstract_model.properties.detect { |p| ext == p.name }
13
13
  next unless properties
14
14
 
15
- unless field = fields.detect { |f| f.name == ext }
15
+ field = fields.detect { |f| f.name == ext }
16
+ unless field
16
17
  RailsAdmin::Config::Fields.default_factory.call(parent, properties, fields)
17
18
  field = fields.last
18
19
  end
@@ -9,7 +9,8 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
9
9
  children_fields = []
10
10
  extensions.each do |ext|
11
11
  children_column_name = "#{attachment_name}_#{ext}".to_sym
12
- next unless child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
12
+ child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
13
+ next unless child_properties
13
14
 
14
15
  children_field = fields.detect { |f| f.name == children_column_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
15
16
  children_field.hide
@@ -10,7 +10,8 @@ RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
10
10
  children_fields = []
11
11
  extensions.each do |ext|
12
12
  children_column_name = "#{attachment_name}_#{ext}".to_sym
13
- next unless child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
13
+ child_properties = parent.abstract_model.properties.detect { |p| p.name.to_s == children_column_name.to_s }
14
+ next unless child_properties
14
15
 
15
16
  children_field = fields.detect { |f| f.name == children_column_name } || RailsAdmin::Config::Fields.default_factory.call(parent, child_properties, fields)
16
17
  children_field.hide
@@ -58,7 +58,8 @@ module RailsAdmin
58
58
  end
59
59
 
60
60
  register_instance_option :formatted_value do
61
- if time = (value || default_value)
61
+ time = (value || default_value)
62
+ if time
62
63
  ::I18n.l(time, format: strftime_format)
63
64
  else
64
65
  ''.html_safe
@@ -39,7 +39,7 @@ module RailsAdmin
39
39
  attr_accessor :included_models
40
40
 
41
41
  # Fields to be hidden in show, create and update views
42
- attr_accessor :default_hidden_fields
42
+ attr_reader :default_hidden_fields
43
43
 
44
44
  # Default items per page value used if a model level option has not
45
45
  # been configured
@@ -81,7 +81,7 @@ module RailsAdmin
81
81
  attr_accessor :navigation_static_label
82
82
 
83
83
  # Set where RailsAdmin fetches JS/CSS from, defaults to :sprockets
84
- attr_accessor :asset_source
84
+ attr_writer :asset_source
85
85
 
86
86
  # Finish initialization by executing deferred configuration blocks
87
87
  def initialize!
@@ -257,6 +257,17 @@ module RailsAdmin
257
257
  @registry[key]
258
258
  end
259
259
 
260
+ def asset_source
261
+ @asset_source ||=
262
+ begin
263
+ warn <<-MSG.gsub(/^ +/, '').freeze
264
+ [Warning] After upgrading RailsAdmin to 3.x you haven't set asset_source yet, using :sprockets as the default.
265
+ To suppress this message, run 'rails rails_admin:install' to setup the asset delivery method suitable to you.
266
+ MSG
267
+ :sprockets
268
+ end
269
+ end
270
+
260
271
  def default_hidden_fields=(fields)
261
272
  if fields.is_a?(Array)
262
273
  @default_hidden_fields = {}
@@ -326,7 +337,7 @@ module RailsAdmin
326
337
  @show_gravatar = true
327
338
  @navigation_static_links = {}
328
339
  @navigation_static_label = nil
329
- @asset_source = (defined?(Webpacker) ? :webpacker : :sprockets)
340
+ @asset_source = nil
330
341
  @parent_controller = '::ActionController::Base'
331
342
  @forgery_protection_settings = {with: :exception}
332
343
  RailsAdmin::Config::Actions.reset
@@ -2,6 +2,7 @@ require 'kaminari'
2
2
  require 'nested_form'
3
3
  require 'rails'
4
4
  require 'rails_admin'
5
+ require 'rails_admin/version'
5
6
  require 'turbo-rails'
6
7
 
7
8
  module RailsAdmin
@@ -11,10 +12,10 @@ module RailsAdmin
11
12
  config.action_dispatch.rescue_responses['RailsAdmin::ActionNotAllowed'] = :forbidden
12
13
 
13
14
  initializer 'RailsAdmin precompile hook', group: :all do |app|
14
- if app.config.respond_to?(:assets)
15
+ if defined?(Sprockets)
15
16
  app.config.assets.precompile += %w[
16
- rails_admin.js
17
- rails_admin.css
17
+ rails_admin/application.js
18
+ rails_admin/application.css
18
19
  ]
19
20
  app.config.assets.paths << RailsAdmin::Engine.root.join('src')
20
21
  require 'rails_admin/support/esmodule_preprocessor'
@@ -42,10 +43,6 @@ module RailsAdmin
42
43
  end
43
44
  end
44
45
 
45
- rake_tasks do
46
- Dir[File.join(File.dirname(__FILE__), '../tasks/*.rake')].each { |f| load f }
47
- end
48
-
49
46
  # Check for required middlewares, users may forget to use them in Rails API mode
50
47
  config.after_initialize do |app|
51
48
  has_session_store = app.config.middleware.to_a.any? do |m|
@@ -59,20 +56,22 @@ module RailsAdmin
59
56
  unless missing.empty? && has_session_store
60
57
  configs = missing.map { |m| "config.middleware.use #{m}" }
61
58
  configs << "config.middleware.use #{app.config.session_store.try(:name) || 'ActionDispatch::Session::CookieStore'}, #{app.config.session_options}" unless has_session_store
62
- raise <<~EOM
59
+ raise <<~ERROR
63
60
  Required middlewares for RailsAdmin are not added
64
61
  To fix this, add
65
62
 
66
63
  #{configs.join("\n ")}
67
64
 
68
65
  to config/application.rb.
69
- EOM
66
+ ERROR
70
67
  end
71
68
 
72
69
  RailsAdmin::Config.initialize!
73
70
 
74
71
  # Force route reload, since it doesn't reflect RailsAdmin action configuration yet
75
72
  app.reload_routes!
73
+
74
+ RailsAdmin::Version.warn_with_js_version
76
75
  end
77
76
  end
78
77
  end
@@ -49,7 +49,7 @@ module RailsAdmin
49
49
  created_at: :created_at,
50
50
  message: :event,
51
51
  }.freeze
52
- E_VERSION_MODEL_NOT_SET = <<-EOS.strip_heredoc.freeze
52
+ E_VERSION_MODEL_NOT_SET = <<-ERROR.strip_heredoc.freeze
53
53
  Please set up PaperTrail's version model explicitly.
54
54
 
55
55
  config.audit_with :paper_trail, 'User', 'PaperTrail::Version'
@@ -58,7 +58,7 @@ module RailsAdmin
58
58
  (https://github.com/paper-trail-gem/paper_trail#6a-custom-version-classes)
59
59
  that configuration will take precedence over what you specify in
60
60
  `audit_with`.
61
- EOS
61
+ ERROR
62
62
 
63
63
  def self.setup
64
64
  raise 'PaperTrail not found' unless defined?(::PaperTrail)
@@ -7,7 +7,7 @@ module RailsAdmin
7
7
  class AuthorizationAdapter
8
8
  # This method is called first time only and used for setup
9
9
  def self.setup
10
- RailsAdmin::Extensions::ControllerExtension.include ::Pundit
10
+ RailsAdmin::Extensions::ControllerExtension.include defined?(::Pundit::Authorization) ? ::Pundit::Authorization : ::Pundit
11
11
  end
12
12
 
13
13
  # See the +authorize_with+ config method for where the initialization happens.