super 0.0.11 → 0.0.12
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/.yardopts +0 -8
- data/README.md +4 -8
- data/app/controllers/super/application_controller.rb +5 -5
- data/app/views/layouts/super/application.html.erb +1 -3
- data/app/views/super/application/{_super_schema_display_actions.html.erb → _display_actions.html.erb} +0 -0
- data/app/views/super/application/{_super_schema_display_index.html.erb → _display_index.html.erb} +3 -3
- data/app/views/super/application/_display_show.html.erb +8 -0
- data/app/views/super/application/{_super_schema_form.html.erb → _form.html.erb} +2 -2
- data/app/views/super/application/{_super_layout.html.erb → _layout.html.erb} +7 -7
- data/app/views/super/application/{_super_pagination.html.erb → _pagination.html.erb} +1 -1
- data/app/views/super/application/{_super_panel.html.erb → _panel.html.erb} +2 -2
- data/lib/generators/super/install/install_generator.rb +16 -7
- data/lib/generators/super/install/templates/base_controller.rb.tt +9 -1
- data/lib/generators/super/install/templates/initializer.rb.tt +9 -2
- data/lib/generators/super/resource/resource_generator.rb +105 -30
- data/lib/generators/super/resource/templates/resources_controller.rb.tt +3 -9
- data/lib/super.rb +2 -0
- data/lib/super/configuration.rb +14 -23
- data/lib/super/controls.rb +7 -2
- data/lib/super/controls/optional.rb +1 -0
- data/lib/super/display.rb +16 -8
- data/lib/super/display/schema_types.rb +70 -33
- data/lib/super/error.rb +7 -0
- data/lib/super/form.rb +1 -1
- data/lib/super/layout.rb +1 -1
- data/lib/super/link.rb +5 -0
- data/lib/super/navigation/automatic.rb +2 -2
- data/lib/super/pagination.rb +1 -1
- data/lib/super/panel.rb +1 -1
- data/lib/super/useful/builder.rb +25 -0
- data/lib/super/useful/enum.rb +63 -0
- data/lib/super/version.rb +1 -1
- metadata +17 -19
- data/STABILITY.md +0 -50
- data/app/views/super/application/_super_schema_display_show.html.erb +0 -8
- data/docs/README.md +0 -8
- data/docs/action_text.md +0 -48
- data/docs/faq.md +0 -44
- data/docs/installation.md +0 -21
- data/docs/quick_start.md +0 -30
- data/docs/webpacker.md +0 -25
- data/docs/yard_customizations.rb +0 -43
- data/lib/super/controls/required.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 645a472c963d0e09e2d4b8646fc54c82b780b4cd60b47daac01b7434d9f37111
|
4
|
+
data.tar.gz: 7fa33b28be8edffa88ca94c919ae79f96287e071e84ab2f84dbb51a66a72d0e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a91b5535467f835d8cd87c5a02f2e09f086455bedaa02d529dc896c025eefc67ef9162954ab9159c79915bbcfdfb70729443d524137efe6173a7a07cbb20b598
|
7
|
+
data.tar.gz: f6f3d9ff8e7ce16cd1470b9b8ad1f7f982cbf2e13428e0fb6e47380fa17c1438e4e63832a7a9db8db1e9d32a8639c5847c2621572a9f0845fa18725116336777
|
data/.yardopts
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|

