rails_admin 3.1.4 → 3.2.0.rc

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +19 -14
  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 +7 -5
  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/config/initializers/active_record_extensions.rb +0 -23
  19. data/lib/generators/rails_admin/importmap_formatter.rb +1 -1
  20. data/lib/generators/rails_admin/install_generator.rb +13 -1
  21. data/lib/generators/rails_admin/templates/rails_admin.vite.js +2 -0
  22. data/lib/rails_admin/abstract_model.rb +18 -7
  23. data/lib/rails_admin/adapters/active_record/association.rb +25 -8
  24. data/lib/rails_admin/adapters/active_record/object_extension.rb +0 -18
  25. data/lib/rails_admin/adapters/active_record.rb +51 -5
  26. data/lib/rails_admin/adapters/mongoid/association.rb +1 -1
  27. data/lib/rails_admin/adapters/mongoid/object_extension.rb +0 -5
  28. data/lib/rails_admin/adapters/mongoid.rb +6 -3
  29. data/lib/rails_admin/config/actions/index.rb +5 -3
  30. data/lib/rails_admin/config/fields/association.rb +41 -2
  31. data/lib/rails_admin/config/fields/base.rb +4 -4
  32. data/lib/rails_admin/config/fields/collection_association.rb +90 -0
  33. data/lib/rails_admin/config/fields/singular_association.rb +59 -0
  34. data/lib/rails_admin/config/fields/types/active_storage.rb +12 -7
  35. data/lib/rails_admin/config/fields/types/all.rb +0 -1
  36. data/lib/rails_admin/config/fields/types/belongs_to_association.rb +17 -20
  37. data/lib/rails_admin/config/fields/types/dragonfly.rb +0 -1
  38. data/lib/rails_admin/config/fields/types/file_upload.rb +7 -1
  39. data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +2 -2
  40. data/lib/rails_admin/config/fields/types/has_many_association.rb +2 -24
  41. data/lib/rails_admin/config/fields/types/has_one_association.rb +12 -22
  42. data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +13 -8
  43. data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +7 -1
  44. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +32 -9
  45. data/lib/rails_admin/config.rb +5 -0
  46. data/lib/rails_admin/engine.rb +5 -0
  47. data/lib/rails_admin/extensions/url_for_extension.rb +15 -0
  48. data/lib/rails_admin/support/composite_keys_serializer.rb +15 -0
  49. data/lib/rails_admin/support/datetime.rb +1 -0
  50. data/lib/rails_admin/version.rb +3 -3
  51. data/package.json +2 -2
  52. data/src/rails_admin/abstract-select.js +30 -0
  53. data/src/rails_admin/base.js +4 -1
  54. data/src/rails_admin/filtering-multiselect.js +2 -4
  55. data/src/rails_admin/filtering-select.js +1 -4
  56. data/src/rails_admin/widgets.js +1 -0
  57. metadata +39 -15
  58. data/lib/rails_admin/adapters/composite_primary_keys/association.rb +0 -45
  59. data/lib/rails_admin/adapters/composite_primary_keys.rb +0 -40
  60. data/lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb +0 -31
@@ -23,19 +23,16 @@ module RailsAdmin
23
23
  end
24
24
 
25
25
  register_instance_option :image? do
26
- if value
27
- mime_type = Mime::Type.lookup_by_extension(value.filename.extension_without_delimiter)
28
- mime_type.to_s.match?(/^image/)
29
- end
26
+ value && (value.representable? || value.content_type.match?(/^image/))
30
27
  end
31
28
 
32
29
  def resource_url(thumb = false)
33
30
  return nil unless value
34
31
 
35
- if thumb && value.variable?
36
- variant = value.variant(thumb_method)
32
+ if thumb && value.representable?
33
+ representation = value.representation(thumb_method)
37
34
  Rails.application.routes.url_helpers.rails_blob_representation_path(
38
- variant.blob.signed_id, variant.variation.key, variant.blob.filename, only_path: true
35
+ representation.blob.signed_id, representation.variation.key, representation.blob.filename, only_path: true
39
36
  )
