rails_admin 3.1.2 → 3.3.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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +20 -15
  3. data/README.md +2 -2
  4. data/app/assets/javascripts/rails_admin/application.js.erb +3 -2
  5. data/app/assets/stylesheets/rails_admin/application.scss.erb +1 -1
  6. data/app/controllers/rails_admin/main_controller.rb +5 -1
  7. data/app/helpers/rails_admin/application_helper.rb +4 -0
  8. data/app/helpers/rails_admin/form_builder.rb +2 -2
  9. data/app/helpers/rails_admin/main_helper.rb +1 -1
  10. data/app/views/layouts/rails_admin/_head.html.erb +10 -7
  11. data/app/views/rails_admin/main/_form_boolean.html.erb +2 -2
  12. data/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +5 -35
  13. data/app/views/rails_admin/main/_form_filtering_select.html.erb +6 -18
  14. data/app/views/rails_admin/main/_form_nested_many.html.erb +1 -1
  15. data/app/views/rails_admin/main/_form_nested_one.html.erb +1 -1
  16. data/app/views/rails_admin/main/_form_polymorphic_association.html.erb +12 -21
  17. data/app/views/rails_admin/main/delete.html.erb +1 -1
  18. data/app/views/rails_admin/main/index.html.erb +2 -2
  19. data/config/initializers/active_record_extensions.rb +0 -23
  20. data/lib/generators/rails_admin/importmap_formatter.rb +1 -1
  21. data/lib/generators/rails_admin/install_generator.rb +13 -1
  22. data/lib/generators/rails_admin/templates/rails_admin.vite.js +2 -0
  23. data/lib/rails_admin/abstract_model.rb +18 -7
  24. data/lib/rails_admin/adapters/active_record/association.rb +27 -10
  25. data/lib/rails_admin/adapters/active_record/object_extension.rb +0 -18
  26. data/lib/rails_admin/adapters/active_record.rb +52 -5
  27. data/lib/rails_admin/adapters/active_record.rb.bak +348 -0
  28. data/lib/rails_admin/adapters/mongoid/association.rb +3 -3
  29. data/lib/rails_admin/adapters/mongoid/bson.rb +1 -0
  30. data/lib/rails_admin/adapters/mongoid/object_extension.rb +0 -5
  31. data/lib/rails_admin/adapters/mongoid.rb +8 -3
  32. data/lib/rails_admin/config/actions/index.rb +5 -3
  33. data/lib/rails_admin/config/fields/association.rb +41 -2
  34. data/lib/rails_admin/config/fields/base.rb +5 -5
  35. data/lib/rails_admin/config/fields/collection_association.rb +90 -0
  36. data/lib/rails_admin/config/fields/factories/active_storage.rb +2 -2
  37. data/lib/rails_admin/config/fields/factories/carrierwave.rb +1 -1
  38. data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
  39. data/lib/rails_admin/config/fields/factories/paperclip.rb +1 -1
  40. data/lib/rails_admin/config/fields/factories/shrine.rb +1 -1
  41. data/lib/rails_admin/config/fields/singular_association.rb +59 -0
  42. data/lib/rails_admin/config/fields/types/active_storage.rb +12 -7
  43. data/lib/rails_admin/config/fields/types/all.rb +0 -1
  44. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +17 -20
  45. data/lib/rails_admin/config/fields/types/dragonfly.rb +0 -1
  46. data/lib/rails_admin/config/fields/types/file_upload.rb +7 -1
  47. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +2 -2
  48. data/lib/rails_admin/config/fields/types/has_many_association.rb +2 -24
  49. data/lib/rails_admin/config/fields/types/has_one_association.rb +12 -22
  50. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +13 -8
  51. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +7 -1
  52. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +32 -9
  53. data/lib/rails_admin/config.rb +5 -0
  54. data/lib/rails_admin/engine.rb +5 -0
  55. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +1 -1
  56. data/lib/rails_admin/extensions/url_for_extension.rb +15 -0
  57. data/lib/rails_admin/support/composite_keys_serializer.rb +15 -0
  58. data/lib/rails_admin/support/datetime.rb +1 -0
  59. data/lib/rails_admin/version.rb +2 -2
  60. data/package.json +2 -2
  61. data/src/rails_admin/abstract-select.js +30 -0
  62. data/src/rails_admin/base.js +4 -1
  63. data/src/rails_admin/filtering-multiselect.js +2 -4
  64. data/src/rails_admin/filtering-select.js +2 -4
  65. metadata +41 -16
  66. data/lib/rails_admin/adapters/composite_primary_keys/association.rb +0 -45
  67. data/lib/rails_admin/adapters/composite_primary_keys.rb +0 -40
  68. data/lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb +0 -31
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAdmin
4
+ module Extensions
5
+ module UrlForExtension
6
+ def url_for(options, *args)
7
+ case options[:id]
8
+ when Array
9
+ options[:id] = RailsAdmin.config.composite_keys_serializer.serialize(options[:id])
10
+ end
11
+ super options, *args
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAdmin
4
+ module Support
5
+ module CompositeKeysSerializer
6
+ def self.serialize(keys)
7
+ keys.map { |key| key&.to_s&.gsub('_', '__') }.join('_')
8
+ end
9
+
10
+ def self.deserialize(string)
11
+ string.split('_').map { |key| key&.gsub('__', '_') }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -21,6 +21,7 @@ module RailsAdmin
21
21
  '%-I' => 'h', # Hour of the day, 12-hour clock (1..12)