|
4
4
|
[][gem]
|
5
|
-
[][demo]
|
6
|
+
[][docs]
|
6
7
|
|
7
8
|
|
8
9
|
Super is an admin framework for Ruby on Rails applications. Super helps you make
|
@@ -48,13 +49,7 @@ See the [stability doc](./STABILITY.md) for an idea of what might be changed.
|
|
48
49
|
|
49
50
|
|
50
51
|
See the [demo][demo] and its [source][demo_source] for an example of some of its
|
51
|
-
features.
|
52
|
-
|
53
|
-
|
54
|
-
## Installation and Usage
|
55
|
-
|
56
|
-
See [Installation](./docs/quick_start.md) and
|
57
|
-
[Quick start](./docs/quick_start.md)
|
52
|
+
features. See the [docs][docs] for a walkthrough.
|
58
53
|
|
59
54
|
|
60
55
|
## Editions
|
@@ -101,6 +96,7 @@ The gem is available under the terms of the [GNU LGPLv3](./LICENSE).
|
|
101
96
|
|
102
97
|
[gem]: https://rubygems.org/gems/super
|
103
98
|
[discussions]: https://github.com/zachahn/super/discussions
|
99
|
+
[docs]: https://superadministration.github.io/
|
104
100
|
[newsletter]: https://tinyletter.com/zachahn
|
105
101
|
[demo]: https://demo-super.herokuapp.com/admin/members
|
106
102
|
[demo_source]: https://github.com/zachahn/super_demo
|
@@ -38,7 +38,7 @@ module Super
|
|
38
38
|
@record = controls.build_record_with_params(action: action_inquirer, params: params)
|
39
39
|
|
40
40
|
if controls.save_record(action: action_inquirer, record: @record, params: params)
|
41
|
-
redirect_to polymorphic_path(Super.
|
41
|
+
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
42
42
|
else
|
43
43
|
@form = controls.form_schema(action: action_inquirer_for("new"))
|
44
44
|
@view = controls.new_view
|
@@ -58,7 +58,7 @@ module Super
|
|
58
58
|
@record = controls.load_record(action: action_inquirer, params: params)
|
59
59
|
|
60
60
|
if controls.update_record(action: action_inquirer, record: @record, params: params)
|
61
|
-
redirect_to polymorphic_path(Super.
|
61
|
+
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
62
62
|
else
|
63
63
|
@form = controls.form_schema(action: action_inquirer_for("edit"))
|
64
64
|
@view = controls.edit_view
|
@@ -71,14 +71,14 @@ module Super
|
|
71
71
|
@record = controls.load_record(action: action_inquirer, params: params)
|
72
72
|
|
73
73
|
if controls.destroy_record(action: action_inquirer, record: @record, params: params)
|
74
|
-
redirect_to polymorphic_path(Super.
|
74
|
+
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
75
75
|
else
|
76
76
|
flash.alert = "Couldn't delete record"
|
77
|
-
redirect_to polymorphic_path(Super.
|
77
|
+
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
78
78
|
end
|
79
79
|
rescue ActiveRecord::InvalidForeignKey => e
|
80
80
|
flash.alert = "Couldn't delete record: #{e.class}"
|
81
|
-
redirect_to polymorphic_path(Super.
|
81
|
+
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
82
82
|
end
|
83
83
|
|
84
84
|
private
|
@@ -38,9 +38,7 @@
|
|
38
38
|
<div class="px-4">
|
39
39
|
<header class="pt-4">
|
40
40
|
<h1 class="text-lg font-bold mr-6 mb-1"><%= Super.configuration.title %></h1>
|
41
|
-
<%
|
42
|
-
route_namespace = Super.configuration.route_namespace.map(&:to_s).join("/")
|
43
|
-
Super::Navigation::Automatic.new(route_namespace: route_namespace).each do |text, href| %>
|
41
|
+
<% Super::Navigation::Automatic.new.each do |text, href| %>
|
44
42
|
<%= link_to(text, href, class: "inline-block mr-6") %>
|
45
43
|
<% end %>
|
46
44
|
</header>
|
File without changes
|
data/app/views/super/application/{_super_schema_display_index.html.erb → _display_index.html.erb}
RENAMED
@@ -2,7 +2,7 @@
|
|
2
2
|
<table class="w-full border-separate relative" cellspacing="0" cellpadding="0">
|
3
3
|
<thead class="">
|
4
4
|
<tr class="">
|
5
|
-
<%
|
5
|
+
<% display_index.each_attribute_name do |attribute_name| %>
|
6
6
|
<th class="p-2 first:pl-6 border-b border-b-2 border-gray-400 text-gray-600 text-left text-sm font-normal bg-white top-0 z-10">
|
7
7
|
<%= controls.model.human_attribute_name(attribute_name) %>
|
8
8
|
</th>
|
@@ -12,9 +12,9 @@
|
|
12
12
|
<tbody class="">
|
13
13
|
<% @records.each.with_index do |record, row_index| %>
|
14
14
|
<tr id="record-pk-<%= record.id %>" class="group">
|
15
|
-
<%
|
15
|
+
<% display_index.each_attribute_name do |attribute_name| %>
|
16
16
|
<td class="py-1 px-2 first:pl-5 border-transparent border-t border-b group-hover:bg-blue-200 first:border-l first:rounded-l-lg last:border-r last:rounded-r-lg bg-white <%= Super::ViewHelper.classes(["bg-gray-100", row_index.odd?]) %>">
|
17
|
-
<%=
|
17
|
+
<%= display_index.render_attribute(template: self, record: record, column: attribute_name) %>
|
18
18
|
</td>
|
19
19
|
<% end %>
|
20
20
|
</tr>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<table class="max-w-full mt-4">
|
2
|
+
<% display_show.each_attribute_name do |attribute_name| %>
|
3
|
+
<tr>
|
4
|
+
<th class="py-1 align-baseline text-right px-4"><%= controls.model.human_attribute_name(attribute_name) %></th>
|
5
|
+
<td class="py-1 align-baseline"><%= display_show.render_attribute(template: self, record: @record, column: attribute_name) %></td>
|
6
|
+
</tr>
|
7
|
+
<% end %>
|
8
|
+
</table>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<%= super_form_for(Super.
|
1
|
+
<%= super_form_for(Super::Link.polymorphic_parts(@record), builder: Super::Form::Builder) do |f| %>
|
2
2
|
<div class="max-w-3xl">
|
3
|
-
<%
|
3
|
+
<% form.each_attribute do |field, type| %>
|
4
4
|
<%= render(
|
5
5
|
type,
|
6
6
|
form: f,
|
@@ -1,29 +1,29 @@
|
|
1
|
-
<%
|
1
|
+
<% layout.resolve(self) %>
|
2
2
|
|
3
|
-
<%
|
3
|
+
<% layout.resolved_headers.each do |partial| %>
|
4
4
|
<%= Super::Partial.render(partial, template: self) %>
|
5
5
|
<% end %>
|
6
6
|
|
7
|
-
<% if
|
8
|
-
<%
|
7
|
+
<% if layout.resolved_asides.empty? %>
|
8
|
+
<% layout.resolved_mains.each do |partial| %>
|
9
9
|
<%= Super::Partial.render(partial, template: self) %>
|
10
10
|
<% end %>
|
11
11
|
<% else %>
|
12
12
|
<div class="clearfix -mx-2">
|
13
13
|
<div class="md:float-left md:w-9/12 px-2">
|
14
|
-
<%
|
14
|
+
<% layout.resolved_mains.each do |partial| %>
|
15
15
|
<%= Super::Partial.render(partial, template: self) %>
|
16
16
|
<% end %>
|
17
17
|
</div>
|
18
18
|
|
19
19
|
<div class="md:float-right md:w-3/12 px-2">
|
20
|
-
<%
|
20
|
+
<% layout.resolved_asides.each do |partial| %>
|
21
21
|
<%= Super::Partial.render(partial, template: self) %>
|
22
22
|
<% end %>
|
23
23
|
</div>
|
24
24
|
</div>
|
25
25
|
<% end %>
|
26
26
|
|
27
|
-
<%
|
27
|
+
<% layout.resolved_footers.each do |partial| %>
|
28
28
|
<%= Super::Partial.render(partial, template: self) %>
|
29
29
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<% if
|
1
|
+
<% if panel.resolve(self, block_given? ? Proc.new { yield } : nil).resolved_parts.any? %>
|
2
2
|
<div class="border rounded shadow border-gray-400 bg-white px-5 pt-4 pb-8 mt-6">
|
3
|
-
<%
|
3
|
+
<% panel.resolved_parts.each do |partial| %>
|
4
4
|
<%= Super::Partial.render(partial, template: self) %>
|
5
5
|
<% end %>
|
6
6
|
</div>
|
@@ -9,6 +9,12 @@ module Super
|
|
9
9
|
class_option :route_namespace, type: :string, default: "admin",
|
10
10
|
banner: "Specifies the route namespace for admin controllers"
|
11
11
|
|
12
|
+
def assert_not_controller_namespace_not_super
|
13
|
+
if controller_namespace == "super"
|
14
|
+
raise Super::Error::ArgumentError, "controller_namespace can not be `super`"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
12
18
|
def create_initializer
|
13
19
|
template("initializer.rb", "config/initializers/super.rb")
|
14
20
|
end
|
@@ -16,8 +22,7 @@ module Super
|
|
16
22
|
def create_base_admin_controller
|
17
23
|
template(
|
18
24
|
"base_controller.rb",
|
19
|
-
"app/controllers/#{
|
20
|
-
controller_namespace: controller_namespace
|
25
|
+
"app/controllers/#{parent_controller_name}_controller.rb"
|
21
26
|
)
|
22
27
|
end
|
23
28
|
|
@@ -53,12 +58,16 @@ module Super
|
|
53
58
|
|
54
59
|
private
|
55
60
|
|
61
|
+
def route_namespace
|
62
|
+
options[:route_namespace].strip.gsub(%r{\A/+}, "").gsub(%r{/+\z}, "").strip.underscore
|
63
|
+
end
|
64
|
+
|
56
65
|
def controller_namespace
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
66
|
+
options["controller_namespace"].strip.gsub(%r{\A/+}, "").gsub(%r{/+\z}, "").strip.underscore
|
67
|
+
end
|
68
|
+
|
69
|
+
def parent_controller_name
|
70
|
+
controller_namespace.presence || "admin"
|
62
71
|
end
|
63
72
|
end
|
64
73
|
end
|
@@ -1,2 +1,10 @@
|
|
1
|
-
class <%=
|
1
|
+
class <%= parent_controller_name.classify %>Controller < Super::ApplicationController
|
2
|
+
class <%= parent_controller_name.classify.demodulize %>Controls < Super::Controls
|
3
|
+
end
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def new_controls
|
8
|
+
self.class::Controls.new
|
9
|
+
end
|
2
10
|
end
|
@@ -1,5 +1,12 @@
|
|
1
1
|
Super.configuration do |c|
|
2
2
|
c.title = "My Admin Site"
|
3
|
-
|
4
|
-
c.
|
3
|
+
<% if route_namespace != "admin" -%>
|
4
|
+
c.path = "/<%= route_namespace %>"
|
5
|
+
<% end -%>
|
6
|
+
<% if route_namespace != "admin" -%>
|
7
|
+
c.generator_as = "<%= route_namespace.gsub(%r{/}, "_") %>"
|
8
|
+
<% end -%>
|
9
|
+
<% if controller_namespace != "admin" -%>
|
10
|
+
c.generator_module = "<%= controller_namespace %>"
|
11
|
+
<% end -%>
|
5
12
|
end
|
@@ -1,54 +1,129 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "rails/generators/resource_helpers"
|
4
|
+
|
3
5
|
module Super
|
4
6
|
class ResourceGenerator < Rails::Generators::NamedBase
|
7
|
+
include Rails::Generators::ResourceHelpers
|
5
8
|
source_root File.expand_path("templates", __dir__)
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
check_class_collision suffix: "Controller"
|
11
|
+
|
12
|
+
class_option :skip_routes, type: :boolean, desc: "Don't add routes to config/routes.rb."
|
13
|
+
|
14
|
+
def initialize(*)
|
15
|
+
super
|
16
|
+
|
17
|
+
controller_namespace = Super.configuration.generator_module
|
18
|
+
if controller_namespace.present?
|
19
|
+
controller_name =
|
20
|
+
if controller_namespace.include?("/")
|
21
|
+
"#{controller_namespace}/#{name}"
|
22
|
+
else
|
23
|
+
"#{controller_namespace}::#{name}"
|
24
|
+
end
|
25
|
+
self.options = options.dup
|
26
|
+
options[:model_name] = name
|
27
|
+
options.freeze
|
28
|
+
assign_names!(name)
|
29
|
+
assign_controller_names!(controller_name.pluralize)
|
30
|
+
else
|
31
|
+
assign_names!(name)
|
32
|
+
assign_controller_names!(name.pluralize)
|
33
|
+
end
|
34
|
+
end
|
14
35
|
|
36
|
+
def create_controller
|
15
37
|
template(
|
16
38
|
"resources_controller.rb",
|
17
|
-
"app/controllers
|
39
|
+
File.join("app/controllers", controller_class_path, "#{controller_file_name}_controller.rb")
|
18
40
|
)
|
19
41
|
end
|
20
42
|
|
21
|
-
|
43
|
+
def create_route_namespace
|
44
|
+
data = route_scope
|
45
|
+
return if data.nil?
|
46
|
+
return if File.read(File.join(destination_root, "config", "routes.rb")).include?(data)
|
22
47
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
48
|
+
inject_into_file(
|
49
|
+
"config/routes.rb",
|
50
|
+
"#{data}\nend\n".indent(2),
|
51
|
+
after: /^Rails\.application\.routes\.draw\b.*$\r?\n\r?/,
|
52
|
+
verbose: true,
|
53
|
+
force: false
|
54
|
+
)
|
55
|
+
end
|
30
56
|
|
31
|
-
|
32
|
-
|
57
|
+
def add_admin_route
|
58
|
+
data = route_scope
|
33
59
|
|
34
|
-
if
|
35
|
-
|
60
|
+
if data.nil?
|
61
|
+
route("resources :#{file_name.pluralize}")
|
62
|
+
else
|
63
|
+
inject_into_file(
|
64
|
+
"config/routes.rb",
|
65
|
+
"resources :#{file_name.pluralize}\n".indent(4),
|
66
|
+
after: /#{data}.*$\r?\n\r?/,
|
67
|
+
verbose: true,
|
68
|
+
force: false
|
69
|
+
)
|
36
70
|
end
|
71
|
+
end
|
37
72
|
|
38
|
-
|
39
|
-
concat("\n")
|
73
|
+
private
|
40
74
|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
75
|
+
def parent_controller_name
|
76
|
+
controller_namespace.presence || "admin"
|
44
77
|
end
|
45
78
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
79
|
+
def controller_namespace
|
80
|
+
Super.configuration.generator_module.strip.gsub(%r{\A/+}, "").gsub(%r{/+\z}, "").strip.underscore
|
81
|
+
end
|
82
|
+
|
83
|
+
def route_scope
|
84
|
+
return nil if no_scope?
|
85
|
+
|
86
|
+
if use_scope?
|
87
|
+
kwargs = []
|
88
|
+
kwargs.push(%(path: "/#{g_path}")) if g_path.present?
|
89
|
+
kwargs.push(%(module: "#{g_module}")) if g_module.present?
|
90
|
+
kwargs.push(%(as: "#{g_as}")) if g_as.present?
|
91
|
+
return %(scope #{kwargs.join(", ")} do)
|
51
92
|
end
|
93
|
+
|
94
|
+
%(namespace :#{g_module} do)
|
95
|
+
end
|
96
|
+
|
97
|
+
def use_scope?
|
98
|
+
return true if !same?
|
99
|
+
return true if g_module.include?("/")
|
100
|
+
return true if g_path.include?("/")
|
101
|
+
|
102
|
+
false
|
103
|
+
end
|
104
|
+
|
105
|
+
def no_scope?
|
106
|
+
g_module.blank? && g_path.blank? && g_as.blank?
|
107
|
+
end
|
108
|
+
|
109
|
+
def same?
|
110
|
+
g_module == g_path && g_path == g_as
|
111
|
+
end
|
112
|
+
|
113
|
+
def g_module
|
114
|
+
normalized_scope_part(Super.configuration.generator_module || "")
|
115
|
+
end
|
116
|
+
|
117
|
+
def g_path
|
118
|
+
normalized_scope_part(Super.configuration.path || "")
|
119
|
+
end
|
120
|
+
|
121
|
+
def g_as
|
122
|
+
normalized_scope_part(Super.configuration.generator_as || "")
|
123
|
+
end
|
124
|
+
|
125
|
+
def normalized_scope_part(part)
|
126
|
+
part.strip.gsub(%r{\A/+}, "").gsub(%r{/+\z}, "").strip
|
52
127
|
end
|
53
128
|
end
|
54
129
|
end
|
@@ -1,12 +1,6 @@
|
|
1
|
-
<%
|
2
|
-
class <%=
|
3
|
-
|
4
|
-
|
5
|
-
def new_controls
|
6
|
-
Controls.new
|
7
|
-
end
|
8
|
-
|
9
|
-
class Controls < Super::Controls
|
1
|
+
<% module_namespacing do -%>
|
2
|
+
class <%= controller_class_name %>Controller < <%= parent_controller_name.classify %>Controller
|
3
|
+
class Controls < <%= parent_controller_name.classify.demodulize %>Controls
|
10
4
|
def model
|
11
5
|
<%= class_name %>
|
12
6
|
end
|