40
37
  else
41
38
  Rails.application.routes.url_helpers.rails_blob_path(value, only_path: true)
@@ -48,7 +45,7 @@ module RailsAdmin
48
45
  end
49
46
 
50
47
  register_instance_option :keep_method do
51
- method_name if ::ActiveStorage.replace_on_assign_to_many
48
+ method_name if ::ActiveStorage.gem_version >= Gem::Version.new('7.1') || ::ActiveStorage.replace_on_assign_to_many
52
49
  end
53
50
 
54
51
  register_instance_option :delete_method do
@@ -70,6 +67,14 @@ module RailsAdmin
70
67
  direct? && {data: {direct_upload_url: bindings[:view].main_app.rails_direct_uploads_url}} || {},
71
68
  )
72
69
  end
70
+
71
+ register_instance_option :searchable do
72
+ false
73
+ end
74
+
75
+ register_instance_option :sortable do
76
+ false
77
+ end
73
78
  end
74
79
  end
75
80
  end
@@ -47,13 +47,19 @@ module RailsAdmin
47
47
  end
48
48
 
49
49
  register_instance_option :image? do
50
- mime_type = Mime::Type.lookup_by_extension(resource_url.to_s.split('.').last)
50
+ mime_type = Mime::Type.lookup_by_extension(extension)
51
51
  mime_type.to_s.match?(/^image/)
52
52
  end
53
53
 
54
54
  def resource_url(_thumb = false)
55
55
  raise 'not implemented'
56
56
  end
57
+
58
+ def extension
59
+ URI.parse(resource_url).path.split('.').last
60
+ rescue URI::InvalidURIError
61
+ nil
62
+ end
57
63
  end
58
64
 
59
65
  def initialize(*args)
@@ -51,26 +51,29 @@ module RailsAdmin
51
51
  false
52
52
  end
53
53
 
54
- def associated_collection(type)
55
- return [] if type.blank?
54
+ def associated_model_config
55
+ @associated_model_config ||= association.klass.collect { |type| RailsAdmin.config(type) }.reject(&:excluded?)
56
+ end
56
57
 
57
- config = RailsAdmin.config(type)
58
- config.abstract_model.all.collect do |object|
59
- [object.send(config.object_label_method), object.id]
58
+ def collection(_scope = nil)
59
+ if value
60
+ [[formatted_value, selected_id]]
61
+ else
62
+ [[]]
60
63
  end
61
64
  end
62
65
 
63
- def associated_model_config
64
- @associated_model_config ||= association.klass.collect { |type| RailsAdmin.config(type) }.reject(&:excluded?)
66
+ def type_column
67
+ association.foreign_type.to_s
65
68
  end
66
69
 
67
- def polymorphic_type_collection
70
+ def type_collection
68
71
  associated_model_config.collect do |config|
69
72
  [config.label, config.abstract_model.model.name]
70
73
  end
71
74
  end
72
75
 
73
- def polymorphic_type_urls
76
+ def type_urls
74
77
  types = associated_model_config.collect do |config|
75
78
  [config.abstract_model.model.name, config.abstract_model.to_param]
76
79
  end
@@ -82,6 +85,26 @@ module RailsAdmin
82
85
  bindings[:object].send(association.name)
83
86
  end
84
87
 
88
+ def widget_options_for_types
89
+ type_collection.inject({}) do |options, model|
90
+ options.merge(
91
+ model.second.downcase.gsub('::', '-') => {
92
+ xhr: true,
93
+ remote_source: bindings[:view].index_path(model.second.underscore, source_object_id: bindings[:object].id, source_abstract_model: abstract_model.to_param, current_action: bindings[:view].current_action, compact: true),
94
+ float_left: false,
95
+ },
96
+ )
97
+ end
98
+ end
99
+
100
+ def widget_options
101
+ widget_options_for_types[selected_type.try(:downcase)] || {float_left: false}
102
+ end
103
+
104
+ def selected_type
105
+ bindings[:object].send(type_column)
106
+ end
107
+
85
108
  def parse_input(params)
