super 0.21.0 → 0.22.0
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/README.md +35 -47
- data/app/assets/javascripts/super/application.js +1201 -2092
- data/app/assets/stylesheets/super/application.css +54 -6569
- data/app/controllers/super/application_controller.rb +44 -30
- data/app/controllers/super/foundation_controller.rb +30 -0
- data/app/controllers/super/sitewide_controller.rb +6 -3
- data/app/controllers/super/substructure_controller.rb +40 -47
- data/app/controllers/super/view_controller.rb +5 -1
- data/app/views/layouts/super/application.html.erb +3 -3
- data/app/views/super/application/_batch_checkbox.csv.erb +1 -1
- data/app/views/super/application/_batch_checkbox.html.erb +1 -1
- data/app/views/super/application/_collection_header.html.erb +1 -1
- data/app/views/super/application/_csv_button.html.erb +1 -1
- data/app/views/super/application/_display_actions.html.erb +1 -1
- data/app/views/super/application/_display_rich_text.html.erb +1 -1
- data/app/views/super/application/_form.html.erb +1 -1
- data/app/views/super/application/_form_fieldset.html.erb +1 -1
- data/app/views/super/application/_form_has_many.html.erb +2 -2
- data/app/views/super/application/_form_has_one.html.erb +1 -1
- data/app/views/super/application/_layout.html.erb +6 -6
- data/app/views/super/application/_link.html.erb +1 -6
- data/app/views/super/application/_member_header.html.erb +1 -1
- data/app/views/super/application/_panel.html.erb +1 -1
- data/app/views/super/application/_query.html.erb +2 -2
- data/app/views/super/application/_site_header.html.erb +2 -2
- data/app/views/super/application/_sort.html.erb +2 -2
- data/app/views/super/application/_sort_expression.html.erb +1 -1
- data/app/views/super/application/_view_chain.html.erb +1 -24
- data/app/views/super/application/edit.html.erb +1 -1
- data/app/views/super/application/index.html.erb +1 -1
- data/app/views/super/application/new.html.erb +1 -1
- data/app/views/super/application/show.html.erb +1 -1
- data/frontend/super-frontend/dist/application.css +54 -6569
- data/frontend/super-frontend/dist/application.js +1201 -2092
- data/lib/super/action_inquirer.rb +28 -8
- data/lib/super/assets.rb +2 -2
- data/lib/super/badge.rb +8 -32
- data/lib/super/cheat.rb +6 -5
- data/lib/super/client_error.rb +4 -0
- data/lib/super/compatibility.rb +4 -0
- data/lib/super/configuration.rb +3 -0
- data/lib/super/display/schema_types.rb +38 -82
- data/lib/super/display.rb +13 -13
- data/lib/super/error.rb +14 -0
- data/lib/super/filter/form_object.rb +2 -2
- data/lib/super/filter/operator.rb +1 -1
- data/lib/super/filter/schema_types.rb +1 -1
- data/lib/super/form/field_transcript.rb +4 -0
- data/lib/super/form/schema_types.rb +2 -2
- data/lib/super/form/strong_params.rb +1 -1
- data/lib/super/form_builder/base_methods.rb +3 -9
- data/lib/super/form_builder/flatpickr_methods.rb +3 -3
- data/lib/super/form_builder.rb +19 -21
- data/lib/super/form_builder_helper.rb +3 -3
- data/lib/super/link.rb +15 -6
- data/lib/super/link_builder.rb +4 -4
- data/lib/super/navigation.rb +12 -8
- data/lib/super/partial.rb +0 -12
- data/lib/super/plugin.rb +2 -2
- data/lib/super/railtie.rb +1 -0
- data/lib/super/render_helper.rb +31 -0
- data/lib/super/reset.rb +1 -6
- data/lib/super/schema/guesser.rb +5 -5
- data/lib/super/schema.rb +2 -2
- data/lib/super/sort.rb +1 -1
- data/lib/super/useful/deprecations.rb +1 -3
- data/lib/super/useful/enum.rb +1 -1
- data/lib/super/useful/i19.rb +1 -1
- data/lib/super/version.rb +1 -1
- data/lib/super/view_chain.rb +19 -0
- data/lib/super.rb +1 -0
- metadata +4 -2
@@ -24,24 +24,44 @@ module Super
|
|
24
24
|
"delete" => %w[destroy],
|
25
25
|
|
26
26
|
"collection" => %w[index new create],
|
27
|
-
"member" => %w[show edit update destroy]
|
27
|
+
"member" => %w[show edit update destroy]
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
31
|
# @return [ActionInquirer]
|
32
|
-
def self.index
|
32
|
+
def self.index!
|
33
|
+
new(default_for_resources, "index")
|
34
|
+
end
|
35
|
+
|
33
36
|
# @return [ActionInquirer]
|
34
|
-
def self.show
|
37
|
+
def self.show!
|
38
|
+
new(default_for_resources, "show")
|
39
|
+
end
|
40
|
+
|
35
41
|
# @return [ActionInquirer]
|
36
|
-
def self.new
|
42
|
+
def self.new!
|
43
|
+
new(default_for_resources, "new")
|
44
|
+
end
|
45
|
+
|
37
46
|
# @return [ActionInquirer]
|
38
|
-
def self.edit
|
47
|
+
def self.edit!
|
48
|
+
new(default_for_resources, "edit")
|
49
|
+
end
|
50
|
+
|
39
51
|
# @return [ActionInquirer]
|
40
|
-
def self.create
|
52
|
+
def self.create!
|
53
|
+
new(default_for_resources, "create")
|
54
|
+
end
|
55
|
+
|
41
56
|
# @return [ActionInquirer]
|
42
|
-
def self.update
|
57
|
+
def self.update!
|
58
|
+
new(default_for_resources, "update")
|
59
|
+
end
|
60
|
+
|
43
61
|
# @return [ActionInquirer]
|
44
|
-
def self.destroy
|
62
|
+
def self.destroy!
|
63
|
+
new(default_for_resources, "destroy")
|
64
|
+
end
|
45
65
|
|
46
66
|
def initialize(categories_and_their_actions, action)
|
47
67
|
@categories = categories_and_their_actions.keys.map(&:to_s)
|
data/lib/super/assets.rb
CHANGED
@@ -16,7 +16,7 @@ module Super
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.use_webpacker(assets, grep: nil)
|
19
|
-
assets = [assets] if !assets.
|
19
|
+
assets = [assets] if !assets.is_a?(Array)
|
20
20
|
|
21
21
|
assets.map do |asset|
|
22
22
|
grep_matches = grep && asset === grep
|
@@ -29,7 +29,7 @@ module Super
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.use_sprockets(assets, grep: nil)
|
32
|
-
assets = [assets] if !assets.
|
32
|
+
assets = [assets] if !assets.is_a?(Array)
|
33
33
|
|
34
34
|
assets.map do |asset|
|
35
35
|
grep_matches = grep && asset === grep
|
data/lib/super/badge.rb
CHANGED
@@ -9,46 +9,22 @@ module Super
|
|
9
9
|
yellow: "bg-yellow-400 text-black",
|
10
10
|
green: "bg-green-700 text-white",
|
11
11
|
blue: "bg-blue-700 text-white",
|
12
|
-
purple: "bg-purple-800 text-white"
|
12
|
+
purple: "bg-purple-800 text-white"
|
13
13
|
}
|
14
14
|
|
15
|
-
def initialize(text, style:
|
16
|
-
|
17
|
-
|
18
|
-
Super::Useful::Deprecation["0.22"].deprecation_warning("styles:", "use `style:` with a single style")
|
19
|
-
end
|
20
|
-
@requested_styles = Array(styles.presence).flatten + Array(style.presence).flatten
|
21
|
-
if @requested_styles.any? { |s| s.is_a?(String) }
|
22
|
-
Super::Useful::Deprecation["0.22"].warn("Super::Badge.new(text, style:) accepts exactly one Symbol style from this list #{STYLES.keys.inspect}")
|
23
|
-
end
|
24
|
-
if @requested_styles.size != 1
|
25
|
-
Super::Useful::Deprecation["0.22"].warn("Super::Badge.new(text, style:) accepts exactly one style, but it received #{@requested_styles.size}")
|
15
|
+
def initialize(text, style:)
|
16
|
+
if !STYLES.key?(style)
|
17
|
+
raise Super::Error::Initialization, "`style:` must be one of #{STYLES.keys.inspect}"
|
26
18
|
end
|
19
|
+
|
20
|
+
@text = text
|
21
|
+
@style = style
|
27
22
|
end
|
28
23
|
|
29
24
|
def styles
|
30
25
|
return @styles if instance_variable_defined?(:@styles)
|
31
|
-
@styles =
|
32
|
-
if requested_styles.delete(:reset)
|
33
|
-
[]
|
34
|
-
else
|
35
|
-
COMMON_STYLES
|
36
|
-
end
|
37
|
-
|
38
|
-
if requested_styles.empty?
|
39
|
-
@styles += [STYLES[:light]]
|
40
|
-
else
|
41
|
-
requested_styles.each do |style|
|
42
|
-
@styles +=
|
43
|
-
if STYLES.key?(style)
|
44
|
-
[STYLES[style]]
|
45
|
-
else
|
46
|
-
[style]
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
26
|
|
51
|
-
@styles
|
27
|
+
@styles = COMMON_STYLES + [STYLES.fetch(@style)]
|
52
28
|
end
|
53
29
|
|
54
30
|
def to_s
|
data/lib/super/cheat.rb
CHANGED
@@ -5,16 +5,17 @@ module Super
|
|
5
5
|
def controller
|
6
6
|
paths = %w[
|
7
7
|
../../app/controllers/super/application_controller.rb
|
8
|
-
../../app/controllers/super/substructure_controller.rb
|
9
8
|
../../app/controllers/super/view_controller.rb
|
10
9
|
../../app/controllers/super/sitewide_controller.rb
|
10
|
+
../../app/controllers/super/substructure_controller.rb
|
11
|
+
../../app/controllers/super/foundation_controller.rb
|
11
12
|
]
|
12
13
|
methods =
|
13
14
|
paths
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
.map { |f| File.read(File.expand_path(f, __dir__)) }
|
16
|
+
.flat_map { |content| content.scan(/^\s+(?:helper_method )?def .*$/) }
|
17
|
+
.reject { |method| method =~ /\bdef self\./ }
|
18
|
+
.map { |method| method.strip.sub(/^(?:helper_method )?def /, "#") }
|
18
19
|
|
19
20
|
puts "== Super::ApplicationController"
|
20
21
|
puts methods.join("\n")
|
data/lib/super/client_error.rb
CHANGED
@@ -6,9 +6,13 @@ module Super
|
|
6
6
|
# See also `Super::Error`
|
7
7
|
class ClientError < StandardError
|
8
8
|
class BadRequest < ClientError; end
|
9
|
+
|
9
10
|
class Unauthorized < ClientError; end
|
11
|
+
|
10
12
|
class Forbidden < ClientError; end
|
13
|
+
|
11
14
|
class NotFound < ClientError; end
|
15
|
+
|
12
16
|
class UnprocessableEntity < ClientError; end
|
13
17
|
|
14
18
|
module Handling
|
data/lib/super/compatibility.rb
CHANGED
@@ -34,6 +34,10 @@ module Super
|
|
34
34
|
def method_missing(method_name)
|
35
35
|
Rails.application.routes.url_helpers.public_send(method_name)
|
36
36
|
end
|
37
|
+
|
38
|
+
def respond_to_missing?(*args, **kwargs)
|
39
|
+
Rails.application.routes.url_helpers.respond_to?(*args, **kwargs)
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
43
|
klass.new
|
data/lib/super/configuration.rb
CHANGED
@@ -24,6 +24,9 @@ module Super
|
|
24
24
|
include ActiveSupport::Configurable
|
25
25
|
|
26
26
|
config_accessor(:title) { "Super Admin" }
|
27
|
+
|
28
|
+
# @!attribute [rw] index_records_per_page
|
29
|
+
# @return [Integer]
|
27
30
|
config_accessor(:index_records_per_page) { 100 }
|
28
31
|
config_accessor(:javascripts) do
|
29
32
|
[Super::Assets.auto("super/application")]
|
@@ -12,21 +12,30 @@ module Super
|
|
12
12
|
@transform_block = block
|
13
13
|
end
|
14
14
|
|
15
|
-
builder def real
|
16
|
-
|
15
|
+
builder def real
|
16
|
+
@real = true
|
17
|
+
end
|
18
|
+
builder def computed
|
19
|
+
@real = false
|
20
|
+
end
|
17
21
|
|
18
|
-
|
19
|
-
builder def column
|
20
|
-
Useful::Deprecation["0.22"].deprecation_warning(":column", "use :attribute instead")
|
22
|
+
builder def attribute
|
21
23
|
@type = :attribute
|
22
24
|
end
|
23
|
-
builder def
|
24
|
-
|
25
|
-
|
25
|
+
builder def record
|
26
|
+
@type = :record
|
27
|
+
end
|
28
|
+
builder def none
|
29
|
+
@type = :none
|
30
|
+
end
|
26
31
|
|
27
|
-
builder def ignore_nil
|
32
|
+
builder def ignore_nil
|
33
|
+
@ignore_nil = true
|
34
|
+
end
|
28
35
|
|
29
|
-
builder def attribute_name(name)
|
36
|
+
builder def attribute_name(name) # standard:disable Style/TrivialAccessors
|
37
|
+
@attribute_name = name
|
38
|
+
end
|
30
39
|
|
31
40
|
def build
|
32
41
|
Built.new(
|
@@ -48,7 +57,9 @@ module Super
|
|
48
57
|
@transform_block = transform_block
|
49
58
|
end
|
50
59
|
|
51
|
-
def real
|
60
|
+
def real?
|
61
|
+
@real
|
62
|
+
end
|
52
63
|
attr_reader :type
|
53
64
|
attr_reader :attribute_name
|
54
65
|
|
@@ -71,78 +82,26 @@ module Super
|
|
71
82
|
end
|
72
83
|
end
|
73
84
|
|
74
|
-
# @deprecated
|
75
|
-
class Badge
|
76
|
-
extend Useful::Builder
|
77
|
-
|
78
|
-
def initialize(builder)
|
79
|
-
@builder = builder
|
80
|
-
@whens = {}
|
81
|
-
format_for_lookup(&:itself)
|
82
|
-
format_for_display(&:itself)
|
83
|
-
end
|
84
|
-
|
85
|
-
builder_with_block def when(*patterns, &block)
|
86
|
-
patterns.each do |pattern|
|
87
|
-
@whens[pattern] = block
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
builder_with_block def else(&block)
|
92
|
-
@else = block
|
93
|
-
end
|
94
|
-
|
95
|
-
builder_with_block def format_for_lookup(&block)
|
96
|
-
@format_for_lookup = block
|
97
|
-
end
|
98
|
-
|
99
|
-
builder_with_block def format_for_display(&block)
|
100
|
-
@format_for_display = block
|
101
|
-
end
|
102
|
-
|
103
|
-
def build
|
104
|
-
@builder.transform do |value|
|
105
|
-
lookup_value = @format_for_lookup.call(value)
|
106
|
-
block = @whens[lookup_value] || @else
|
107
|
-
Super::Badge.new(
|
108
|
-
@format_for_display.call(value),
|
109
|
-
styles: block&.call
|
110
|
-
)
|
111
|
-
end
|
112
|
-
@builder.build
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
85
|
def initialize(fields:)
|
117
86
|
@actions_called = false
|
118
87
|
@fields = fields
|
119
88
|
end
|
120
89
|
|
121
90
|
def real(type = :attribute, &transform_block)
|
122
|
-
if type == :column
|
123
|
-
Useful::Deprecation["0.22"].deprecation_warning(":column", "use :attribute instead")
|
124
|
-
type = :attribute
|
125
|
-
end
|
126
|
-
|
127
91
|
TYPES
|
128
92
|
.case(type)
|
129
93
|
.when(:attribute) { Builder.new.real.ignore_nil.attribute.transform(&transform_block) }
|
130
|
-
.when(:record)
|
131
|
-
.when(:none)
|
94
|
+
.when(:record) { Builder.new.real.ignore_nil.record.transform(&transform_block) }
|
95
|
+
.when(:none) { Builder.new.real.ignore_nil.none.transform(&transform_block) }
|
132
96
|
.result
|
133
97
|
end
|
134
98
|
|
135
99
|
def computed(type = :attribute, &transform_block)
|
136
|
-
if type == :column
|
137
|
-
Useful::Deprecation["0.22"].deprecation_warning(":column", "use :attribute instead")
|
138
|
-
type = :attribute
|
139
|
-
end
|
140
|
-
|
141
100
|
TYPES
|
142
101
|
.case(type)
|
143
102
|
.when(:attribute) { Builder.new.computed.ignore_nil.attribute.transform(&transform_block) }
|
144
|
-
.when(:record)
|
145
|
-
.when(:none)
|
103
|
+
.when(:record) { Builder.new.computed.ignore_nil.record.transform(&transform_block) }
|
104
|
+
.when(:none) { Builder.new.computed.ignore_nil.none.transform(&transform_block) }
|
146
105
|
.result
|
147
106
|
end
|
148
107
|
|
@@ -152,29 +111,26 @@ module Super
|
|
152
111
|
|
153
112
|
def batch
|
154
113
|
real do |value|
|
155
|
-
Partial.new("batch_checkbox", locals: {
|
114
|
+
Partial.new("batch_checkbox", locals: {value: value})
|
156
115
|
end
|
157
116
|
end
|
158
117
|
|
159
|
-
def string
|
118
|
+
def string
|
119
|
+
real(&:to_s)
|
120
|
+
end
|
160
121
|
|
161
|
-
def timestamp
|
162
|
-
|
122
|
+
def timestamp
|
123
|
+
real(&:to_s)
|
124
|
+
end
|
163
125
|
|
164
|
-
def
|
165
|
-
|
166
|
-
Partial.new("display_rich_text", locals: { rich_text: value })
|
167
|
-
end
|
126
|
+
def time
|
127
|
+
real { |value| value.strftime("%H:%M:%S") }
|
168
128
|
end
|
169
129
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
builder_methods = %i[real ignore_nil attribute] if builder_methods.empty?
|
174
|
-
builder = builder_methods.each_with_object(Builder.new) do |builder_method, builder|
|
175
|
-
builder.public_send(builder_method)
|
130
|
+
def rich_text
|
131
|
+
computed do |value|
|
132
|
+
Partial.new("display_rich_text", locals: {rich_text: value})
|
176
133
|
end
|
177
|
-
Badge.new(builder)
|
178
134
|
end
|
179
135
|
|
180
136
|
def actions
|
data/lib/super/display.rb
CHANGED
@@ -27,7 +27,7 @@ module Super
|
|
27
27
|
|
28
28
|
def initialize
|
29
29
|
@fields = Super::Schema::Fields.new(
|
30
|
-
transform_value_on_set: ->
|
30
|
+
transform_value_on_set: ->(val) { val.respond_to?(:build) ? val.build : val }
|
31
31
|
)
|
32
32
|
@schema_types = SchemaTypes.new(fields: @fields)
|
33
33
|
|
@@ -62,18 +62,18 @@ module Super
|
|
62
62
|
|
63
63
|
formatted =
|
64
64
|
SchemaTypes::TYPES
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
65
|
+
.case(formatter.type)
|
66
|
+
.when(:record) do
|
67
|
+
formatter.present(column, record)
|
68
|
+
end
|
69
|
+
.when(:attribute) do
|
70
|
+
value = record.public_send(column)
|
71
|
+
formatter.present(column, value)
|
72
|
+
end
|
73
|
+
.when(:none) do
|
74
|
+
formatter.present(column)
|
75
|
+
end
|
76
|
+
.result
|
77
77
|
|
78
78
|
if formatted.respond_to?(:to_partial_path)
|
79
79
|
if formatted.respond_to?(:locals)
|
data/lib/super/error.rb
CHANGED
@@ -7,14 +7,19 @@ module Super
|
|
7
7
|
class Error < StandardError
|
8
8
|
# Error raised when some configuration is not set
|
9
9
|
class UnconfiguredConfiguration < Error; end
|
10
|
+
|
10
11
|
# Error raised when a configuration is set to a invalid value
|
11
12
|
class InvalidConfiguration < Error; end
|
13
|
+
|
12
14
|
# Error raised on problematic plugins, see `Super::Plugin`
|
13
15
|
class InvalidPluginArgument < Error; end
|
16
|
+
|
14
17
|
# Error raised on problematic ActionInquirer settings, see `Super::ActionInquirer`
|
15
18
|
class ActionInquirerError < Error; end
|
19
|
+
|
16
20
|
# Error raised when a `Super::Link` couldn't be found
|
17
21
|
class LinkNotRegistered < Error; end
|
22
|
+
|
18
23
|
# Error raised when rendering if `@view` wasn't set by the controller
|
19
24
|
class NothingToRender < Error
|
20
25
|
def initialize(basename)
|
@@ -24,23 +29,32 @@ module Super
|
|
24
29
|
)
|
25
30
|
end
|
26
31
|
end
|
32
|
+
|
27
33
|
# Error raised when something wasn't initialized correctly, and if there isn't
|
28
34
|
# a more specific error
|
29
35
|
class Initialization < Error; end
|
36
|
+
|
30
37
|
class ArgumentError < Error; end
|
38
|
+
|
31
39
|
class AlreadyRegistered < Error; end
|
40
|
+
|
32
41
|
class AlreadyTranscribed < Error; end
|
42
|
+
|
33
43
|
class NotImplementedError < Error; end
|
44
|
+
|
34
45
|
class IncompleteBuilder < Error; end
|
35
46
|
|
36
47
|
class Enum < Error
|
37
48
|
class ImpossibleValue < Enum; end
|
49
|
+
|
38
50
|
class ArgumentError < Enum; end
|
51
|
+
|
39
52
|
class UndefinedCase < Enum; end
|
40
53
|
end
|
41
54
|
|
42
55
|
class ReorderableHash < Error
|
43
56
|
class DuplicateKey < ReorderableHash; end
|
57
|
+
|
44
58
|
class KeyError < ReorderableHash; end
|
45
59
|
end
|
46
60
|
|
@@ -44,8 +44,8 @@ module Super
|
|
44
44
|
query_parameter_keys = [NULLARY] if query_parameter_keys.empty?
|
45
45
|
@specified_values =
|
46
46
|
query_parameter_keys
|
47
|
-
|
48
|
-
|
47
|
+
.map { |key| [key, @params[key].presence&.strip] }
|
48
|
+
.to_h
|
49
49
|
|
50
50
|
@specified_values.each do |key, value|
|
51
51
|
define_singleton_method(key) { value }
|
@@ -79,7 +79,7 @@ module Super
|
|
79
79
|
end
|
80
80
|
|
81
81
|
if @extras.key?(:reader)
|
82
|
-
|
82
|
+
@extras[:reader].to_s.singularize.humanize
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
@@ -142,7 +142,7 @@ module Super
|
|
142
142
|
end
|
143
143
|
|
144
144
|
def self.define_schema_type_for(method_name)
|
145
|
-
class_eval(<<~RUBY)
|
145
|
+
class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
146
146
|
def #{method_name}(*args, **kwargs)
|
147
147
|
Direct.new(super_builder: true, method_name: :#{method_name}!, args: args, kwargs: kwargs)
|
148
148
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Super
|
4
4
|
class FormBuilder
|
5
5
|
class Wrappers
|
6
|
-
skipped_field_helpers = [:label, :check_box, :radio_button, :fields_for, :fields, :hidden_field
|
6
|
+
skipped_field_helpers = [:label, :check_box, :radio_button, :fields_for, :fields, :hidden_field]
|
7
7
|
(ActionView::Helpers::FormBuilder.field_helpers - skipped_field_helpers).each do |builder_method_name|
|
8
8
|
class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
9
9
|
def #{builder_method_name}(attribute, options = {})
|
@@ -30,26 +30,20 @@ module Super
|
|
30
30
|
|
31
31
|
def check_box!(attribute, checked_value: "1", unchecked_value: "0", label_text: nil, label: {}, field: {}, show_errors: true)
|
32
32
|
label[:super] ||= {}
|
33
|
-
label[:super] = {
|
33
|
+
label[:super] = {class: "select-none ml-1"}.merge(label[:super])
|
34
34
|
container do
|
35
35
|
compact_join([
|
36
36
|
"<div>".html_safe,
|
37
37
|
public_send(:check_box, attribute, field, checked_value, unchecked_value),
|
38
38
|
public_send(:label, attribute, label_text, label),
|
39
39
|
"</div>".html_safe,
|
40
|
-
show_errors && inline_errors(attribute)
|
40
|
+
show_errors && inline_errors(attribute)
|
41
41
|
])
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
::Super::Form::SchemaTypes.define_schema_type_for(:check_box)
|
46
46
|
|
47
|
-
# def file_field(attribute, options = {})
|
48
|
-
# end
|
49
|
-
|
50
|
-
# def file_field!(attribute, label_text: nil, label: {}, field: {}, show_errors: true)
|
51
|
-
# end
|
52
|
-
|
53
47
|
def hidden_field(attribute, options = {})
|
54
48
|
@builder.hidden_field(attribute, options)
|
55
49
|
end
|
@@ -10,7 +10,7 @@ module Super
|
|
10
10
|
data: {
|
11
11
|
controller: "flatpickr",
|
12
12
|
flatpickr_options_value: {
|
13
|
-
dateFormat: "Y-m-d"
|
13
|
+
dateFormat: "Y-m-d"
|
14
14
|
}
|
15
15
|
}
|
16
16
|
)
|
@@ -33,7 +33,7 @@ module Super
|
|
33
33
|
flatpickr_options_value: {
|
34
34
|
enableSeconds: true,
|
35
35
|
enableTime: true,
|
36
|
-
dateFormat: "Z"
|
36
|
+
dateFormat: "Z"
|
37
37
|
}
|
38
38
|
}
|
39
39
|
)
|
@@ -57,7 +57,7 @@ module Super
|
|
57
57
|
enableSeconds: true,
|
58
58
|
enableTime: true,
|
59
59
|
noCalendar: true,
|
60
|
-
dateFormat: "H:i:S"
|
60
|
+
dateFormat: "H:i:S"
|
61
61
|
}
|
62
62
|
}
|
63
63
|
)
|
data/lib/super/form_builder.rb
CHANGED
@@ -19,7 +19,7 @@ module Super
|
|
19
19
|
# https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html
|
20
20
|
class FormBuilder < ActionView::Helpers::FormBuilder
|
21
21
|
FIELD_ERROR_PROC = proc { |html_tag, instance| html_tag }
|
22
|
-
FORM_BUILDER_DEFAULTS = {
|
22
|
+
FORM_BUILDER_DEFAULTS = {builder: self}.freeze
|
23
23
|
|
24
24
|
def super(**options)
|
25
25
|
@super_wrappers ||= Wrappers.new(self, @template)
|
@@ -68,29 +68,27 @@ module Super
|
|
68
68
|
elsif type == :block
|
69
69
|
definition_last.push("&#{name}")
|
70
70
|
call_last.push("&#{name}")
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
elsif type == :req
|
72
|
+
definition.push(name.to_s)
|
73
|
+
call.push(name.to_s)
|
74
|
+
elsif type == :opt || type == :key
|
75
|
+
if !optionals.key?(name)
|
76
|
+
raise Super::Error::ArgumentError, "Form bang method has optional argument, but doesn't know the default value: #{name}"
|
77
|
+
end
|
78
|
+
|
79
|
+
default_value = optionals[name]
|
80
|
+
|
81
|
+
if type == :opt
|
82
|
+
definition.push("#{name} = #{default_value}")
|
74
83
|
call.push(name.to_s)
|
75
|
-
elsif type == :
|
76
|
-
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
default_value = optionals[name]
|
81
|
-
|
82
|
-
if type == :opt
|
83
|
-
definition.push("#{name} = #{default_value}")
|
84
|
-
call.push(name.to_s)
|
85
|
-
elsif type == :key
|
86
|
-
definition.push("#{name}: #{default_value}")
|
87
|
-
call.push("#{name}: #{name}")
|
88
|
-
else
|
89
|
-
raise Super::Error::ArgumentError, "Form bang method has a unprocessable argument with name #{name}"
|
90
|
-
end
|
84
|
+
elsif type == :key
|
85
|
+
definition.push("#{name}: #{default_value}")
|
86
|
+
call.push("#{name}: #{name}")
|
91
87
|
else
|
92
|
-
raise Super::Error::ArgumentError, "Form bang method has
|
88
|
+
raise Super::Error::ArgumentError, "Form bang method has a unprocessable argument with name #{name}"
|
93
89
|
end
|
90
|
+
else
|
91
|
+
raise Super::Error::ArgumentError, "Form bang method has keyword argument type #{type} and name #{name}"
|
94
92
|
end
|
95
93
|
end
|
96
94
|
|