rails_admin 3.1.1 → 3.3.1
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.
- checksums.yaml +4 -4
- data/Gemfile +23 -17
- data/README.md +6 -4
- data/app/assets/javascripts/rails_admin/application.js.erb +3 -2
- data/app/assets/stylesheets/rails_admin/application.scss.erb +1 -1
- data/app/controllers/rails_admin/main_controller.rb +16 -1
- data/app/helpers/rails_admin/application_helper.rb +4 -0
- data/app/helpers/rails_admin/form_builder.rb +6 -5
- data/app/helpers/rails_admin/main_helper.rb +1 -1
- data/app/views/layouts/rails_admin/_head.html.erb +10 -7
- data/app/views/rails_admin/main/_form_boolean.html.erb +2 -2
- data/app/views/rails_admin/main/_form_filtering_multiselect.html.erb +5 -35
- data/app/views/rails_admin/main/_form_filtering_select.html.erb +6 -18
- data/app/views/rails_admin/main/_form_nested_many.html.erb +1 -1
- data/app/views/rails_admin/main/_form_nested_one.html.erb +1 -1
- data/app/views/rails_admin/main/_form_polymorphic_association.html.erb +12 -21
- data/app/views/rails_admin/main/delete.html.erb +1 -1
- data/app/views/rails_admin/main/index.html.erb +2 -2
- data/config/initializers/active_record_extensions.rb +0 -23
- data/lib/generators/rails_admin/importmap_formatter.rb +3 -2
- data/lib/generators/rails_admin/install_generator.rb +13 -1
- data/lib/generators/rails_admin/templates/rails_admin.vite.js +2 -0
- data/lib/rails_admin/abstract_model.rb +18 -7
- data/lib/rails_admin/adapters/active_record/association.rb +28 -11
- data/lib/rails_admin/adapters/active_record/object_extension.rb +0 -18
- data/lib/rails_admin/adapters/active_record.rb +56 -5
- data/lib/rails_admin/adapters/mongoid/association.rb +4 -4
- data/lib/rails_admin/adapters/mongoid/bson.rb +1 -0
- data/lib/rails_admin/adapters/mongoid/object_extension.rb +0 -5
- data/lib/rails_admin/adapters/mongoid.rb +13 -3
- data/lib/rails_admin/config/actions/export.rb +2 -1
- data/lib/rails_admin/config/actions/index.rb +7 -5
- data/lib/rails_admin/config/actions/show.rb +1 -1
- data/lib/rails_admin/config/configurable.rb +1 -1
- data/lib/rails_admin/config/fields/association.rb +41 -2
- data/lib/rails_admin/config/fields/base.rb +5 -5
- data/lib/rails_admin/config/fields/collection_association.rb +90 -0
- data/lib/rails_admin/config/fields/factories/active_storage.rb +2 -2
- data/lib/rails_admin/config/fields/factories/carrierwave.rb +1 -1
- data/lib/rails_admin/config/fields/factories/dragonfly.rb +1 -1
- data/lib/rails_admin/config/fields/factories/paperclip.rb +1 -1
- data/lib/rails_admin/config/fields/factories/shrine.rb +1 -1
- data/lib/rails_admin/config/fields/singular_association.rb +59 -0
- data/lib/rails_admin/config/fields/types/active_storage.rb +12 -7
- data/lib/rails_admin/config/fields/types/all.rb +0 -1
- data/lib/rails_admin/config/fields/types/belongs_to_association.rb +17 -20
- data/lib/rails_admin/config/fields/types/dragonfly.rb +0 -1
- data/lib/rails_admin/config/fields/types/file_upload.rb +7 -1
- data/lib/rails_admin/config/fields/types/has_and_belongs_to_many_association.rb +2 -2
- data/lib/rails_admin/config/fields/types/has_many_association.rb +2 -24
- data/lib/rails_admin/config/fields/types/has_one_association.rb +12 -22
- data/lib/rails_admin/config/fields/types/multiple_active_storage.rb +13 -8
- data/lib/rails_admin/config/fields/types/multiple_file_upload.rb +7 -1
- data/lib/rails_admin/config/fields/types/polymorphic_association.rb +32 -9
- data/lib/rails_admin/config/model.rb +3 -1
- data/lib/rails_admin/config.rb +9 -5
- data/lib/rails_admin/engine.rb +5 -0
- data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +1 -1
- data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +2 -1
- data/lib/rails_admin/extensions/url_for_extension.rb +15 -0
- data/lib/rails_admin/support/composite_keys_serializer.rb +15 -0
- data/lib/rails_admin/support/csv_converter.rb +0 -1
- data/lib/rails_admin/support/datetime.rb +1 -0
- data/lib/rails_admin/support/serialization_schema.rb +72 -0
- data/lib/rails_admin/version.rb +1 -1
- data/lib/rails_admin.rb +1 -0
- data/package.json +2 -2
- data/src/rails_admin/abstract-select.js +30 -0
- data/src/rails_admin/base.js +4 -1
- data/src/rails_admin/filtering-multiselect.js +2 -4
- data/src/rails_admin/filtering-select.js +2 -4
- data/src/rails_admin/ui.js +7 -1
- metadata +41 -18
- data/lib/rails_admin/adapters/composite_primary_keys/association.rb +0 -45
- data/lib/rails_admin/adapters/composite_primary_keys.rb +0 -40
- data/lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb +0 -31
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails_admin/support/hash_helper'
|
|
4
|
+
|
|
5
|
+
module RailsAdmin
|
|
6
|
+
# The options passed to to_json/to_xml, limited to what a section exposes.
|
|
7
|
+
# It mirrors what the export form offers, as the form is what builds them.
|
|
8
|
+
class SerializationSchema
|
|
9
|
+
def initialize(section, include_associations:)
|
|
10
|
+
@section = section
|
|
11
|
+
@include_associations = include_associations
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def default
|
|
15
|
+
sanitize(allowed)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Anything not allowed is dropped, and `only` is always set, since leaving
|
|
19
|
+
# it out makes to_json/to_xml serialize every attribute.
|
|
20
|
+
def sanitize(requested)
|
|
21
|
+
requested = HashHelper.symbolize(requested)
|
|
22
|
+
schema = filter(requested, allowed)
|
|
23
|
+
if @include_associations && requested[:include].is_a?(Hash)
|
|
24
|
+
schema[:include] = requested[:include].each_with_object({}) do |(name, value), included|
|
|
25
|
+
next unless value.is_a?(Hash) && allowed[:include].key?(name)
|
|
26
|
+
|
|
27
|
+
included[name] = filter(value, allowed[:include][name])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
schema
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def allowed
|
|
36
|
+
@allowed ||= begin
|
|
37
|
+
fields = @section.visible_fields
|
|
38
|
+
names = field_names(fields.select { |f| !f.association? || f.association.polymorphic? })
|
|
39
|
+
if @include_associations
|
|
40
|
+
names[:include] = fields.select { |f| f.association? && !f.association.polymorphic? }.to_h do |field|
|
|
41
|
+
associated = field.associated_model_config.export.with(@section.bindings.merge(object: field.associated_model_config.abstract_model.model.new))
|
|
42
|
+
[field.name, field_names(associated.visible_fields.reject(&:association?))]
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
# The list shows these associations already, so their keys expose nothing more
|
|
46
|
+
names[:only].concat(fields.select { |f| f.association? && f.association.type == :belongs_to && !f.association.polymorphic? }.
|
|
47
|
+
flat_map { |f| Array(f.association.foreign_key) })
|
|
48
|
+
end
|
|
49
|
+
names
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def field_names(fields)
|
|
54
|
+
fields.each_with_object({only: [], methods: []}) do |field, names|
|
|
55
|
+
list = field.virtual? ? names[:methods] : names[:only]
|
|
56
|
+
if field.association?
|
|
57
|
+
list << field.method_name.to_sym << field.association.foreign_type.to_sym
|
|
58
|
+
else
|
|
59
|
+
list << field.name
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def filter(requested, permitted)
|
|
65
|
+
only = Array(requested[:only]) & permitted[:only]
|
|
66
|
+
# Mongoid serializes every attribute for an empty `only`
|
|
67
|
+
schema = {only: only.presence || [:__none__]}
|
|
68
|
+
schema[:methods] = Array(requested[:methods]) & permitted[:methods] if requested.key?(:methods)
|
|
69
|
+
schema
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
data/lib/rails_admin/version.rb
CHANGED
data/lib/rails_admin.rb
CHANGED
|
@@ -10,6 +10,7 @@ require 'rails_admin/extensions/pundit'
|
|
|
10
10
|
require 'rails_admin/extensions/paper_trail'
|
|
11
11
|
require 'rails_admin/support/csv_converter'
|
|
12
12
|
require 'rails_admin/support/hash_helper'
|
|
13
|
+
require 'rails_admin/support/serialization_schema'
|
|
13
14
|
require 'yaml'
|
|
14
15
|
|
|
15
16
|
module RailsAdmin
|
data/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rails_admin",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
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);
|
data/src/rails_admin/base.js
CHANGED
|
@@ -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
|
-
|
|
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);
|
data/src/rails_admin/ui.js
CHANGED
|
@@ -88,7 +88,7 @@ import I18n from "./i18n";
|
|
|
88
88
|
$(document).ready(triggerDomReady);
|
|
89
89
|
document.addEventListener("turbo:render", triggerDomReady);
|
|
90
90
|
|
|
91
|
-
document.addEventListener("rails_admin.dom_ready", function () {
|
|
91
|
+
document.addEventListener("rails_admin.dom_ready", function (event) {
|
|
92
92
|
$(".nav.nav-pills li.active").removeClass("active");
|
|
93
93
|
$(
|
|
94
94
|
'.nav.nav-pills li[data-model="' + $(".page-header").data("model") + '"]'
|
|
@@ -129,6 +129,12 @@ import I18n from "./i18n";
|
|
|
129
129
|
$("a[data-method]").on("click", function (event) {
|
|
130
130
|
window.Turbo.session.drive = false;
|
|
131
131
|
});
|
|
132
|
+
|
|
133
|
+
// Trigger via jQuery for compatibility with existing user codes
|
|
134
|
+
$(document).trigger(
|
|
135
|
+
"rails_admin.dom_ready",
|
|
136
|
+
event.detail ? [event.detail] : null
|
|
137
|
+
);
|
|
132
138
|
});
|
|
133
139
|
|
|
134
140
|
$(document).on("click", ".bulk-link", function (event) {
|
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.
|
|
4
|
+
version: 3.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Erik Michaels-Ober
|
|
@@ -9,10 +9,9 @@ authors:
|
|
|
9
9
|
- Petteri Kaapa
|
|
10
10
|
- Benoit Benezech
|
|
11
11
|
- Mitsuhiro Shibuya
|
|
12
|
-
autorequire:
|
|
13
12
|
bindir: bin
|
|
14
13
|
cert_chain: []
|
|
15
|
-
date:
|
|
14
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
16
15
|
dependencies:
|
|
17
16
|
- !ruby/object:Gem::Dependency
|
|
18
17
|
name: activemodel-serializers-xml
|
|
@@ -28,6 +27,20 @@ dependencies:
|
|
|
28
27
|
- - ">="
|
|
29
28
|
- !ruby/object:Gem::Version
|
|
30
29
|
version: '1.0'
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: csv
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
requirements:
|
|
34
|
+
- - ">="
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '0'
|
|
37
|
+
type: :runtime
|
|
38
|
+
prerelease: false
|
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0'
|
|
31
44
|
- !ruby/object:Gem::Dependency
|
|
32
45
|
name: kaminari
|
|
33
46
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -71,7 +84,7 @@ dependencies:
|
|
|
71
84
|
version: '6.0'
|
|
72
85
|
- - "<"
|
|
73
86
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '
|
|
87
|
+
version: '9'
|
|
75
88
|
type: :runtime
|
|
76
89
|
prerelease: false
|
|
77
90
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -81,21 +94,27 @@ dependencies:
|
|
|
81
94
|
version: '6.0'
|
|
82
95
|
- - "<"
|
|
83
96
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: '
|
|
97
|
+
version: '9'
|
|
85
98
|
- !ruby/object:Gem::Dependency
|
|
86
99
|
name: turbo-rails
|
|
87
100
|
requirement: !ruby/object:Gem::Requirement
|
|
88
101
|
requirements:
|
|
89
|
-
- - "
|
|
102
|
+
- - ">="
|
|
90
103
|
- !ruby/object:Gem::Version
|
|
91
104
|
version: '1.0'
|
|
105
|
+
- - "<"
|
|
106
|
+
- !ruby/object:Gem::Version
|
|
107
|
+
version: '3'
|
|
92
108
|
type: :runtime
|
|
93
109
|
prerelease: false
|
|
94
110
|
version_requirements: !ruby/object:Gem::Requirement
|
|
95
111
|
requirements:
|
|
96
|
-
- - "
|
|
112
|
+
- - ">="
|
|
97
113
|
- !ruby/object:Gem::Version
|
|
98
114
|
version: '1.0'
|
|
115
|
+
- - "<"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '3'
|
|
99
118
|
- !ruby/object:Gem::Dependency
|
|
100
119
|
name: bundler
|
|
101
120
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -190,6 +209,7 @@ files:
|
|
|
190
209
|
- lib/generators/rails_admin/templates/initializer.erb
|
|
191
210
|
- lib/generators/rails_admin/templates/rails_admin.js
|
|
192
211
|
- lib/generators/rails_admin/templates/rails_admin.scss.erb
|
|
212
|
+
- lib/generators/rails_admin/templates/rails_admin.vite.js
|
|
193
213
|
- lib/generators/rails_admin/templates/rails_admin.webpacker.js
|
|
194
214
|
- lib/generators/rails_admin/utils.rb
|
|
195
215
|
- lib/rails_admin.rb
|
|
@@ -198,8 +218,6 @@ files:
|
|
|
198
218
|
- lib/rails_admin/adapters/active_record/association.rb
|
|
199
219
|
- lib/rails_admin/adapters/active_record/object_extension.rb
|
|
200
220
|
- 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
221
|
- lib/rails_admin/adapters/mongoid.rb
|
|
204
222
|
- lib/rails_admin/adapters/mongoid/association.rb
|
|
205
223
|
- lib/rails_admin/adapters/mongoid/bson.rb
|
|
@@ -225,6 +243,7 @@ files:
|
|
|
225
243
|
- lib/rails_admin/config/fields.rb
|
|
226
244
|
- lib/rails_admin/config/fields/association.rb
|
|
227
245
|
- lib/rails_admin/config/fields/base.rb
|
|
246
|
+
- lib/rails_admin/config/fields/collection_association.rb
|
|
228
247
|
- lib/rails_admin/config/fields/factories/action_text.rb
|
|
229
248
|
- lib/rails_admin/config/fields/factories/active_storage.rb
|
|
230
249
|
- lib/rails_admin/config/fields/factories/association.rb
|
|
@@ -236,6 +255,7 @@ files:
|
|
|
236
255
|
- lib/rails_admin/config/fields/factories/password.rb
|
|
237
256
|
- lib/rails_admin/config/fields/factories/shrine.rb
|
|
238
257
|
- lib/rails_admin/config/fields/group.rb
|
|
258
|
+
- lib/rails_admin/config/fields/singular_association.rb
|
|
239
259
|
- lib/rails_admin/config/fields/types.rb
|
|
240
260
|
- lib/rails_admin/config/fields/types/action_text.rb
|
|
241
261
|
- lib/rails_admin/config/fields/types/active_record_enum.rb
|
|
@@ -249,7 +269,6 @@ files:
|
|
|
249
269
|
- lib/rails_admin/config/fields/types/ck_editor.rb
|
|
250
270
|
- lib/rails_admin/config/fields/types/code_mirror.rb
|
|
251
271
|
- lib/rails_admin/config/fields/types/color.rb
|
|
252
|
-
- lib/rails_admin/config/fields/types/composite_keys_belongs_to_association.rb
|
|
253
272
|
- lib/rails_admin/config/fields/types/date.rb
|
|
254
273
|
- lib/rails_admin/config/fields/types/datetime.rb
|
|
255
274
|
- lib/rails_admin/config/fields/types/decimal.rb
|
|
@@ -311,13 +330,17 @@ files:
|
|
|
311
330
|
- lib/rails_admin/extensions/paper_trail/auditing_adapter.rb
|
|
312
331
|
- lib/rails_admin/extensions/pundit.rb
|
|
313
332
|
- lib/rails_admin/extensions/pundit/authorization_adapter.rb
|
|
333
|
+
- lib/rails_admin/extensions/url_for_extension.rb
|
|
334
|
+
- lib/rails_admin/support/composite_keys_serializer.rb
|
|
314
335
|
- lib/rails_admin/support/csv_converter.rb
|
|
315
336
|
- lib/rails_admin/support/datetime.rb
|
|
316
337
|
- lib/rails_admin/support/es_module_processor.rb
|
|
317
338
|
- lib/rails_admin/support/hash_helper.rb
|
|
339
|
+
- lib/rails_admin/support/serialization_schema.rb
|
|
318
340
|
- lib/rails_admin/version.rb
|
|
319
341
|
- lib/tasks/rails_admin.rake
|
|
320
342
|
- package.json
|
|
343
|
+
- src/rails_admin/abstract-select.js
|
|
321
344
|
- src/rails_admin/base.js
|
|
322
345
|
- src/rails_admin/filter-box.js
|
|
323
346
|
- src/rails_admin/filtering-multiselect.js
|
|
@@ -446,12 +469,13 @@ homepage: https://github.com/railsadminteam/rails_admin
|
|
|
446
469
|
licenses:
|
|
447
470
|
- MIT
|
|
448
471
|
metadata: {}
|
|
449
|
-
post_install_message:
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
472
|
+
post_install_message: |
|
|
473
|
+
### Upgrading RailsAdmin from 2.x.x to 3.x.x ###
|
|
474
|
+
|
|
475
|
+
Due to introduction of Webpack/Webpacker support, some additional dependencies and configuration will be needed.
|
|
476
|
+
Running `bin/rails g rails_admin:install` will suggest required changes, based on the current setup of your app.
|
|
477
|
+
|
|
478
|
+
For a complete list of changes, see https://github.com/railsadminteam/rails_admin/blob/master/CHANGELOG.md
|
|
455
479
|
rdoc_options: []
|
|
456
480
|
require_paths:
|
|
457
481
|
- lib
|
|
@@ -466,8 +490,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
466
490
|
- !ruby/object:Gem::Version
|
|
467
491
|
version: 1.8.11
|
|
468
492
|
requirements: []
|
|
469
|
-
rubygems_version:
|
|
470
|
-
signing_key:
|
|
493
|
+
rubygems_version: 4.0.19
|
|
471
494
|
specification_version: 4
|
|
472
495
|
summary: Admin for Rails
|
|
473
496
|
test_files: []
|
|
@@ -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
|