super 0.0.5 → 0.0.6
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 +2 -1
- data/README.md +55 -23
- data/app/assets/javascripts/super/application.js +1062 -261
- data/app/assets/stylesheets/super/application.css +72775 -50711
- data/app/controllers/super/application_controller.rb +39 -50
- data/app/helpers/super/application_helper.rb +24 -17
- data/app/views/layouts/super/application.html.erb +4 -0
- data/app/views/super/application/{_resources_header.html.erb → _collection_header.html.erb} +5 -6
- data/app/views/super/application/_flash.html.erb +13 -13
- data/app/views/super/application/_form_field_select.html.erb +1 -1
- data/app/views/super/application/_form_has_many.html.erb +1 -1
- data/app/views/super/application/{_resource_header.html.erb → _member_header.html.erb} +6 -6
- data/app/views/super/application/_super_layout.html.erb +7 -12
- data/app/views/super/application/_super_panel.html.erb +2 -6
- data/app/views/super/application/_super_schema_display_actions.html.erb +5 -0
- data/app/views/super/application/_super_schema_display_index.html.erb +39 -0
- data/app/views/super/application/_super_schema_display_show.html.erb +8 -0
- data/app/views/super/application/{_form.html.erb → _super_schema_form.html.erb} +2 -4
- data/app/views/super/application/edit.html.erb +2 -2
- data/app/views/super/application/index.html.erb +2 -2
- data/app/views/super/application/new.html.erb +2 -2
- data/app/views/super/application/show.html.erb +2 -2
- data/app/views/super/feather/{_chevron_down.svg → _chevron_down.html} +0 -0
- data/config/locales/en.yml +5 -0
- data/docs/cheat.md +41 -0
- data/docs/webpacker.md +1 -1
- data/frontend/super-frontend/dist/application.css +72775 -50711
- data/frontend/super-frontend/dist/application.js +1062 -261
- data/frontend/super-frontend/package.json +1 -1
- data/frontend/super-frontend/src/javascripts/super/apply_template_controller.ts +6 -8
- data/frontend/super-frontend/tailwind.config.js +7 -1
- data/frontend/super-frontend/yarn.lock +1103 -1195
- data/lib/generators/super/install/install_generator.rb +16 -0
- data/lib/super.rb +2 -2
- data/lib/super/action_inquirer.rb +2 -2
- data/lib/super/client_error.rb +43 -0
- data/lib/super/configuration.rb +1 -1
- data/lib/super/controls.rb +17 -101
- data/lib/super/controls/optional.rb +65 -0
- data/lib/super/controls/required.rb +41 -0
- data/lib/super/controls/steps.rb +115 -0
- data/lib/super/display/schema_types.rb +45 -2
- data/lib/super/error.rb +8 -9
- data/lib/super/form.rb +48 -0
- data/lib/super/form/schema_types.rb +8 -1
- data/lib/super/layout.rb +28 -0
- data/lib/super/link.rb +55 -32
- data/lib/super/panel.rb +13 -0
- data/lib/super/partial/resolving.rb +24 -0
- data/lib/super/schema.rb +19 -5
- data/lib/super/version.rb +1 -1
- data/lib/super/view_helper.rb +1 -1
- metadata +40 -15
- data/app/views/super/application/_index.html.erb +0 -45
- data/app/views/super/application/_show.html.erb +0 -10
- data/docs/controls.md +0 -39
- data/lib/super/display.rb +0 -9
- data/lib/super/step.rb +0 -36
- data/lib/tasks/super_tasks.rake +0 -4
@@ -27,14 +27,57 @@ module Super
|
|
27
27
|
@transform_block = transform_block
|
28
28
|
end
|
29
29
|
|
30
|
-
def present(
|
31
|
-
@transform_block.call(
|
30
|
+
def present(value)
|
31
|
+
@transform_block.call(value)
|
32
|
+
end
|
33
|
+
|
34
|
+
def real?
|
35
|
+
true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class Bypass
|
40
|
+
def initialize(partial:, real:)
|
41
|
+
@partial = partial
|
42
|
+
@real = real
|
43
|
+
end
|
44
|
+
|
45
|
+
def present
|
46
|
+
Partial.new(@partial)
|
47
|
+
end
|
48
|
+
|
49
|
+
def real?
|
50
|
+
@real
|
32
51
|
end
|
33
52
|
end
|
34
53
|
|
54
|
+
def initialize(action_inquirer)
|
55
|
+
@action_inquirer = action_inquirer
|
56
|
+
@actions_called = false
|
57
|
+
end
|
58
|
+
|
59
|
+
def before_yield(fields:)
|
60
|
+
@fields = fields
|
61
|
+
end
|
62
|
+
|
63
|
+
def after_yield
|
64
|
+
return if !@action_inquirer.index?
|
65
|
+
return if @actions_called
|
66
|
+
@fields[:actions] = actions
|
67
|
+
end
|
68
|
+
|
35
69
|
def dynamic(&transform_block)
|
36
70
|
Dynamic.new(transform_block)
|
37
71
|
end
|
72
|
+
|
73
|
+
def actions
|
74
|
+
@actions_called = true
|
75
|
+
Bypass.new(partial: "super_schema_display_actions", real: false)
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_partial_path
|
79
|
+
"super_schema_display_#{@action_inquirer.action}"
|
80
|
+
end
|
38
81
|
end
|
39
82
|
end
|
40
83
|
end
|
data/lib/super/error.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
module Super
|
2
|
-
# A container class for all
|
2
|
+
# A container class for all internal errors thrown by this library
|
3
|
+
#
|
4
|
+
# See also `Super::ClientError`
|
3
5
|
class Error < StandardError
|
6
|
+
# Error raised when some configuration is not set
|
4
7
|
class UnconfiguredConfiguration < Error; end
|
8
|
+
# Error raised when a configuration is set to a invalid value
|
5
9
|
class InvalidConfiguration < Error; end
|
6
|
-
|
10
|
+
# Error raised on problematic plugins, see `Super::Plugin`
|
7
11
|
class InvalidPluginArgument < Error; end
|
12
|
+
# Error raised on problematic ActionInquirer settings, see `Super::ActionInquirer`
|
8
13
|
class ActionInquirerError < Error; end
|
14
|
+
# Error raised when a `Super::Link` couldn't be found
|
9
15
|
class LinkNotRegistered < Error; end
|
10
|
-
|
11
|
-
class ClientError < Error; end
|
12
|
-
class BadRequest < ClientError; end
|
13
|
-
class Unauthorized < ClientError; end
|
14
|
-
class Forbidden < ClientError; end
|
15
|
-
class NotFound < ClientError; end
|
16
|
-
class UnprocessableEntity < ClientError; end
|
17
16
|
end
|
18
17
|
end
|
data/lib/super/form.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Super
|
2
|
+
class Form
|
3
|
+
module FieldErrorProc
|
4
|
+
def error_wrapping(html_tag)
|
5
|
+
if Thread.current[:super_form_builder]
|
6
|
+
return html_tag
|
7
|
+
end
|
8
|
+
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Builder < ActionView::Helpers::FormBuilder
|
14
|
+
# These methods were originally defined in the following files
|
15
|
+
#
|
16
|
+
# * actionview/lib/action_view/helpers/form_helper.rb
|
17
|
+
# * actionview/lib/action_view/helpers/form_options_helper.rb
|
18
|
+
# * actionview/lib/action_view/helpers/date_helper.rb
|
19
|
+
%w[
|
20
|
+
label text_field password_field hidden_field file_field text_area
|
21
|
+
check_box radio_button color_field search_field telephone_field
|
22
|
+
date_field time_field datetime_field month_field week_field url_field
|
23
|
+
email_field number_field range_field
|
24
|
+
|
25
|
+
select collection_select grouped_collection_select time_zone_select
|
26
|
+
collection_radio_buttons collection_check_boxes
|
27
|
+
|
28
|
+
time_select datetime_select date_select
|
29
|
+
].each do |field_type_method|
|
30
|
+
class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
31
|
+
def #{field_type_method}(*)
|
32
|
+
Thread.current[:super_form_builder] = true
|
33
|
+
super
|
34
|
+
ensure
|
35
|
+
Thread.current[:super_form_builder] = nil
|
36
|
+
end
|
37
|
+
RUBY
|
38
|
+
end
|
39
|
+
|
40
|
+
alias datetime_local_field datetime_field
|
41
|
+
alias phone_field telephone_field
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
ActionView::Helpers::Tags::Base.class_eval do
|
47
|
+
prepend Super::Form::FieldErrorProc
|
48
|
+
end
|
@@ -69,10 +69,13 @@ module Super
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
def
|
72
|
+
def before_yield(fields:)
|
73
73
|
@fields = fields
|
74
74
|
end
|
75
75
|
|
76
|
+
def after_yield
|
77
|
+
end
|
78
|
+
|
76
79
|
def generic(partial_path, **extras)
|
77
80
|
Generic.new(partial_path: partial_path, extras: extras, nested: {})
|
78
81
|
end
|
@@ -110,6 +113,10 @@ module Super
|
|
110
113
|
nested: {}
|
111
114
|
)
|
112
115
|
end
|
116
|
+
|
117
|
+
def to_partial_path
|
118
|
+
"super_schema_form"
|
119
|
+
end
|
113
120
|
end
|
114
121
|
end
|
115
122
|
end
|
data/lib/super/layout.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
require "super/partial/resolving"
|
2
|
+
|
1
3
|
module Super
|
2
4
|
class Layout
|
5
|
+
include Super::Partial::Resolving
|
6
|
+
|
3
7
|
def initialize(headers: nil, asides: nil, mains: nil, footers: nil)
|
4
8
|
@headers = Array(headers).compact
|
5
9
|
@asides = Array(asides).compact
|
@@ -15,5 +19,29 @@ module Super
|
|
15
19
|
def to_partial_path
|
16
20
|
"super_layout"
|
17
21
|
end
|
22
|
+
|
23
|
+
def resolve(template)
|
24
|
+
@resolved_headers = resolve_for_rendering(template, headers, nil)
|
25
|
+
@resolved_asides = resolve_for_rendering(template, asides, nil)
|
26
|
+
@resolved_mains = resolve_for_rendering(template, mains, nil)
|
27
|
+
@resolved_footers = resolve_for_rendering(template, footers, nil)
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def resolved_headers
|
32
|
+
@resolved_headers || []
|
33
|
+
end
|
34
|
+
|
35
|
+
def resolved_asides
|
36
|
+
@resolved_asides || []
|
37
|
+
end
|
38
|
+
|
39
|
+
def resolved_mains
|
40
|
+
@resolved_mains || []
|
41
|
+
end
|
42
|
+
|
43
|
+
def resolved_footers
|
44
|
+
@resolved_footers || []
|
45
|
+
end
|
18
46
|
end
|
19
47
|
end
|
data/lib/super/link.rb
CHANGED
@@ -2,7 +2,11 @@ module Super
|
|
2
2
|
# Links have three required attributes that are passed directly into Rails'
|
3
3
|
# `link_to` helper
|
4
4
|
class Link
|
5
|
-
def self.
|
5
|
+
def self.find_all(*links)
|
6
|
+
links.map { |link| find(link) }
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.find(link)
|
6
10
|
if link.kind_of?(self)
|
7
11
|
return link
|
8
12
|
end
|
@@ -16,61 +20,61 @@ module Super
|
|
16
20
|
|
17
21
|
def self.registry
|
18
22
|
@registry ||= {
|
19
|
-
new:
|
20
|
-
|
21
|
-
|
23
|
+
new: new(
|
24
|
+
"New",
|
25
|
+
-> (params:) {
|
22
26
|
Rails.application.routes.url_for(
|
23
27
|
controller: params[:controller],
|
24
28
|
action: :new,
|
25
29
|
only_path: true
|
26
30
|
)
|
27
|
-
|
28
|
-
|
29
|
-
index:
|
30
|
-
|
31
|
-
|
31
|
+
}
|
32
|
+
),
|
33
|
+
index: new(
|
34
|
+
"Index",
|
35
|
+
-> (params:) {
|
32
36
|
Rails.application.routes.url_for(
|
33
37
|
controller: params[:controller],
|
34
38
|
action: :index,
|
35
39
|
only_path: true
|
36
40
|
)
|
37
|
-
|
38
|
-
|
39
|
-
show:
|
40
|
-
|
41
|
-
|
41
|
+
}
|
42
|
+
),
|
43
|
+
show: new(
|
44
|
+
"View",
|
45
|
+
-> (record:, params:) {
|
42
46
|
Rails.application.routes.url_for(
|
43
47
|
controller: params[:controller],
|
44
48
|
action: :show,
|
45
|
-
id:
|
49
|
+
id: record,
|
46
50
|
only_path: true
|
47
51
|
)
|
48
|
-
|
49
|
-
|
50
|
-
edit:
|
51
|
-
|
52
|
-
|
52
|
+
}
|
53
|
+
),
|
54
|
+
edit: new(
|
55
|
+
"Edit",
|
56
|
+
-> (record:, params:) {
|
53
57
|
Rails.application.routes.url_for(
|
54
58
|
controller: params[:controller],
|
55
59
|
action: :edit,
|
56
|
-
id:
|
60
|
+
id: record,
|
57
61
|
only_path: true
|
58
62
|
)
|
59
|
-
|
60
|
-
|
61
|
-
destroy:
|
62
|
-
|
63
|
-
|
63
|
+
}
|
64
|
+
),
|
65
|
+
destroy: new(
|
66
|
+
"Delete",
|
67
|
+
-> (record:, params:) {
|
64
68
|
Rails.application.routes.url_for(
|
65
69
|
controller: params[:controller],
|
66
70
|
action: :destroy,
|
67
|
-
id:
|
71
|
+
id: record,
|
68
72
|
only_path: true
|
69
|
-
)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
73
|
+
)
|
74
|
+
},
|
75
|
+
method: :delete,
|
76
|
+
data: { confirm: "Really delete?" }
|
77
|
+
),
|
74
78
|
}
|
75
79
|
end
|
76
80
|
|
@@ -80,8 +84,27 @@ module Super
|
|
80
84
|
@options = options
|
81
85
|
end
|
82
86
|
|
87
|
+
def to_s(default_options: nil, **proc_arguments)
|
88
|
+
default_options ||= {}
|
89
|
+
ActionController::Base.helpers.link_to(
|
90
|
+
value(text, proc_arguments),
|
91
|
+
value(href, proc_arguments),
|
92
|
+
default_options.deep_merge(value(options, proc_arguments))
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
83
98
|
attr_reader :text
|
84
99
|
attr_reader :href
|
85
100
|
attr_reader :options
|
101
|
+
|
102
|
+
def value(proc_or_value, proc_arguments)
|
103
|
+
if proc_or_value.kind_of?(Proc)
|
104
|
+
proc_or_value.call(**proc_arguments)
|
105
|
+
else
|
106
|
+
proc_or_value
|
107
|
+
end
|
108
|
+
end
|
86
109
|
end
|
87
110
|
end
|
data/lib/super/panel.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
require "super/partial/resolving"
|
2
|
+
|
1
3
|
module Super
|
2
4
|
class Panel
|
5
|
+
include Super::Partial::Resolving
|
6
|
+
|
3
7
|
def initialize(*parts)
|
4
8
|
if block_given?
|
5
9
|
@parts = Array.new(yield)
|
@@ -10,6 +14,15 @@ module Super
|
|
10
14
|
|
11
15
|
attr_reader :parts
|
12
16
|
|
17
|
+
def resolve(template, block)
|
18
|
+
@resolved_parts ||= resolve_for_rendering(template, parts, block)
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def resolved_parts
|
23
|
+
@resolved_parts || []
|
24
|
+
end
|
25
|
+
|
13
26
|
def to_partial_path
|
14
27
|
"super_panel"
|
15
28
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Super
|
2
|
+
class Partial
|
3
|
+
module Resolving
|
4
|
+
module_function
|
5
|
+
|
6
|
+
def resolve_for_rendering(template, partials, block)
|
7
|
+
if block
|
8
|
+
partials = [block.call, *parts]
|
9
|
+
end
|
10
|
+
|
11
|
+
partials =
|
12
|
+
partials.map do |partial|
|
13
|
+
if partial.is_a?(Symbol)
|
14
|
+
template.instance_variable_get(partial)
|
15
|
+
else
|
16
|
+
partial
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
partials.compact
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/super/schema.rb
CHANGED
@@ -10,13 +10,13 @@ module Super
|
|
10
10
|
@schema_type = schema_type
|
11
11
|
@fields = Fields.new
|
12
12
|
|
13
|
-
|
14
|
-
@schema_type.setup(fields: @fields)
|
15
|
-
end
|
13
|
+
@schema_type.before_yield(fields: @fields)
|
16
14
|
|
17
15
|
if block_given?
|
18
16
|
yield(@fields, @schema_type)
|
19
17
|
end
|
18
|
+
|
19
|
+
@schema_type.after_yield
|
20
20
|
end
|
21
21
|
|
22
22
|
attr_reader :fields
|
@@ -25,6 +25,14 @@ module Super
|
|
25
25
|
fields.keys
|
26
26
|
end
|
27
27
|
|
28
|
+
def to_partial_path
|
29
|
+
@schema_type.to_partial_path
|
30
|
+
end
|
31
|
+
|
32
|
+
# This class can be thought of as a Hash, where the keys usually refer to
|
33
|
+
# the model's column name and the value refers to the column type. Note
|
34
|
+
# though that this isn't always the case—different `SchemaTypes` can do
|
35
|
+
# whatever makes sense in their context
|
28
36
|
class Fields
|
29
37
|
include Enumerable
|
30
38
|
|
@@ -44,9 +52,13 @@ module Super
|
|
44
52
|
@backing.keys
|
45
53
|
end
|
46
54
|
|
47
|
-
def
|
55
|
+
def values
|
56
|
+
@backing.values
|
57
|
+
end
|
58
|
+
|
59
|
+
def each(&block)
|
48
60
|
if block_given?
|
49
|
-
return @backing.each(&
|
61
|
+
return @backing.each(&block)
|
50
62
|
end
|
51
63
|
|
52
64
|
enum_for(:each)
|
@@ -65,6 +77,8 @@ module Super
|
|
65
77
|
inside = {}
|
66
78
|
@backing = inside
|
67
79
|
yield
|
80
|
+
return inside
|
81
|
+
ensure
|
68
82
|
@backing = outside
|
69
83
|
inside
|
70
84
|
end
|
data/lib/super/version.rb
CHANGED