administrate 0.20.1 → 1.0.0.beta1
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/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
|