22
22
  '%k' => 'H', # Hour of the day, 24-hour clock (0..23)
23
23
  '%l' => 'h', # Hour of the day, 12-hour clock (1..12)
24
+ '%-l' => 'h', # Hour of the day, 12-hour clock (1..12)
24
25
  '%M' => 'i', # Minute of the hour (00..59)
25
26
  '%-M' => 'i', # Minute of the hour (00..59)
26
27
  '%m' => 'm', # Month of the year (01..12)
@@ -3,8 +3,8 @@
3
3
  module RailsAdmin
4
4
  class Version
5
5
  MAJOR = 3
6
- MINOR = 1
7
- PATCH = 2
6
+ MINOR = 3
7
+ PATCH = 0
8
8
  PRE = nil
9
9
 
10
10
  class << self
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_admin",
3
- "version": "3.1.2",
3
+ "version": "3.3.0",
4
4
  "description": "RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data.",
5
5
  "homepage": "https://github.com/railsadminteam/rails_admin",
6
6
  "license": "MIT",
@@ -22,7 +22,7 @@
22
22
  "bootstrap": "^5.1.3",
23
23
  "flatpickr": "^4.6.9",
24
24
  "jquery": "^3.6.0",
25
- "jquery-ui": "^1.12.1"
25
+ "jquery-ui": "^1.12.1 <1.14.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "prettier": "^2.4.1"
@@ -0,0 +1,30 @@
1
+ import jQuery from "jquery";
2
+ import "jquery-ui/ui/widget.js";
3
+
4
+ (function ($) {
5
+ "use strict";
6
+
7
+ $.widget("ra.abstractSelect", {
8
+ options: {
9
+ createQuery: function (query) {
10
+ if ($.isEmptyObject(this.scopeBy)) {
11
+ return { query: query };
12
+ } else {
13
+ const filterQuery = {};
14
+ for (var field in this.scopeBy) {
15
+ const targetField = this.scopeBy[field];
16
+ const targetValue = $(`[name$="[${field}]"]`).val();
17
+ if (!filterQuery[targetField]) {
18
+ filterQuery[targetField] = [];
19
+ }
20
+ filterQuery[targetField].push(
21
+ targetValue ? { o: "is", v: targetValue } : { o: "_blank" }
22
+ );
23
+ }
24
+ return { query: query, f: filterQuery };
25
+ }
26
+ },
27
+ scopeBy: {},
28
+ },
29
+ });
30
+ })(jQuery);
@@ -17,6 +17,7 @@ import "jquery-ui/ui/widget.js";
17
17
  import "jquery-ui/ui/widgets/menu.js";
18
18
  import "jquery-ui/ui/widgets/mouse.js";
