administrate 0.20.1 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +9 -9
- data/app/assets/builds/administrate/application.css +1960 -0
- data/app/assets/builds/administrate/application.css.map +1 -0
- data/app/assets/builds/administrate/application.js +8110 -0
- data/app/assets/builds/administrate/application.js.map +7 -0
- data/app/assets/builds/administrate-internal/docs.css +89 -0
- data/app/assets/builds/administrate-internal/docs.css.map +1 -0
- data/app/assets/config/administrate_manifest.js +2 -0
- data/app/assets/javascripts/administrate/add_jquery.js +4 -0
- data/app/assets/javascripts/administrate/application.js +8 -4
- data/app/assets/stylesheets/administrate/application.scss +2 -1
- data/app/assets/stylesheets/administrate/base/_forms.scss +4 -4
- data/app/assets/stylesheets/administrate/base/_tables.scss +1 -1
- data/app/assets/stylesheets/administrate/components/_attributes.scss +1 -0
- data/app/assets/stylesheets/administrate/components/_buttons.scss +1 -3
- data/app/assets/stylesheets/administrate/components/_cells.scss +19 -19
- data/app/assets/stylesheets/administrate/components/_field-unit.scss +1 -0
- data/app/assets/stylesheets/administrate/components/_main-content.scss +1 -1
- data/app/assets/stylesheets/administrate/components/_navigation.scss +3 -3
- data/app/assets/stylesheets/administrate/components/_search.scss +11 -11
- data/app/assets/stylesheets/administrate/library/_variables.scss +7 -3
- data/app/controllers/administrate/application_controller.rb +19 -19
- data/app/controllers/concerns/administrate/punditize.rb +5 -5
- data/app/helpers/administrate/application_helper.rb +4 -4
- data/lib/administrate/base_dashboard.rb +5 -5
- data/lib/administrate/engine.rb +1 -6
- data/lib/administrate/field/associative.rb +1 -1
- data/lib/administrate/field/base.rb +2 -2
- data/lib/administrate/field/belongs_to.rb +1 -1
- data/lib/administrate/field/date.rb +1 -1
- data/lib/administrate/field/date_time.rb +2 -2
- data/lib/administrate/field/deferred.rb +1 -1
- data/lib/administrate/field/has_many.rb +5 -5
- data/lib/administrate/field/has_one.rb +6 -6
- data/lib/administrate/field/number.rb +2 -2
- data/lib/administrate/field/polymorphic.rb +3 -3
- data/lib/administrate/generator_helpers.rb +1 -1
- data/lib/administrate/namespace/resource.rb +1 -1
- data/lib/administrate/order.rb +6 -6
- data/lib/administrate/page/base.rb +1 -1
- data/lib/administrate/page/collection.rb +2 -2
- data/lib/administrate/page/form.rb +1 -1
- data/lib/administrate/page/show.rb +1 -1
- data/lib/administrate/resource_resolver.rb +1 -1
- data/lib/administrate/search.rb +6 -7
- data/lib/administrate/version.rb +1 -1
- data/lib/administrate/view_generator.rb +3 -3
- data/lib/administrate.rb +18 -18
- data/lib/generators/administrate/dashboard/dashboard_generator.rb +9 -9
- data/lib/generators/administrate/field/field_generator.rb +2 -2
- data/lib/generators/administrate/install/install_generator.rb +2 -2
- data/lib/generators/administrate/routes/routes_generator.rb +5 -5
- data/lib/generators/administrate/views/field_generator.rb +2 -2
- data/lib/generators/administrate/views/layout_generator.rb +1 -1
- metadata +13 -47
- /data/app/assets/stylesheets/{docs.scss → administrate-internal/docs.scss} +0 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
html,
|
2
|
+
body {
|
3
|
+
font-family: "Lato", serif;
|
4
|
+
font-size: 18px;
|
5
|
+
line-height: 1.62em;
|
6
|
+
margin: 0;
|
7
|
+
}
|
8
|
+
|
9
|
+
img {
|
10
|
+
max-width: 100%;
|
11
|
+
}
|
12
|
+
|
13
|
+
h1,
|
14
|
+
h2,
|
15
|
+
h3 {
|
16
|
+
font-family: "Fjalla One", sans-serif;
|
17
|
+
margin-top: 2em;
|
18
|
+
}
|
19
|
+
|
20
|
+
a {
|
21
|
+
color: #53adc6;
|
22
|
+
text-decoration: none;
|
23
|
+
}
|
24
|
+
|
25
|
+
.content {
|
26
|
+
margin-bottom: 2em;
|
27
|
+
margin-left: auto;
|
28
|
+
margin-right: auto;
|
29
|
+
margin-top: 2em;
|
30
|
+
width: 60em;
|
31
|
+
}
|
32
|
+
.content .sidebar {
|
33
|
+
float: left;
|
34
|
+
width: 20em;
|
35
|
+
}
|
36
|
+
.content .sidebar-links {
|
37
|
+
list-style: none;
|
38
|
+
padding-left: 0;
|
39
|
+
}
|
40
|
+
.content .main {
|
41
|
+
float: right;
|
42
|
+
width: 40em;
|
43
|
+
}
|
44
|
+
|
45
|
+
.flash-wrapper {
|
46
|
+
background-color: #cf726e;
|
47
|
+
color: #f0f0f0;
|
48
|
+
padding: 1em;
|
49
|
+
}
|
50
|
+
.flash-wrapper .flash {
|
51
|
+
margin-left: auto;
|
52
|
+
margin-right: auto;
|
53
|
+
width: 40em;
|
54
|
+
}
|
55
|
+
|
56
|
+
code {
|
57
|
+
font-family: "Source Code Pro";
|
58
|
+
font-size: 0.8rem;
|
59
|
+
padding: 0.4em 0.2em 0;
|
60
|
+
}
|
61
|
+
code.hljs {
|
62
|
+
background-color: #202020;
|
63
|
+
color: #e0e0dc;
|
64
|
+
padding-left: 1rem;
|
65
|
+
}
|
66
|
+
code.hljs .hljs-string {
|
67
|
+
color: #b0bf82;
|
68
|
+
}
|
69
|
+
code.hljs .hljs-subst {
|
70
|
+
color: #e0e0dc;
|
71
|
+
}
|
72
|
+
code.hljs .hljs-constant {
|
73
|
+
color: #8fbdcc;
|
74
|
+
}
|
75
|
+
code.hljs .hljs-symbol {
|
76
|
+
color: #b95c56;
|
77
|
+
}
|
78
|
+
code.hljs .hljs-keyword {
|
79
|
+
color: #f8d29d;
|
80
|
+
}
|
81
|
+
code.hljs .hljs-title,
|
82
|
+
code.hljs .hljs-parent {
|
83
|
+
color: #8fbdcc;
|
84
|
+
}
|
85
|
+
code.hljs .hljs-tag {
|
86
|
+
color: #f8d29d;
|
87
|
+
}
|
88
|
+
|
89
|
+
/*# sourceMappingURL=docs.css.map */
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../stylesheets/administrate-internal/docs.scss"],"names":[],"mappings":"AAYA;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;EACE,OAhCK;EAiCL;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;;;AAIJ;EACE,kBA3DI;EA4DJ,OA1DM;EA2DN;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE,kBAxES;EAyET,OAxES;EAyET;;AAEA;EAAe,OA1EN;;AA2ET;EAAc,OA5EL;;AA6ET;EAAiB,OA3ET;;AA4ER;EAAe,OA1ER;;AA2EP;EAAgB,OA5EN;;AA8EV;AAAA;EACe,OAhFP;;AAkFR;EAAY,OAjFF","file":"docs.css"}
|
@@ -1,4 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
import "./add_jquery";
|
2
|
+
|
3
|
+
import {} from "jquery-ujs";
|
4
|
+
import "selectize/dist/js/selectize.min.js";
|
5
|
+
|
6
|
+
import "./components/associative";
|
7
|
+
import "./components/select";
|
8
|
+
import "./components/table";
|
@@ -32,6 +32,10 @@ textarea {
|
|
32
32
|
font-size: 16px;
|
33
33
|
}
|
34
34
|
|
35
|
+
textarea {
|
36
|
+
resize: vertical;
|
37
|
+
}
|
38
|
+
|
35
39
|
[type="color"],
|
36
40
|
[type="date"],
|
37
41
|
[type="datetime-local"],
|
@@ -78,10 +82,6 @@ textarea {
|
|
78
82
|
}
|
79
83
|
}
|
80
84
|
|
81
|
-
textarea {
|
82
|
-
resize: vertical;
|
83
|
-
}
|
84
|
-
|
85
85
|
[type="checkbox"],
|
86
86
|
[type="radio"] {
|
87
87
|
display: inline;
|
@@ -1,6 +1,25 @@
|
|
1
|
+
.cell-label__sort-indicator {
|
2
|
+
float: right;
|
3
|
+
margin-left: 5px;
|
4
|
+
|
5
|
+
svg {
|
6
|
+
fill: $hint-grey;
|
7
|
+
height: 13px;
|
8
|
+
transition: transform $base-duration $base-timing;
|
9
|
+
width: 13px;
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
1
13
|
.cell-label {
|
2
14
|
padding-top: 0.15em;
|
3
15
|
|
16
|
+
a {
|
17
|
+
color: inherit;
|
18
|
+
display: inline-block;
|
19
|
+
transition: color $base-duration $base-timing;
|
20
|
+
width: 100%;
|
21
|
+
}
|
22
|
+
|
4
23
|
&:hover {
|
5
24
|
a {
|
6
25
|
color: $action-color;
|
@@ -11,13 +30,6 @@
|
|
11
30
|
transform: rotate(180deg);
|
12
31
|
}
|
13
32
|
}
|
14
|
-
|
15
|
-
a {
|
16
|
-
color: inherit;
|
17
|
-
display: inline-block;
|
18
|
-
transition: color $base-duration $base-timing;
|
19
|
-
width: 100%;
|
20
|
-
}
|
21
33
|
}
|
22
34
|
|
23
35
|
.cell-label--asc,
|
@@ -25,18 +37,6 @@
|
|
25
37
|
font-weight: $bold-font-weight;
|
26
38
|
}
|
27
39
|
|
28
|
-
.cell-label__sort-indicator {
|
29
|
-
float: right;
|
30
|
-
margin-left: 5px;
|
31
|
-
|
32
|
-
svg {
|
33
|
-
fill: $hint-grey;
|
34
|
-
height: 13px;
|
35
|
-
transition: transform $base-duration $base-timing;
|
36
|
-
width: 13px;
|
37
|
-
}
|
38
|
-
}
|
39
|
-
|
40
40
|
.cell-label__sort-indicator--desc {
|
41
41
|
transform: rotate(180deg);
|
42
42
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
$
|
1
|
+
$navigation-link-padding: 0.6em;
|
2
2
|
|
3
3
|
.navigation {
|
4
4
|
flex: 1 0 10rem;
|
@@ -11,8 +11,8 @@ $_navigation-link-padding: 0.6em;
|
|
11
11
|
color: $base-font-color;
|
12
12
|
display: block;
|
13
13
|
line-height: 1;
|
14
|
-
margin-left: -($
|
15
|
-
padding: $
|
14
|
+
margin-left: -($navigation-link-padding);
|
15
|
+
padding: $navigation-link-padding;
|
16
16
|
transition: background-color $base-duration $base-timing,
|
17
17
|
color $base-duration $base-timing;
|
18
18
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
$
|
1
|
+
$search-icon-size: 1rem;
|
2
2
|
|
3
3
|
.search {
|
4
4
|
margin-left: auto;
|
@@ -10,35 +10,35 @@ $_search-icon-size: 1rem;
|
|
10
10
|
|
11
11
|
.search__input {
|
12
12
|
border-radius: 100rem;
|
13
|
-
padding-left: $
|
14
|
-
padding-right: $
|
13
|
+
padding-left: $search-icon-size * 2.5;
|
14
|
+
padding-right: $search-icon-size * 2.5;
|
15
15
|
}
|
16
16
|
|
17
17
|
.search__eyeglass-icon {
|
18
18
|
fill: $grey-7;
|
19
|
-
height: $
|
20
|
-
left: $
|
19
|
+
height: $search-icon-size;
|
20
|
+
left: $search-icon-size;
|
21
21
|
position: absolute;
|
22
22
|
top: 50%;
|
23
23
|
transform: translateY(-50%);
|
24
|
-
width: $
|
24
|
+
width: $search-icon-size;
|
25
25
|
}
|
26
26
|
|
27
27
|
.search__clear-link {
|
28
|
-
height: $
|
28
|
+
height: $search-icon-size;
|
29
29
|
position: absolute;
|
30
|
-
right: $
|
30
|
+
right: $search-icon-size * 0.75;
|
31
31
|
top: 50%;
|
32
32
|
transform: translateY(-50%);
|
33
|
-
width: $
|
33
|
+
width: $search-icon-size;
|
34
34
|
}
|
35
35
|
|
36
36
|
.search__clear-icon {
|
37
37
|
fill: $grey-5;
|
38
|
-
height: $
|
38
|
+
height: $search-icon-size;
|
39
39
|
position: absolute;
|
40
40
|
transition: fill $base-duration $base-timing;
|
41
|
-
width: $
|
41
|
+
width: $search-icon-size;
|
42
42
|
|
43
43
|
&:hover {
|
44
44
|
fill: $action-color;
|
@@ -1,5 +1,7 @@
|
|
1
|
+
/* stylelint-disable scss/dollar-variable-empty-line-before */
|
2
|
+
|
1
3
|
// Typography
|
2
|
-
$base-font-family: -apple-system,
|
4
|
+
$base-font-family: -apple-system, blinkmacsystemfont, "Segoe UI", "Roboto",
|
3
5
|
"Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
|
4
6
|
sans-serif !default;
|
5
7
|
$heading-font-family: $base-font-family !default;
|
@@ -17,8 +19,8 @@ $base-spacing: $base-line-height * 1em !default;
|
|
17
19
|
$small-spacing: $base-spacing * 0.5 !default;
|
18
20
|
|
19
21
|
// Colors
|
20
|
-
$white: #
|
21
|
-
$black: #
|
22
|
+
$white: #ffffff !default;
|
23
|
+
$black: #000000 !default;
|
22
24
|
|
23
25
|
$blue: #1976d2 !default;
|
24
26
|
$red: #d32f2f !default;
|
@@ -63,3 +65,5 @@ $base-border: 1px solid $base-border-color !default;
|
|
63
65
|
// Transitions
|
64
66
|
$base-duration: 250ms !default;
|
65
67
|
$base-timing: ease-in-out !default;
|
68
|
+
|
69
|
+
/* stylelint-enable scss/dollar-variable-empty-line-before */
|
@@ -15,13 +15,13 @@ module Administrate
|
|
15
15
|
resources: resources,
|
16
16
|
search_term: search_term,
|
17
17
|
page: page,
|
18
|
-
show_search_bar: show_search_bar
|
18
|
+
show_search_bar: show_search_bar?
|
19
19
|
}
|
20
20
|
end
|
21
21
|
|
22
22
|
def show
|
23
23
|
render locals: {
|
24
|
-
page: Administrate::Page::Show.new(dashboard, requested_resource)
|
24
|
+
page: Administrate::Page::Show.new(dashboard, requested_resource)
|
25
25
|
}
|
26
26
|
end
|
27
27
|
|
@@ -29,13 +29,13 @@ module Administrate
|
|
29
29
|
resource = new_resource
|
30
30
|
authorize_resource(resource)
|
31
31
|
render locals: {
|
32
|
-
page: Administrate::Page::Form.new(dashboard, resource)
|
32
|
+
page: Administrate::Page::Form.new(dashboard, resource)
|
33
33
|
}
|
34
34
|
end
|
35
35
|
|
36
36
|
def edit
|
37
37
|
render locals: {
|
38
|
-
page: Administrate::Page::Form.new(dashboard, requested_resource)
|
38
|
+
page: Administrate::Page::Form.new(dashboard, requested_resource)
|
39
39
|
}
|
40
40
|
end
|
41
41
|
|
@@ -47,11 +47,11 @@ module Administrate
|
|
47
47
|
yield(resource) if block_given?
|
48
48
|
redirect_to(
|
49
49
|
after_resource_created_path(resource),
|
50
|
-
notice: translate_with_resource("create.success")
|
50
|
+
notice: translate_with_resource("create.success")
|
51
51
|
)
|
52
52
|
else
|
53
53
|
render :new, locals: {
|
54
|
-
page: Administrate::Page::Form.new(dashboard, resource)
|
54
|
+
page: Administrate::Page::Form.new(dashboard, resource)
|
55
55
|
}, status: :unprocessable_entity
|
56
56
|
end
|
57
57
|
end
|
@@ -60,11 +60,11 @@ module Administrate
|
|
60
60
|
if requested_resource.update(resource_params)
|
61
61
|
redirect_to(
|
62
62
|
after_resource_updated_path(requested_resource),
|
63
|
-
notice: translate_with_resource("update.success")
|
63
|
+
notice: translate_with_resource("update.success")
|
64
64
|
)
|
65
65
|
else
|
66
66
|
render :edit, locals: {
|
67
|
-
page: Administrate::Page::Form.new(dashboard, requested_resource)
|
67
|
+
page: Administrate::Page::Form.new(dashboard, requested_resource)
|
68
68
|
}, status: :unprocessable_entity
|
69
69
|
end
|
70
70
|
end
|
@@ -84,12 +84,12 @@ module Administrate
|
|
84
84
|
Administrate::Search.new(
|
85
85
|
resources,
|
86
86
|
dashboard,
|
87
|
-
search_term
|
87
|
+
search_term
|
88
88
|
).run
|
89
89
|
end
|
90
90
|
|
91
91
|
def after_resource_destroyed_path(_requested_resource)
|
92
|
-
{
|
92
|
+
{action: :index}
|
93
93
|
end
|
94
94
|
|
95
95
|
def after_resource_created_path(requested_resource)
|
@@ -103,7 +103,7 @@ module Administrate
|
|
103
103
|
helper_method :nav_link_state
|
104
104
|
def nav_link_state(resource)
|
105
105
|
underscore_resource = resource.to_s.split("/").join("__")
|
106
|
-
resource_name.to_s.pluralize == underscore_resource ? :active : :inactive
|
106
|
+
(resource_name.to_s.pluralize == underscore_resource) ? :active : :inactive
|
107
107
|
end
|
108
108
|
|
109
109
|
# Whether the named action route exists for the resource class.
|
@@ -141,8 +141,8 @@ module Administrate
|
|
141
141
|
sorting_attribute,
|
142
142
|
sorting_direction,
|
143
143
|
association_attribute: order_by_field(
|
144
|
-
dashboard_attribute(sorting_attribute)
|
145
|
-
)
|
144
|
+
dashboard_attribute(sorting_attribute)
|
145
|
+
)
|
146
146
|
)
|
147
147
|
end
|
148
148
|
|
@@ -201,9 +201,9 @@ module Administrate
|
|
201
201
|
end
|
202
202
|
|
203
203
|
def resource_params
|
204
|
-
params.require(resource_class.model_name.param_key)
|
205
|
-
permit(dashboard.permitted_attributes(action_name))
|
206
|
-
transform_values { |v| read_param_value(v) }
|
204
|
+
params.require(resource_class.model_name.param_key)
|
205
|
+
.permit(dashboard.permitted_attributes(action_name))
|
206
|
+
.transform_values { |v| read_param_value(v) }
|
207
207
|
end
|
208
208
|
|
209
209
|
def read_param_value(data)
|
@@ -236,13 +236,13 @@ module Administrate
|
|
236
236
|
def translate_with_resource(key)
|
237
237
|
t(
|
238
238
|
"administrate.controller.#{key}",
|
239
|
-
resource: resource_resolver.resource_title
|
239
|
+
resource: resource_resolver.resource_title
|
240
240
|
)
|
241
241
|
end
|
242
242
|
|
243
243
|
def show_search_bar?
|
244
244
|
dashboard.attribute_types_for(
|
245
|
-
dashboard.all_attributes
|
245
|
+
dashboard.all_attributes
|
246
246
|
).any? { |_name, attribute| attribute.searchable? }
|
247
247
|
end
|
248
248
|
|
@@ -279,7 +279,7 @@ module Administrate
|
|
279
279
|
else
|
280
280
|
raise Administrate::NotAuthorizedError.new(
|
281
281
|
action: action_name,
|
282
|
-
resource: resource
|
282
|
+
resource: resource
|
283
283
|
)
|
284
284
|
end
|
285
285
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Administrate
|
2
2
|
module Punditize
|
3
|
-
if Object.const_defined?(
|
3
|
+
if Object.const_defined?(:Pundit)
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
if Pundit.const_defined?(:Authorization)
|
@@ -28,7 +28,7 @@ module Administrate
|
|
28
28
|
def authorized_action?(resource, action)
|
29
29
|
namespaced_resource = policy_namespace + [resource]
|
30
30
|
policy = Pundit.policy!(pundit_user, namespaced_resource)
|
31
|
-
policy.send("#{action}?"
|
31
|
+
policy.send(:"#{action}?")
|
32
32
|
end
|
33
33
|
|
34
34
|
def policy_scope!(user, scope)
|
@@ -38,13 +38,13 @@ module Administrate
|
|
38
38
|
policy_scope = policy_scope_class.new(user, pundit_model(scope))
|
39
39
|
rescue ArgumentError
|
40
40
|
raise(Pundit::InvalidConstructorError,
|
41
|
-
|
41
|
+
"Invalid #<#{policy_scope_class}> constructor is called")
|
42
42
|
end
|
43
43
|
|
44
44
|
if policy_scope.respond_to? :resolve_admin
|
45
45
|
Administrate.deprecator.warn(
|
46
|
-
"Pundit policy scope `resolve_admin` method is deprecated. "
|
47
|
-
"Please use a namespaced pundit policy instead."
|
46
|
+
"Pundit policy scope `resolve_admin` method is deprecated. " \
|
47
|
+
"Please use a namespaced pundit policy instead."
|
48
48
|
)
|
49
49
|
policy_scope.resolve_admin
|
50
50
|
else
|
@@ -50,7 +50,7 @@ module Administrate
|
|
50
50
|
def display_resource_name(resource_name, opts = {})
|
51
51
|
dashboard_from_resource(resource_name).resource_name(
|
52
52
|
count: opts[:singular] ? SINGULAR_COUNT : PLURAL_MANY_COUNT,
|
53
|
-
default: default_resource_name(resource_name, opts)
|
53
|
+
default: default_resource_name(resource_name, opts)
|
54
54
|
)
|
55
55
|
end
|
56
56
|
|
@@ -65,14 +65,14 @@ module Administrate
|
|
65
65
|
def resource_index_route(resource_name)
|
66
66
|
url_for(
|
67
67
|
action: "index",
|
68
|
-
controller: "/#{namespace}/#{resource_name}"
|
68
|
+
controller: "/#{namespace}/#{resource_name}"
|
69
69
|
)
|
70
70
|
end
|
71
71
|
|
72
72
|
def sanitized_order_params(page, current_field_name)
|
73
73
|
collection_names = page.item_associations + [current_field_name]
|
74
74
|
association_params = collection_names.map do |assoc_name|
|
75
|
-
{
|
75
|
+
{assoc_name => %i[order direction page per_page]}
|
76
76
|
end
|
77
77
|
params.permit(:search, :id, :_page, :per_page, association_params)
|
78
78
|
end
|
@@ -87,7 +87,7 @@ module Administrate
|
|
87
87
|
|
88
88
|
def default_resource_name(name, opts = {})
|
89
89
|
resource_name = (opts[:singular] ? name.to_s : name.to_s.pluralize)
|
90
|
-
resource_name.
|
90
|
+
resource_name.tr("/", "_").titleize
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
@@ -79,7 +79,7 @@ module Administrate
|
|
79
79
|
attribute_types[attr].permitted_attribute(
|
80
80
|
attr,
|
81
81
|
resource_class: self.class.model,
|
82
|
-
action: action
|
82
|
+
action: action
|
83
83
|
)
|
84
84
|
end.uniq
|
85
85
|
end
|
@@ -118,10 +118,10 @@ module Administrate
|
|
118
118
|
|
119
119
|
def item_associations
|
120
120
|
attributes = if show_page_attributes.is_a?(Hash)
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
121
|
+
show_page_attributes.values.flatten
|
122
|
+
else
|
123
|
+
show_page_attributes
|
124
|
+
end
|
125
125
|
attribute_associated attributes
|
126
126
|
end
|
127
127
|
|
data/lib/administrate/engine.rb
CHANGED
@@ -1,8 +1,4 @@
|
|
1
|
-
require "jquery-rails"
|
2
1
|
require "kaminari"
|
3
|
-
require "sassc-rails"
|
4
|
-
require "selectize-rails"
|
5
|
-
require "sprockets/railtie"
|
6
2
|
|
7
3
|
require "administrate/namespace/resource"
|
8
4
|
require "administrate/not_authorized_error"
|
@@ -13,7 +9,6 @@ require "administrate/order"
|
|
13
9
|
require "administrate/resource_resolver"
|
14
10
|
require "administrate/search"
|
15
11
|
require "administrate/namespace"
|
16
|
-
require "administrate/namespace/resource"
|
17
12
|
|
18
13
|
module Administrate
|
19
14
|
class Engine < ::Rails::Engine
|
@@ -25,7 +20,7 @@ module Administrate
|
|
25
20
|
initializer "administrate.assets.precompile" do |app|
|
26
21
|
app.config.assets.precompile += [
|
27
22
|
"administrate/application.js",
|
28
|
-
"administrate/application.css"
|
23
|
+
"administrate/application.css"
|
29
24
|
]
|
30
25
|
end
|
31
26
|
|
@@ -56,13 +56,13 @@ module Administrate
|
|
56
56
|
return false unless resource.class.respond_to?(:validators_on)
|
57
57
|
|
58
58
|
resource.class.validators_on(attribute).any? do |v|
|
59
|
-
next false unless v.
|
59
|
+
next false unless v.instance_of?(ActiveRecord::Validations::PresenceValidator)
|
60
60
|
|
61
61
|
options = v.options
|
62
62
|
next false if options.include?(:if)
|
63
63
|
next false if options.include?(:unless)
|
64
64
|
|
65
|
-
if on_option = options[:on]
|
65
|
+
if (on_option = options[:on])
|
66
66
|
if on_option == :create && !resource.persisted?
|
67
67
|
next true
|
68
68
|
end
|
@@ -6,7 +6,7 @@ module Administrate
|
|
6
6
|
def date
|
7
7
|
I18n.localize(
|
8
8
|
data.in_time_zone(timezone).to_date,
|
9
|
-
format: format
|
9
|
+
format: format
|
10
10
|
)
|
11
11
|
end
|
12
12
|
|
@@ -14,7 +14,7 @@ module Administrate
|
|
14
14
|
I18n.localize(
|
15
15
|
data.in_time_zone(timezone),
|
16
16
|
format: format,
|
17
|
-
default: data
|
17
|
+
default: data
|
18
18
|
)
|
19
19
|
end
|
20
20
|
|
@@ -35,7 +35,7 @@ module Administrate
|
|
35
35
|
|
36
36
|
def searchable_field
|
37
37
|
Administrate.deprecator.warn(
|
38
|
-
"searchable_field is deprecated, use searchable_fields instead"
|
38
|
+
"searchable_field is deprecated, use searchable_fields instead"
|
39
39
|
)
|
40
40
|
options.fetch(:searchable_field)
|
41
41
|
end
|