86
109
  if (type_value = params[association.foreign_type.to_sym]).present?
87
110
  config = associated_model_config.find { |c| type_value == c.abstract_model.model.name }
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'rails_admin/config/lazy_model'
4
4
  require 'rails_admin/config/sections/list'
5
+ require 'rails_admin/support/composite_keys_serializer'
5
6
  require 'active_support/core_ext/module/attribute_accessors'
6
7
 
7
8
  module RailsAdmin
@@ -84,6 +85,9 @@ module RailsAdmin
84
85
  # Set where RailsAdmin fetches JS/CSS from, defaults to :sprockets
85
86
  attr_writer :asset_source
86
87
 
88
+ # For customization of composite keys representation
89
+ attr_accessor :composite_keys_serializer
90
+
87
91
  # Setup authentication to be run as a before filter
88
92
  # This is run inside the controller instance so you can setup any authentication you need to
89
93
  #
@@ -329,6 +333,7 @@ module RailsAdmin
329
333
  @navigation_static_links = {}
330
334
  @navigation_static_label = nil
331
335
  @asset_source = nil
336
+ @composite_keys_serializer = RailsAdmin::Support::CompositeKeysSerializer
332
337
  @parent_controller = '::ActionController::Base'
333
338
  @forgery_protection_settings = {with: :exception}
334
339
  RailsAdmin::Config::Actions.reset
@@ -4,6 +4,7 @@ require 'kaminari'
4
4
  require 'nested_form'
5
5
  require 'rails'
6
6
  require 'rails_admin'
7
+ require 'rails_admin/extensions/url_for_extension'
7
8
  require 'rails_admin/version'
8
9
  require 'turbo-rails'
9
10
 
@@ -15,6 +16,10 @@ module RailsAdmin
15
16
 
16
17
  config.action_dispatch.rescue_responses['RailsAdmin::ActionNotAllowed'] = :forbidden
17
18
 
19
+ initializer 'RailsAdmin load UrlForExtension' do
20
+ RailsAdmin::Engine.routes.singleton_class.prepend(RailsAdmin::Extensions::UrlForExtension)
21
+ end
22
+
18
23
  initializer 'RailsAdmin reload config in development' do |app|
19
24
  config.initializer_path = app.root.join('config/initializers/rails_admin.rb')
20
25
 
@@ -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,9 +3,9 @@
3
3
  module RailsAdmin
4
4
  class Version
5
5
  MAJOR = 3
6
- MINOR = 1
7
- PATCH = 4
8
- PRE = nil
6
+ MINOR = 2
7
+ PATCH = 0
8
+ PRE = 'rc'
9
9
 
10
10
  class << self
11
11
  # @return [String]
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_admin",
3
- "version": "3.1.4",
3
+ "version": "3.2.0-rc",
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,
@@ -258,6 +258,7 @@ import I18n from "./i18n";
258
258
  "options"
259
259
  );
260
260
  object_select.data("options", selected_data);
261
+ object_select.val("");
261
262
  object_select.filteringSelect("destroy");
262
263
  object_select.filteringSelect(selected_data);
263
264
  });
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.4
4
+ version: 3.2.0.rc
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: 2024-07-09 00:00:00.000000000 Z
15
+ date: 2024-08-25 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
@@ -86,16 +100,22 @@ dependencies:
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,6 +210,7 @@ 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
@@ -199,8 +220,6 @@ files:
199
220
  - lib/rails_admin/adapters/active_record/association.rb
200
221
  - lib/rails_admin/adapters/active_record/object_extension.rb
201
222
  - lib/rails_admin/adapters/active_record/property.rb