19
19
 
20
+ import "./abstract-select";
20
21
  import "./filter-box";
21
22
  import "./filtering-multiselect";
22
23
  import "./filtering-select";
@@ -26,4 +27,6 @@ import "./sidescroll";
26
27
  import "./ui";
27
28
  import "./widgets";
28
29
 
29
- Rails.start();
30
+ if (!window._rails_loaded) {
31
+ Rails.start();
32
+ }
@@ -1,13 +1,11 @@
1
1
  import jQuery from "jquery";
2
2
  import "jquery-ui/ui/widget.js";
3
3
  import I18n from "./i18n";
4
+
4
5
  (function ($) {
5
- $.widget("ra.filteringMultiselect", {
6
+ $.widget("ra.filteringMultiselect", $.ra.abstractSelect, {
6
7
  _cache: {},
7
8
  options: {
8
- createQuery: function (query) {
9
- return { query: query };
10
- },
11
9
  sortable: false,
12
10
  removable: true,
13
11
  regional: {
@@ -6,11 +6,8 @@ import I18n from "./i18n";
6
6
  (function ($) {
7
7
  "use strict";
8
8
 
9
- $.widget("ra.filteringSelect", {
9
+ $.widget("ra.filteringSelect", $.ra.abstractSelect, {
10
10
  options: {
11
- createQuery: function (query) {
12
- return { query: query };
13
- },
14
11
  minLength: 0,
15
12
  searchDelay: 200,
16
13
  remote_source: null,
@@ -300,6 +297,7 @@ import I18n from "./i18n";
300
297
  destroy: function () {
301
298
  this.input.remove();
302
299
  this.button.remove();
300
+ this.element.html($('<option value="" selected="selected"></option>'));
303
301
  this.element.show();
304
302
  this.filtering_select.remove();
305
303
  $.Widget.prototype.destroy.call(this);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.2
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Michaels-Ober
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2023-03-23 00:00:00.000000000 Z
15
+ date: 2024-12-08 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activemodel-serializers-xml
@@ -28,6 +28,20 @@ dependencies:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
30
  version: '1.0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: csv
33
+ requirement: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
31
45
  - !ruby/object:Gem::Dependency
32
46
  name: kaminari
33
47
  requirement: !ruby/object:Gem::Requirement
@@ -71,7 +85,7 @@ dependencies:
71
85
  version: '6.0'
72
86
  - - "<"
73
87
  - !ruby/object:Gem::Version
74
- version: '8'
88
+ version: '9'
75
89
  type: :runtime
76
90
  prerelease: false
77
91
  version_requirements: !ruby/object:Gem::Requirement
@@ -81,21 +95,27 @@ dependencies:
81
95
  version: '6.0'
82
96
  - - "<"
83
97
  - !ruby/object:Gem::Version
84
- version: '8'
98
+ version: '9'
85
99
  - !ruby/object:Gem::Dependency
86
100
  name: turbo-rails
87
101
  requirement: !ruby/object:Gem::Requirement
88
102
  requirements:
89
- - - "~>"
103
+ - - ">="
90
104
  - !ruby/object:Gem::Version
91
105
  version: '1.0'
106
+ - - "<"
107
+ - !ruby/object:Gem::Version
108
+ version: '3'
92
109
  type: :runtime
93
110
  prerelease: false
94
111
  version_requirements: !ruby/object:Gem::Requirement
95
112
  requirements:
96
- - - "~>"
113
+ - - ">="
97
114
  - !ruby/object:Gem::Version
98
115
  version: '1.0'
116
+ - - "<"
117
+ - !ruby/object:Gem::Version
118
+ version: '3'
99
119
  - !ruby/object:Gem::Dependency
100
120
  name: bundler
101
121
  requirement: !ruby/object:Gem::Requirement
@@ -190,16 +210,16 @@ files:
190
210
  - lib/generators/rails_admin/templates/initializer.erb
191
211
  - lib/generators/rails_admin/templates/rails_admin.js
192
212
  - lib/generators/rails_admin/templates/rails_admin.scss.erb
213
+ - lib/generators/rails_admin/templates/rails_admin.vite.js
193
214
  - lib/generators/rails_admin/templates/rails_admin.webpacker.js
194
215
  - lib/generators/rails_admin/utils.rb
195
216
  - lib/rails_admin.rb
196
217
  - lib/rails_admin/abstract_model.rb
197
218
  - lib/rails_admin/adapters/active_record.rb
219
+ - lib/rails_admin/adapters/active_record.rb.bak
198
220
  - lib/rails_admin/adapters/active_record/association.rb
199
221
  - lib/rails_admin/adapters/active_record/object_extension.rb
200
222
  - lib/rails_admin/adapters/active_record/property.rb
201
- - lib/rails_admin/adapters/composite_primary_keys.rb
202
- - lib/rails_admin/adapters/composite_primary_keys/association.rb
203
223
  - lib/rails_admin/adapters/mongoid.rb
204
224
  - lib/rails_admin/adapters/mongoid/association.rb
205
225
  - lib/rails_admin/adapters/mongoid/bson.rb
@@ -225,6 +245,7 @@ files:
225
245
  - lib/rails_admin/config/fields.rb
226
246
  - lib/rails_admin/config/fields/association.rb
227
247
  - lib/rails_admin/config/fields/base.rb
248
+ - lib/rails_admin/config/fields/collection_association.rb
228
249
  - lib/rails_admin/config/fields/factories/action_text.rb
229
250
  - lib/rails_admin/config/fields/factories/active_storage.rb
230
251
  - lib/rails_admin/config/fields/factories/association.rb
@@ -236,6 +257,7 @@ files:
236
257
  - lib/rails_admin/config/fields/factories/password.rb
237
258
  - lib/rails_admin/config/fields/factories/shrine.rb
238
259
  - lib/rails_admin/config/fields/group.rb
260
+ - lib/rails_admin/config/fields/singular_association.rb
239
261
  - lib/rails_admin/config/fields/types.rb
240
262
  - lib/rails_admin/config/fields/types/action_text.rb
241
263
  - lib/rails_admin/config/fields/types/active_record_enum.rb
@@ -249,7 +271,6 @@ files:
249
271
  - lib/rails_admin/config/fields/types/ck_editor.rb
250
272
  - lib/rails_admin/config/fields/types/code_mirror.rb
251
273
  - lib/rails_admin/config/fields/types/color.rb
252
- - lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb
253
274
  - lib/rails_admin/config/fields/types/date.rb
254
275
  - lib/rails_admin/config/fields/types/datetime.rb
255
276
  - lib/rails_admin/config/fields/types/decimal.rb
@@ -311,6 +332,8 @@ files:
311
332
  - lib/rails_admin/extensions/paper_trail/auditing_adapter.rb
312
333
  - lib/rails_admin/extensions/pundit.rb
313
334
  - lib/rails_admin/extensions/pundit/authorization_adapter.rb
335
+ - lib/rails_admin/extensions/url_for_extension.rb
336
+ - lib/rails_admin/support/composite_keys_serializer.rb
314
337
  - lib/rails_admin/support/csv_converter.rb
315
338
  - lib/rails_admin/support/datetime.rb
316
339
  - lib/rails_admin/support/es_module_processor.rb
@@ -318,6 +341,7 @@ files:
318
341
  - lib/rails_admin/version.rb
319
342
  - lib/tasks/rails_admin.rake
320
343
  - package.json
344
+ - src/rails_admin/abstract-select.js
321
345
  - src/rails_admin/base.js
322
346
  - src/rails_admin/filter-box.js
323
347
  - src/rails_admin/filtering-multiselect.js
@@ -446,12 +470,13 @@ homepage: https://github.com/railsadminteam/rails_admin
446
470
  licenses:
447
471
  - MIT
448
472
  metadata: {}
449
- post_install_message: "\n ### Upgrading RailsAdmin from 2.x.x to 3.x.x ###\n\n
450
- \ Due to introduction of Webpack/Webpacker support, some additional dependencies
451
- and configuration will be needed.\n Running `bin/rails g rails_admin:install`
452
- will suggest required changes, based on the current setup of your app.\n\n For
453
- a complete list of changes, see https://github.com/railsadminteam/rails_admin/blob/master/CHANGELOG.md\n
454
- \ "
473
+ post_install_message: |
474
+ ### Upgrading RailsAdmin from 2.x.x to 3.x.x ###
475
+
476
+ Due to introduction of Webpack/Webpacker support, some additional dependencies and configuration will be needed.
477
+ Running `bin/rails g rails_admin:install` will suggest required changes, based on the current setup of your app.
478
+
479
+ For a complete list of changes, see https://github.com/railsadminteam/rails_admin/blob/master/CHANGELOG.md
455
480
  rdoc_options: []
456
481
  require_paths:
457
482
  - lib
@@ -466,7 +491,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
466
491
  - !ruby/object:Gem::Version
467
492
  version: 1.8.11
468
493
  requirements: []
469
- rubygems_version: 3.3.7
494
+ rubygems_version: 3.4.10
470
495
  signing_key:
471
496
  specification_version: 4
472
497
  summary: Admin for Rails
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsAdmin
4
- module Adapters
5
- module CompositePrimaryKeys
6
- class Association < RailsAdmin::Adapters::ActiveRecord::Association
7
- def field_type
8
- if type == :belongs_to && association.foreign_key.is_a?(Array)
9
- :composite_keys_belongs_to_association
10
- else
11
- super
12
- end
13
- end
14
-
15
- def primary_key
16
- return nil if polymorphic?
17
-
18
- value = association.association_primary_key
19
-
20
- if value.is_a? Array
21
- :id
22
- else
23
- value.to_sym
24
- end
25
- end
26
-
27
- def foreign_key
28
- if association.foreign_key.is_a? Array
29
- association.foreign_key.map(&:to_sym)
30
- else
31
- super
32
- end
33
- end
34
-
35
- def key_accessor
36
- if type == :belongs_to && foreign_key.is_a?(Array)
37
- :"#{name}_id"
38
- else
39
- super
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_admin/adapters/active_record'
4
- require 'rails_admin/adapters/composite_primary_keys/association'
5
-
6
- module RailsAdmin
7
- module Adapters
8
- module CompositePrimaryKeys
9
- include RailsAdmin::Adapters::ActiveRecord
10
-
11
- def get(id, scope = scoped)
12
- begin
13
- object = scope.find(id)
14
- rescue ::ActiveRecord::RecordNotFound
15
- return nil
16
- end
17
-
18
- object.extend(RailsAdmin::Adapters::ActiveRecord::ObjectExtension)
19
- end
20
-
21
- def associations
22
- model.reflect_on_all_associations.collect do |association|
23
- RailsAdmin::Adapters::CompositePrimaryKeys::Association.new(association, model)
24
- end
25
- end
26
-
27
- private
28
-
29
- def bulk_scope(scope, options)
30
- if primary_key.is_a? Array
31
- options[:bulk_ids].map do |id|
32
- scope.where(primary_key.zip(::CompositePrimaryKeys::CompositeKeys.parse(id)).to_h)
33
- end.reduce(&:or)
34
- else
35
- super
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_admin/config/fields/types/belongs_to_association'
4
-
5
- module RailsAdmin
6
- module Config
7
- module Fields
8
- module Types
9
- class CompositeKeysBelongsToAssociation < RailsAdmin::Config::Fields::Types::BelongsToAssociation
10
- RailsAdmin::Config::Fields::Types.register(self)
11
-
12
- register_instance_option :allowed_methods do
13
- nested_form ? [method_name] : Array(association.foreign_key)
14
- end
15
-
16
- def selected_id
17
- association.foreign_key.map { |attribute| bindings[:object].safe_send(attribute) }.to_composite_keys.to_s
18
- end
19
-
20
- def parse_input(params)
21
- return unless params[method_name].present? && association.foreign_key.is_a?(Array) && !nested_form
22
-
23
- association.foreign_key.zip(CompositePrimaryKeys::CompositeKeys.parse(params.delete(method_name))).each do |key, value|
24
- params[key] = value
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end