super 0.0.11 → 0.0.16
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 -9
- data/README.md +42 -54
- data/app/assets/javascripts/super/application.js +5617 -3806
- data/app/assets/stylesheets/super/application.css +114687 -71486
- data/app/controllers/super/application_controller.rb +41 -47
- data/app/controllers/super/substructure_controller.rb +265 -0
- data/app/helpers/super/form_builder_helper.rb +7 -0
- data/app/views/layouts/super/application.html.erb +4 -21
- data/app/views/super/application/_collection_header.html.erb +2 -2
- data/app/views/super/application/{_super_schema_display_actions.html.erb → _display_actions.html.erb} +1 -1
- data/app/views/super/application/{_super_schema_display_index.html.erb → _display_index.html.erb} +5 -5
- data/app/views/super/application/_display_show.html.erb +8 -0
- data/app/views/super/application/_filter_type_select.html.erb +1 -1
- data/app/views/super/application/_filter_type_text.html.erb +1 -1
- data/app/views/super/application/_filter_type_timestamp.html.erb +3 -3
- data/app/views/super/application/{_super_schema_form.html.erb → _form.html.erb} +2 -2
- data/app/views/super/application/_form_field.html.erb +5 -0
- data/app/views/super/application/{_super_layout.html.erb → _layout.html.erb} +8 -8
- data/app/views/super/application/_member_header.html.erb +2 -2
- 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/app/views/super/application/_site_footer.html.erb +3 -0
- data/app/views/super/application/_site_header.html.erb +17 -0
- data/app/views/super/feather/README.md +0 -1
- data/frontend/super-frontend/dist/application.css +114687 -71486
- data/frontend/super-frontend/dist/application.js +5617 -3806
- data/lib/generators/super/install/install_generator.rb +16 -23
- data/lib/generators/super/install/templates/base_controller.rb.tt +1 -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 +4 -10
- data/lib/generators/super/webpacker/webpacker_generator.rb +9 -5
- data/lib/super.rb +6 -2
- data/lib/super/action_inquirer.rb +18 -3
- data/lib/super/assets.rb +44 -23
- data/lib/super/badge.rb +60 -0
- data/lib/super/cheat.rb +17 -0
- data/lib/super/compatibility.rb +19 -0
- data/lib/super/configuration.rb +14 -23
- data/lib/super/display.rb +16 -8
- data/lib/super/display/guesser.rb +2 -0
- data/lib/super/display/schema_types.rb +116 -29
- data/lib/super/error.rb +7 -0
- data/lib/super/form.rb +1 -1
- data/lib/super/form/builder.rb +107 -27
- data/lib/super/form/guesser.rb +10 -1
- data/lib/super/form/schema_types.rb +73 -7
- data/lib/super/layout.rb +1 -1
- data/lib/super/link.rb +42 -31
- data/lib/super/link_builder.rb +58 -0
- data/lib/super/navigation.rb +164 -0
- data/lib/super/pagination.rb +3 -45
- data/lib/super/panel.rb +1 -1
- data/lib/super/reset.rb +22 -0
- data/lib/super/useful/builder.rb +25 -0
- data/lib/super/useful/enum.rb +63 -0
- data/lib/super/version.rb +1 -1
- data/lib/tasks/super/cheat.rake +9 -0
- metadata +27 -31
- data/CONTRIBUTING.md +0 -56
- data/Rakefile +0 -36
- data/STABILITY.md +0 -50
- data/app/views/super/application/_form_field_checkbox.html.erb +0 -1
- data/app/views/super/application/_form_field_rich_text_area.html.erb +0 -1
- data/app/views/super/application/_form_field_text.html.erb +0 -1
- data/app/views/super/application/_super_schema_display_show.html.erb +0 -8
- data/app/views/super/feather/_chevron_down.html +0 -1
- data/docs/README.md +0 -8
- data/docs/action_text.md +0 -48
- data/docs/cheat.md +0 -41
- 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.rb +0 -17
- data/lib/super/controls/optional.rb +0 -112
- data/lib/super/controls/required.rb +0 -15
- data/lib/super/controls/steps.rb +0 -106
- data/lib/super/controls/view.rb +0 -55
- data/lib/super/navigation/automatic.rb +0 -73
@@ -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
|
|
@@ -31,34 +36,22 @@ module Super
|
|
31
36
|
create_file("app/controllers/#{controller_namespace}/.keep", "")
|
32
37
|
end
|
33
38
|
|
34
|
-
def copy_cheatsheet
|
35
|
-
super_path = Pathname.new(Gem.loaded_specs["super"].full_gem_path).expand_path
|
36
|
-
super_cheat_path = super_path.join("docs", "cheat.md")
|
37
|
-
|
38
|
-
path =
|
39
|
-
if options["controller_namespace"].present?
|
40
|
-
"app/controllers/#{controller_namespace}/README.md"
|
41
|
-
else
|
42
|
-
"app/controllers/README.md"
|
43
|
-
end
|
44
|
-
|
45
|
-
create_file(path) do
|
46
|
-
super_cheat_path.read.sub(%r{<!--.*?-->}m, "").strip + "\n"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
39
|
def setup_sprockets4_manifest
|
51
40
|
append_to_file "app/assets/config/manifest.js", "//= link super_manifest.js\n"
|
52
41
|
end
|
53
42
|
|
54
43
|
private
|
55
44
|
|
45
|
+
def route_namespace
|
46
|
+
options[:route_namespace].strip.gsub(%r{\A/+}, "").gsub(%r{/+\z}, "").strip.underscore
|
47
|
+
end
|
48
|
+
|
56
49
|
def controller_namespace
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
50
|
+
options["controller_namespace"].strip.gsub(%r{\A/+}, "").gsub(%r{/+\z}, "").strip.underscore
|
51
|
+
end
|
52
|
+
|
53
|
+
def parent_controller_name
|
54
|
+
controller_namespace.presence || "admin"
|
62
55
|
end
|
63
56
|
end
|
64
57
|
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
class <%=
|
1
|
+
class <%= parent_controller_name.classify %>Controller < Super::ApplicationController
|
2
2
|
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,15 +1,9 @@
|
|
1
|
-
<%
|
2
|
-
class <%=
|
1
|
+
<% module_namespacing do -%>
|
2
|
+
class <%= controller_class_name %>Controller < <%= parent_controller_name.classify %>Controller
|
3
3
|
private
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
class Controls < Super::Controls
|
10
|
-
def model
|
11
|
-
<%= class_name %>
|
12
|
-
end
|
5
|
+
def model
|
6
|
+
<%= class_name %>
|
13
7
|
end
|
14
8
|
end
|
15
9
|
<% end -%>
|
@@ -5,10 +5,14 @@ module Super
|
|
5
5
|
source_root File.expand_path("templates", __dir__)
|
6
6
|
|
7
7
|
def copy_the_pack_file
|
8
|
-
|
9
|
-
"
|
10
|
-
|
11
|
-
|
8
|
+
path =
|
9
|
+
if Gem::Dependency.new("webpacker", ">= 6.0.0.beta2", "!= 6.0.0.pre1", "!= 6.0.0.pre2").matching_specs.any?
|
10
|
+
"app/packs/entrypoints/super/application.js.erb"
|
11
|
+
else
|
12
|
+
"app/javascript/packs/super/application.js.erb"
|
13
|
+
end
|
14
|
+
|
15
|
+
template("pack_super_application.js.erb", path)
|
12
16
|
end
|
13
17
|
|
14
18
|
def set_asset_handler_to_webpacker
|
@@ -16,7 +20,7 @@ module Super
|
|
16
20
|
"config/initializers/super.rb",
|
17
21
|
" c.javascripts = Super::Assets.use_webpacker(c.javascripts)\n" \
|
18
22
|
" c.stylesheets = Super::Assets.use_webpacker(c.stylesheets)\n",
|
19
|
-
before:
|
23
|
+
before: /^end\b/
|
20
24
|
)
|
21
25
|
end
|
22
26
|
|
data/lib/super.rb
CHANGED
@@ -5,13 +5,15 @@ require "tsort"
|
|
5
5
|
require "rails/engine"
|
6
6
|
|
7
7
|
require "super/schema/common"
|
8
|
+
require "super/useful/builder"
|
9
|
+
require "super/useful/enum"
|
8
10
|
|
9
11
|
require "super/action_inquirer"
|
10
12
|
require "super/assets"
|
13
|
+
require "super/badge"
|
11
14
|
require "super/client_error"
|
12
15
|
require "super/compatibility"
|
13
16
|
require "super/configuration"
|
14
|
-
require "super/controls"
|
15
17
|
require "super/display"
|
16
18
|
require "super/display/guesser"
|
17
19
|
require "super/display/schema_types"
|
@@ -29,12 +31,14 @@ require "super/form/schema_types"
|
|
29
31
|
require "super/form/strong_params"
|
30
32
|
require "super/layout"
|
31
33
|
require "super/link"
|
32
|
-
require "super/
|
34
|
+
require "super/link_builder"
|
35
|
+
require "super/navigation"
|
33
36
|
require "super/pagination"
|
34
37
|
require "super/panel"
|
35
38
|
require "super/partial"
|
36
39
|
require "super/plugin"
|
37
40
|
require "super/query/form_object"
|
41
|
+
require "super/reset"
|
38
42
|
require "super/schema"
|
39
43
|
require "super/schema/guesser"
|
40
44
|
require "super/sort"
|
@@ -19,12 +19,27 @@ module Super
|
|
19
19
|
#
|
20
20
|
def self.default_for_resources
|
21
21
|
{
|
22
|
-
read
|
23
|
-
write
|
24
|
-
delete
|
22
|
+
"read" => %w[index show new edit],
|
23
|
+
"write" => %w[create update destroy],
|
24
|
+
"delete" => %w[destroy],
|
25
25
|
}
|
26
26
|
end
|
27
27
|
|
28
|
+
# @return [ActionInquirer]
|
29
|
+
def self.index!; new(default_for_resources, "index"); end
|
30
|
+
# @return [ActionInquirer]
|
31
|
+
def self.show!; new(default_for_resources, "show"); end
|
32
|
+
# @return [ActionInquirer]
|
33
|
+
def self.new!; new(default_for_resources, "new"); end
|
34
|
+
# @return [ActionInquirer]
|
35
|
+
def self.edit!; new(default_for_resources, "edit"); end
|
36
|
+
# @return [ActionInquirer]
|
37
|
+
def self.create!; new(default_for_resources, "create"); end
|
38
|
+
# @return [ActionInquirer]
|
39
|
+
def self.update!; new(default_for_resources, "update"); end
|
40
|
+
# @return [ActionInquirer]
|
41
|
+
def self.destroy!; new(default_for_resources, "destroy"); end
|
42
|
+
|
28
43
|
def initialize(categories_and_their_actions, action)
|
29
44
|
@categories = categories_and_their_actions.keys.map(&:to_s)
|
30
45
|
@actions = categories_and_their_actions.values.flatten.uniq.map(&:to_s)
|
data/lib/super/assets.rb
CHANGED
@@ -21,7 +21,7 @@ module Super
|
|
21
21
|
assets.map do |asset|
|
22
22
|
grep_matches = grep && asset === grep
|
23
23
|
if grep_matches || !grep
|
24
|
-
asset.
|
24
|
+
asset.send(:handler=, Handler.webpacker)
|
25
25
|
end
|
26
26
|
|
27
27
|
asset
|
@@ -34,7 +34,7 @@ module Super
|
|
34
34
|
assets.map do |asset|
|
35
35
|
grep_matches = grep && asset === grep
|
36
36
|
if grep_matches || !grep
|
37
|
-
asset.
|
37
|
+
asset.send(:handler=, Handler.sprockets)
|
38
38
|
end
|
39
39
|
|
40
40
|
asset
|
@@ -52,6 +52,14 @@ module Super
|
|
52
52
|
attr_reader :path
|
53
53
|
attr_reader :arguments
|
54
54
|
|
55
|
+
def ==(other)
|
56
|
+
return false if handler != other.handler
|
57
|
+
return false if path != other.path
|
58
|
+
return false if arguments != other.arguments
|
59
|
+
|
60
|
+
true
|
61
|
+
end
|
62
|
+
|
55
63
|
def ===(other)
|
56
64
|
return true if path == other
|
57
65
|
return true if other.is_a?(Regexp) && path.match?(other)
|
@@ -61,6 +69,10 @@ module Super
|
|
61
69
|
|
62
70
|
false
|
63
71
|
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
attr_writer :handler
|
64
76
|
end
|
65
77
|
|
66
78
|
def self.dist(gem_name, package_name)
|
@@ -74,29 +86,34 @@ module Super
|
|
74
86
|
end
|
75
87
|
|
76
88
|
class Handler
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
else
|
94
|
-
none
|
89
|
+
class << self
|
90
|
+
def auto
|
91
|
+
sprockets_spec = gem_specification("sprockets")
|
92
|
+
if sprockets_spec
|
93
|
+
major = sprockets_spec.version.segments.first
|
94
|
+
if major >= 2
|
95
|
+
return sprockets
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
webpacker_spec = gem_specification("webpacker")
|
100
|
+
if webpacker_spec
|
101
|
+
major = webpacker_spec.version.segments.first
|
102
|
+
if major >= 4
|
103
|
+
return webpacker
|
104
|
+
end
|
95
105
|
end
|
96
|
-
end
|
97
106
|
|
98
|
-
|
99
|
-
|
107
|
+
none
|
108
|
+
end
|
109
|
+
|
110
|
+
def sprockets_available?
|
111
|
+
!gem_specification("sprockets").nil? && defined?(Sprockets)
|
112
|
+
end
|
113
|
+
|
114
|
+
def gem_specification(gem_name)
|
115
|
+
Gem::Dependency.new(gem_name).matching_specs&.sort_by(&:version)&.first
|
116
|
+
end
|
100
117
|
end
|
101
118
|
|
102
119
|
def self.sprockets
|
@@ -115,6 +132,10 @@ module Super
|
|
115
132
|
@asset_handler = asset_handler
|
116
133
|
end
|
117
134
|
|
135
|
+
def ==(other)
|
136
|
+
to_sym == other.to_sym
|
137
|
+
end
|
138
|
+
|
118
139
|
def sprockets?
|
119
140
|
@asset_handler == :sprockets
|
120
141
|
end
|