202
- - lib/rails_admin/adapters/composite_primary_keys.rb
203
- - lib/rails_admin/adapters/composite_primary_keys/association.rb
204
223
  - lib/rails_admin/adapters/mongoid.rb
205
224
  - lib/rails_admin/adapters/mongoid/association.rb
206
225
  - lib/rails_admin/adapters/mongoid/bson.rb
@@ -226,6 +245,7 @@ files:
226
245
  - lib/rails_admin/config/fields.rb
227
246
  - lib/rails_admin/config/fields/association.rb
228
247
  - lib/rails_admin/config/fields/base.rb
248
+ - lib/rails_admin/config/fields/collection_association.rb
229
249
  - lib/rails_admin/config/fields/factories/action_text.rb
230
250
  - lib/rails_admin/config/fields/factories/active_storage.rb
231
251
  - lib/rails_admin/config/fields/factories/association.rb
@@ -237,6 +257,7 @@ files:
237
257
  - lib/rails_admin/config/fields/factories/password.rb
238
258
  - lib/rails_admin/config/fields/factories/shrine.rb
239
259
  - lib/rails_admin/config/fields/group.rb
260
+ - lib/rails_admin/config/fields/singular_association.rb
240
261
  - lib/rails_admin/config/fields/types.rb
241
262
  - lib/rails_admin/config/fields/types/action_text.rb
242
263
  - lib/rails_admin/config/fields/types/active_record_enum.rb
@@ -250,7 +271,6 @@ files:
250
271
  - lib/rails_admin/config/fields/types/ck_editor.rb
251
272
  - lib/rails_admin/config/fields/types/code_mirror.rb
252
273
  - lib/rails_admin/config/fields/types/color.rb
253
- - lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb
254
274
  - lib/rails_admin/config/fields/types/date.rb
255
275
  - lib/rails_admin/config/fields/types/datetime.rb
256
276
  - lib/rails_admin/config/fields/types/decimal.rb
@@ -312,6 +332,8 @@ files:
312
332
  - lib/rails_admin/extensions/paper_trail/auditing_adapter.rb
313
333
  - lib/rails_admin/extensions/pundit.rb
314
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
315
337
  - lib/rails_admin/support/csv_converter.rb
316
338
  - lib/rails_admin/support/datetime.rb
317
339
  - lib/rails_admin/support/es_module_processor.rb
@@ -319,6 +341,7 @@ files:
319
341
  - lib/rails_admin/version.rb
320
342
  - lib/tasks/rails_admin.rake
321
343
  - package.json
344
+ - src/rails_admin/abstract-select.js
322
345
  - src/rails_admin/base.js
323
346
  - src/rails_admin/filter-box.js
324
347
  - src/rails_admin/filtering-multiselect.js
@@ -447,12 +470,13 @@ homepage: https://github.com/railsadminteam/rails_admin
447
470
  licenses:
448
471
  - MIT
449
472
  metadata: {}
450
- post_install_message: "\n ### Upgrading RailsAdmin from 2.x.x to 3.x.x ###\n\n
451
- \ Due to introduction of Webpack/Webpacker support, some additional dependencies
452
- and configuration will be needed.\n Running `bin/rails g rails_admin:install`
453
- will suggest required changes, based on the current setup of your app.\n\n For
454
- a complete list of changes, see https://github.com/railsadminteam/rails_admin/blob/master/CHANGELOG.md\n
455
- \ "
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
456
480
  rdoc_options: []
457
481
  require_paths:
458
482
  - lib
@@ -463,9 +487,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
463
487
  version: 2.6.0
464
488
  required_rubygems_version: !ruby/object:Gem::Requirement
465
489
  requirements:
466
- - - ">="
490
+ - - ">"
467
491
  - !ruby/object:Gem::Version
468
- version: 1.8.11
492
+ version: 1.3.1
469
493
  requirements: []
470
494
  rubygems_version: 3.4.10
471
495
  signing_key:
@@ -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