administrate 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of administrate might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/app/assets/stylesheets/administrate/components/_cells.scss +2 -6
- data/app/assets/stylesheets/docs.scss +1 -0
- data/app/controllers/administrate/application_controller.rb +35 -3
- data/app/controllers/concerns/administrate/punditize.rb +36 -0
- data/app/helpers/administrate/application_helper.rb +9 -4
- data/app/views/administrate/application/_collection.html.erb +9 -7
- data/app/views/administrate/application/_form.html.erb +5 -2
- data/app/views/administrate/application/_navigation.html.erb +1 -1
- data/app/views/administrate/application/edit.html.erb +3 -3
- data/app/views/administrate/application/index.html.erb +5 -2
- data/app/views/administrate/application/new.html.erb +6 -1
- data/app/views/administrate/application/show.html.erb +3 -3
- data/app/views/fields/has_many/_index.html.erb +1 -1
- data/app/views/fields/polymorphic/_form.html.erb +11 -6
- data/app/views/fields/polymorphic/_show.html.erb +8 -4
- data/config/locales/administrate.ar.yml +6 -6
- data/config/locales/administrate.bs.yml +27 -0
- data/config/locales/administrate.ca.yml +28 -0
- data/config/locales/administrate.da.yml +6 -6
- data/config/locales/administrate.de.yml +8 -8
- data/config/locales/administrate.en.yml +6 -6
- data/config/locales/administrate.es.yml +6 -6
- data/config/locales/administrate.fr.yml +6 -6
- data/config/locales/administrate.it.yml +6 -6
- data/config/locales/administrate.ja.yml +6 -6
- data/config/locales/administrate.ko.yml +6 -6
- data/config/locales/administrate.nl.yml +6 -6
- data/config/locales/administrate.pl.yml +6 -6
- data/config/locales/administrate.pt-BR.yml +6 -6
- data/config/locales/administrate.pt.yml +6 -6
- data/config/locales/administrate.ru.yml +6 -6
- data/config/locales/administrate.sv.yml +6 -6
- data/config/locales/administrate.uk.yml +6 -6
- data/config/locales/administrate.vi.yml +6 -6
- data/config/locales/administrate.zh-CN.yml +6 -6
- data/config/locales/administrate.zh-TW.yml +6 -6
- data/docs/authorization.md +69 -0
- data/docs/customizing_attribute_partials.md +20 -1
- data/docs/customizing_dashboards.md +54 -0
- data/docs/getting_started.md +82 -1
- data/lib/administrate/field/associative.rb +4 -0
- data/lib/administrate/field/base.rb +1 -1
- data/lib/administrate/field/belongs_to.rb +4 -3
- data/lib/administrate/field/date_time.rb +13 -2
- data/lib/administrate/field/deferred.rb +6 -5
- data/lib/administrate/field/has_many.rb +2 -2
- data/lib/administrate/field/has_one.rb +16 -8
- data/lib/administrate/field/polymorphic.rb +41 -3
- data/lib/administrate/order.rb +38 -5
- data/lib/administrate/resource_resolver.rb +2 -2
- data/lib/administrate/search.rb +1 -1
- data/lib/administrate/version.rb +1 -1
- data/lib/generators/administrate/dashboard/USAGE +1 -1
- data/lib/generators/administrate/dashboard/dashboard_generator.rb +7 -1
- data/lib/generators/administrate/dashboard/templates/controller.rb.erb +2 -2
- data/lib/generators/administrate/install/install_generator.rb +13 -6
- data/lib/generators/administrate/install/templates/{application_controller.rb → application_controller.rb.erb} +1 -1
- data/lib/generators/administrate/routes/routes_generator.rb +5 -0
- data/lib/generators/administrate/routes/templates/routes.rb.erb +1 -1
- data/lib/generators/administrate/views/field_generator.rb +19 -5
- metadata +8 -4
@@ -2,11 +2,49 @@ require_relative "associative"
|
|
2
2
|
|
3
3
|
module Administrate
|
4
4
|
module Field
|
5
|
-
class Polymorphic <
|
5
|
+
class Polymorphic < BelongsTo
|
6
|
+
def associated_resource_grouped_options
|
7
|
+
classes.map do |klass|
|
8
|
+
[klass.to_s, candidate_resources_for(klass).map do |resource|
|
9
|
+
[display_candidate_resource(resource), resource.to_global_id]
|
10
|
+
end]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.permitted_attribute(attr, _options = nil)
|
15
|
+
{ attr => %i{type value} }
|
16
|
+
end
|
17
|
+
|
18
|
+
def permitted_attribute
|
19
|
+
{ attribute => %i{type value} }
|
20
|
+
end
|
21
|
+
|
22
|
+
def selected_global_id
|
23
|
+
data ? data.to_global_id : nil
|
24
|
+
end
|
25
|
+
|
6
26
|
protected
|
7
27
|
|
8
|
-
def associated_dashboard
|
9
|
-
"#{
|
28
|
+
def associated_dashboard(klass = data.class)
|
29
|
+
"#{klass.name}Dashboard".constantize.new
|
30
|
+
end
|
31
|
+
|
32
|
+
def classes
|
33
|
+
options.fetch(:classes) || []
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def order
|
39
|
+
@_order ||= options.delete(:order)
|
40
|
+
end
|
41
|
+
|
42
|
+
def candidate_resources_for(klass)
|
43
|
+
order ? klass.order(order) : klass.all
|
44
|
+
end
|
45
|
+
|
46
|
+
def display_candidate_resource(resource)
|
47
|
+
associated_dashboard(resource.class).display_resource(resource)
|
10
48
|
end
|
11
49
|
end
|
12
50
|
end
|
data/lib/administrate/order.rb
CHANGED
@@ -6,11 +6,13 @@ module Administrate
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def apply(relation)
|
9
|
-
|
10
|
-
relation.
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
return order_by_association(relation) unless
|
10
|
+
reflect_association(relation).nil?
|
11
|
+
|
12
|
+
return relation.reorder("#{attribute} #{direction}") if
|
13
|
+
relation.columns_hash.keys.include?(attribute.to_s)
|
14
|
+
|
15
|
+
relation
|
14
16
|
end
|
15
17
|
|
16
18
|
def ordered_by?(attr)
|
@@ -41,5 +43,36 @@ module Administrate
|
|
41
43
|
def opposite_direction
|
42
44
|
direction.to_sym == :asc ? :desc : :asc
|
43
45
|
end
|
46
|
+
|
47
|
+
def order_by_association(relation)
|
48
|
+
return order_by_count(relation) if has_many_attribute?(relation)
|
49
|
+
|
50
|
+
return order_by_id(relation) if belongs_to_attribute?(relation)
|
51
|
+
|
52
|
+
relation
|
53
|
+
end
|
54
|
+
|
55
|
+
def order_by_count(relation)
|
56
|
+
relation.
|
57
|
+
left_joins(attribute.to_sym).
|
58
|
+
group(:id).
|
59
|
+
reorder("COUNT(#{attribute}.id) #{direction}")
|
60
|
+
end
|
61
|
+
|
62
|
+
def order_by_id(relation)
|
63
|
+
relation.reorder("#{attribute}_id #{direction}")
|
64
|
+
end
|
65
|
+
|
66
|
+
def has_many_attribute?(relation)
|
67
|
+
reflect_association(relation).macro == :has_many
|
68
|
+
end
|
69
|
+
|
70
|
+
def belongs_to_attribute?(relation)
|
71
|
+
reflect_association(relation).macro == :belongs_to
|
72
|
+
end
|
73
|
+
|
74
|
+
def reflect_association(relation)
|
75
|
+
relation.klass.reflect_on_association(attribute.to_s)
|
76
|
+
end
|
44
77
|
end
|
45
78
|
end
|
@@ -5,7 +5,7 @@ module Administrate
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def dashboard_class
|
8
|
-
|
8
|
+
ActiveSupport::Inflector.constantize("#{resource_class_name}Dashboard")
|
9
9
|
end
|
10
10
|
|
11
11
|
def namespace
|
@@ -13,7 +13,7 @@ module Administrate
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def resource_class
|
16
|
-
|
16
|
+
ActiveSupport::Inflector.constantize(resource_class_name)
|
17
17
|
end
|
18
18
|
|
19
19
|
def resource_name
|
data/lib/administrate/search.rb
CHANGED
@@ -24,7 +24,7 @@ module Administrate
|
|
24
24
|
table_name = ActiveRecord::Base.connection.
|
25
25
|
quote_table_name(@scoped_resource.table_name)
|
26
26
|
attr_name = ActiveRecord::Base.connection.quote_column_name(attr)
|
27
|
-
"
|
27
|
+
"LOWER(TEXT(#{table_name}.#{attr_name})) LIKE ?"
|
28
28
|
end.join(" OR ")
|
29
29
|
end
|
30
30
|
|
data/lib/administrate/version.rb
CHANGED
@@ -24,6 +24,8 @@ module Administrate
|
|
24
24
|
COLLECTION_ATTRIBUTE_LIMIT = 4
|
25
25
|
READ_ONLY_ATTRIBUTES = %w[id created_at updated_at]
|
26
26
|
|
27
|
+
class_option :namespace, type: :string, default: "admin"
|
28
|
+
|
27
29
|
source_root File.expand_path("../templates", __FILE__)
|
28
30
|
|
29
31
|
def create_dashboard_definition
|
@@ -35,7 +37,7 @@ module Administrate
|
|
35
37
|
|
36
38
|
def create_resource_controller
|
37
39
|
destination = Rails.root.join(
|
38
|
-
"app/controllers
|
40
|
+
"app/controllers/#{namespace}/#{file_name.pluralize}_controller.rb",
|
39
41
|
)
|
40
42
|
|
41
43
|
template("controller.rb.erb", destination)
|
@@ -43,6 +45,10 @@ module Administrate
|
|
43
45
|
|
44
46
|
private
|
45
47
|
|
48
|
+
def namespace
|
49
|
+
options[:namespace]
|
50
|
+
end
|
51
|
+
|
46
52
|
def attributes
|
47
53
|
klass.reflections.keys + klass.attribute_names - redundant_attributes
|
48
54
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module
|
2
|
-
class <%= class_name.pluralize %>Controller <
|
1
|
+
module <%= namespace.classify %>
|
2
|
+
class <%= class_name.pluralize %>Controller < <%= namespace.classify %>::ApplicationController
|
3
3
|
# To customize the behavior of this controller,
|
4
4
|
# you can overwrite any of the RESTful actions. For example:
|
5
5
|
#
|
@@ -8,34 +8,41 @@ module Administrate
|
|
8
8
|
include Administrate::GeneratorHelpers
|
9
9
|
source_root File.expand_path("../templates", __FILE__)
|
10
10
|
|
11
|
+
class_option :namespace, type: :string, default: "admin"
|
12
|
+
|
11
13
|
def run_routes_generator
|
12
14
|
if dashboard_resources.none?
|
13
|
-
call_generator("administrate:routes")
|
15
|
+
call_generator("administrate:routes", "--namespace", namespace)
|
14
16
|
load Rails.root.join("config/routes.rb")
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
18
20
|
def create_dashboard_controller
|
19
|
-
|
20
|
-
"application_controller.rb",
|
21
|
-
"app/controllers/
|
21
|
+
template(
|
22
|
+
"application_controller.rb.erb",
|
23
|
+
"app/controllers/#{namespace}/application_controller.rb",
|
22
24
|
)
|
23
25
|
end
|
24
26
|
|
25
27
|
def run_dashboard_generators
|
26
28
|
singular_dashboard_resources.each do |resource|
|
27
|
-
call_generator
|
29
|
+
call_generator "administrate:dashboard", resource,
|
30
|
+
"--namespace", namespace
|
28
31
|
end
|
29
32
|
end
|
30
33
|
|
31
34
|
private
|
32
35
|
|
36
|
+
def namespace
|
37
|
+
options[:namespace]
|
38
|
+
end
|
39
|
+
|
33
40
|
def singular_dashboard_resources
|
34
41
|
dashboard_resources.map(&:to_s).map(&:singularize)
|
35
42
|
end
|
36
43
|
|
37
44
|
def dashboard_resources
|
38
|
-
Administrate::Namespace.new(
|
45
|
+
Administrate::Namespace.new(namespace).resources
|
39
46
|
end
|
40
47
|
end
|
41
48
|
end
|
@@ -4,7 +4,7 @@
|
|
4
4
|
#
|
5
5
|
# If you want to add pagination or other controller-level concerns,
|
6
6
|
# you're free to overwrite the RESTful controller actions.
|
7
|
-
module
|
7
|
+
module <%= namespace.classify %>
|
8
8
|
class ApplicationController < Administrate::ApplicationController
|
9
9
|
before_action :authenticate_admin
|
10
10
|
|
@@ -6,6 +6,7 @@ module Administrate
|
|
6
6
|
module Generators
|
7
7
|
class RoutesGenerator < Rails::Generators::Base
|
8
8
|
source_root File.expand_path("../templates", __FILE__)
|
9
|
+
class_option :namespace, type: :string, default: "admin"
|
9
10
|
|
10
11
|
def insert_dashboard_routes
|
11
12
|
if should_route_dashboard?
|
@@ -32,6 +33,10 @@ module Administrate
|
|
32
33
|
|
33
34
|
private
|
34
35
|
|
36
|
+
def namespace
|
37
|
+
options[:namespace]
|
38
|
+
end
|
39
|
+
|
35
40
|
def dashboard_resources
|
36
41
|
valid_dashboard_models.map do |model|
|
37
42
|
model.to_s.pluralize.underscore
|
@@ -14,15 +14,29 @@ module Administrate
|
|
14
14
|
source_root template_source_path
|
15
15
|
|
16
16
|
def copy_partials
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
resource_path = args.first.try(:underscore)
|
18
|
+
|
19
|
+
if resource_path == "all"
|
20
|
+
entries = Dir.entries(self.class.template_source_path)
|
21
|
+
field_types = entries.reject { |name| name[0] == "." }
|
22
|
+
|
23
|
+
field_types.each do |field_type|
|
24
|
+
copy_field_partials(field_type)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
copy_field_partials(resource_path)
|
28
|
+
end
|
20
29
|
end
|
21
30
|
|
22
31
|
private
|
23
32
|
|
24
|
-
def
|
25
|
-
resource_path
|
33
|
+
def copy_field_partials(resource_path)
|
34
|
+
copy_field_partial(resource_path, :index)
|
35
|
+
copy_field_partial(resource_path, :show)
|
36
|
+
copy_field_partial(resource_path, :form)
|
37
|
+
end
|
38
|
+
|
39
|
+
def copy_field_partial(resource_path, partial_name)
|
26
40
|
template_file = "#{resource_path}/_#{partial_name}.html.erb"
|
27
41
|
|
28
42
|
copy_file(
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: administrate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Charlton
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- app/assets/stylesheets/administrate/utilities/_text-color.scss
|
219
219
|
- app/assets/stylesheets/docs.scss
|
220
220
|
- app/controllers/administrate/application_controller.rb
|
221
|
+
- app/controllers/concerns/administrate/punditize.rb
|
221
222
|
- app/helpers/administrate/application_helper.rb
|
222
223
|
- app/views/administrate/application/_collection.html.erb
|
223
224
|
- app/views/administrate/application/_flashes.html.erb
|
@@ -267,6 +268,8 @@ files:
|
|
267
268
|
- app/views/layouts/administrate/application.html.erb
|
268
269
|
- config/i18n-tasks.yml
|
269
270
|
- config/locales/administrate.ar.yml
|
271
|
+
- config/locales/administrate.bs.yml
|
272
|
+
- config/locales/administrate.ca.yml
|
270
273
|
- config/locales/administrate.da.yml
|
271
274
|
- config/locales/administrate.de.yml
|
272
275
|
- config/locales/administrate.en.yml
|
@@ -290,6 +293,7 @@ files:
|
|
290
293
|
- config/unicorn.rb
|
291
294
|
- docs/adding_custom_field_types.md
|
292
295
|
- docs/authentication.md
|
296
|
+
- docs/authorization.md
|
293
297
|
- docs/customizing_attribute_partials.md
|
294
298
|
- docs/customizing_controller_actions.md
|
295
299
|
- docs/customizing_dashboards.md
|
@@ -338,7 +342,7 @@ files:
|
|
338
342
|
- lib/generators/administrate/field/templates/_show.html.erb
|
339
343
|
- lib/generators/administrate/field/templates/field_object.rb.erb
|
340
344
|
- lib/generators/administrate/install/install_generator.rb
|
341
|
-
- lib/generators/administrate/install/templates/application_controller.rb
|
345
|
+
- lib/generators/administrate/install/templates/application_controller.rb.erb
|
342
346
|
- lib/generators/administrate/routes/routes_generator.rb
|
343
347
|
- lib/generators/administrate/routes/templates/routes.rb.erb
|
344
348
|
- lib/generators/administrate/views/edit_generator.rb
|
@@ -371,7 +375,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
371
375
|
version: '0'
|
372
376
|
requirements: []
|
373
377
|
rubyforge_project:
|
374
|
-
rubygems_version: 2.
|
378
|
+
rubygems_version: 2.7.3
|
375
379
|
signing_key:
|
376
380
|
specification_version: 4
|
377
381
|
summary: A Rails engine for creating super-flexible admin dashboards
|