super 0.0.10 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +0 -9
  3. data/README.md +40 -52
  4. data/app/assets/javascripts/super/application.js +5672 -3671
  5. data/app/assets/stylesheets/super/application.css +114681 -71486
  6. data/app/controllers/super/application_controller.rb +31 -21
  7. data/app/helpers/super/form_builder_helper.rb +2 -0
  8. data/app/views/layouts/super/application.html.erb +15 -14
  9. data/app/views/super/application/{_super_schema_display_actions.html.erb → _display_actions.html.erb} +0 -0
  10. data/app/views/super/application/{_super_schema_display_index.html.erb → _display_index.html.erb} +4 -4
  11. data/app/views/super/application/_display_show.html.erb +8 -0
  12. data/app/views/super/application/_filter.html.erb +5 -13
  13. data/app/views/super/application/_filter_type_select.html.erb +5 -2
  14. data/app/views/super/application/_filter_type_text.html.erb +6 -4
  15. data/app/views/super/application/_filter_type_timestamp.html.erb +6 -5
  16. data/app/views/super/application/{_super_schema_form.html.erb → _form.html.erb} +2 -2
  17. data/app/views/super/application/_form_field.html.erb +5 -0
  18. data/app/views/super/application/{_super_layout.html.erb → _layout.html.erb} +8 -8
  19. data/app/views/super/application/{_super_pagination.html.erb → _pagination.html.erb} +1 -1
  20. data/app/views/super/application/{_super_panel.html.erb → _panel.html.erb} +2 -2
  21. data/app/views/super/application/_query.html.erb +18 -0
  22. data/app/views/super/application/_sort.html.erb +18 -0
  23. data/app/views/super/application/_sort_expression.html.erb +25 -0
  24. data/app/views/super/feather/README.md +1 -1
  25. data/app/views/super/feather/_x.html +15 -0
  26. data/config/routes.rb +2 -0
  27. data/frontend/super-frontend/dist/application.css +114681 -71486
  28. data/frontend/super-frontend/dist/application.js +5672 -3671
  29. data/lib/generators/super/action_text/action_text_generator.rb +2 -0
  30. data/lib/generators/super/install/install_generator.rb +18 -23
  31. data/lib/generators/super/install/templates/base_controller.rb.tt +9 -1
  32. data/lib/generators/super/install/templates/initializer.rb.tt +9 -2
  33. data/lib/generators/super/resource/resource_generator.rb +107 -30
  34. data/lib/generators/super/resource/templates/resources_controller.rb.tt +3 -9
  35. data/lib/generators/super/webpacker/webpacker_generator.rb +11 -5
  36. data/lib/super.rb +10 -2
  37. data/lib/super/action_inquirer.rb +13 -3
  38. data/lib/super/assets.rb +46 -23
  39. data/lib/super/badge.rb +61 -0
  40. data/lib/super/cheat.rb +17 -0
  41. data/lib/super/client_error.rb +2 -0
  42. data/lib/super/compatibility.rb +21 -0
  43. data/lib/super/configuration.rb +16 -24
  44. data/lib/super/controls.rb +11 -2
  45. data/lib/super/controls/optional.rb +44 -1
  46. data/lib/super/controls/steps.rb +53 -34
  47. data/lib/super/controls/view.rb +55 -0
  48. data/lib/super/display.rb +29 -13
  49. data/lib/super/display/guesser.rb +4 -0
  50. data/lib/super/display/schema_types.rb +118 -29
  51. data/lib/super/engine.rb +2 -0
  52. data/lib/super/error.rb +12 -0
  53. data/lib/super/filter.rb +2 -0
  54. data/lib/super/filter/form_object.rb +5 -8
  55. data/lib/super/filter/guesser.rb +2 -0
  56. data/lib/super/filter/operator.rb +2 -0
  57. data/lib/super/filter/schema_types.rb +2 -0
  58. data/lib/super/form.rb +3 -1
  59. data/lib/super/form/builder.rb +109 -27
  60. data/lib/super/form/guesser.rb +12 -1
  61. data/lib/super/form/inline_errors.rb +2 -0
  62. data/lib/super/form/schema_types.rb +75 -7
  63. data/lib/super/form/strong_params.rb +2 -0
  64. data/lib/super/layout.rb +3 -1
  65. data/lib/super/link.rb +44 -31
  66. data/lib/super/link_builder.rb +58 -0
  67. data/lib/super/navigation.rb +164 -0
  68. data/lib/super/pagination.rb +3 -43
  69. data/lib/super/panel.rb +3 -1
  70. data/lib/super/partial.rb +2 -0
  71. data/lib/super/partial/resolving.rb +2 -0
  72. data/lib/super/plugin.rb +2 -0
  73. data/lib/super/query/form_object.rb +48 -0
  74. data/lib/super/reset.rb +17 -0
  75. data/lib/super/schema.rb +2 -0
  76. data/lib/super/schema/common.rb +2 -0
  77. data/lib/super/schema/guesser.rb +2 -0
  78. data/lib/super/sort.rb +110 -0
  79. data/lib/super/useful/builder.rb +25 -0
  80. data/lib/super/useful/enum.rb +63 -0
  81. data/lib/super/version.rb +3 -1
  82. data/lib/super/view_helper.rb +2 -0
  83. data/lib/tasks/super/cheat.rake +9 -0
  84. metadata +45 -28
  85. data/CONTRIBUTING.md +0 -56
  86. data/Rakefile +0 -34
  87. data/STABILITY.md +0 -50
  88. data/app/views/super/application/_form_field_checkbox.html.erb +0 -1
  89. data/app/views/super/application/_form_field_rich_text_area.html.erb +0 -1
  90. data/app/views/super/application/_form_field_text.html.erb +0 -1
  91. data/app/views/super/application/_super_schema_display_show.html.erb +0 -8
  92. data/app/views/super/feather/_chevron_down.html +0 -1
  93. data/docs/README.md +0 -8
  94. data/docs/action_text.md +0 -48
  95. data/docs/cheat.md +0 -41
  96. data/docs/faq.md +0 -44
  97. data/docs/installation.md +0 -21
  98. data/docs/quick_start.md +0 -30
  99. data/docs/webpacker.md +0 -25
  100. data/docs/yard_customizations.rb +0 -41
  101. data/lib/super/controls/required.rb +0 -13
  102. data/lib/super/filter/plugin.rb +0 -47
  103. data/lib/super/navigation/automatic.rb +0 -71
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class Pagination
3
5
  include Enumerable
@@ -53,7 +55,7 @@ module Super
53
55
  end
54
56
 
55
57
  def to_partial_path
56
- "super_pagination"
58
+ "pagination"
57
59
  end
58
60
 
59
61
  private
@@ -80,46 +82,4 @@ module Super
80
82
  end
81
83
  end
82
84
  end
83
-
84
- class Controls
85
- module Optional
86
- # Specifies how many records to show per page
87
- #
88
- # @param action [ActionInquirer]
89
- # @param query_params [Hash]
90
- # @return [ActiveRecord::Relation]
91
- def records_per_page(action:, query_params:)
92
- Super.configuration.index_records_per_page
93
- end
94
- end
95
-
96
- module Steps
97
- # Sets up pagination
98
- #
99
- # @param action [ActionInquirer]
100
- # @param records [ActiveRecord::Relation]
101
- # @param query_params [Hash]
102
- # @return [Pagination]
103
- def initialize_pagination(action:, records:, query_params:)
104
- Pagination.new(
105
- total_count: records.size,
106
- limit: records_per_page(action: action, query_params: query_params),
107
- query_params: query_params,
108
- page_query_param: :page
109
- )
110
- end
111
-
112
- # Paginates
113
- #
114
- # @param action [ActionInquirer]
115
- # @param records [ActiveRecord::Relation]
116
- # @param pagination [Pagination]
117
- # @return [ActiveRecord::Relation]
118
- def paginate_records(action:, records:, pagination:)
119
- records
120
- .limit(pagination.limit)
121
- .offset(pagination.offset)
122
- end
123
- end
124
- end
125
85
  end
data/lib/super/panel.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "super/partial/resolving"
2
4
 
3
5
  module Super
@@ -24,7 +26,7 @@ module Super
24
26
  end
25
27
 
26
28
  def to_partial_path
27
- "super_panel"
29
+ "panel"
28
30
  end
29
31
  end
30
32
  end
data/lib/super/partial.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class Partial
3
5
  def self.render(partialish, template:)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class Partial
3
5
  module Resolving
data/lib/super/plugin.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  module Plugin
3
5
  class Registry
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Super
4
+ class Query
5
+ class FormObject
6
+ def initialize(model:, params:, namespace:, current_path:)
7
+ @model = model
8
+ @all_params = params.dup
9
+ @namespace = namespace
10
+ @params = params[namespace] || ActionController::Parameters.new
11
+ @path = current_path
12
+ @addons = {}
13
+ end
14
+
15
+ attr_reader :namespace
16
+ attr_reader :path
17
+ attr_reader :addons
18
+
19
+ def add(klass, namespace:, **additional_initialization_arguments)
20
+ instance = klass.new(
21
+ model: @model,
22
+ params: params_dig(namespace),
23
+ **additional_initialization_arguments
24
+ )
25
+
26
+ addons[namespace] = instance
27
+ end
28
+
29
+ def apply_changes(records)
30
+ addons.each_value do |addon|
31
+ records = addon.apply_changes(records)
32
+ end
33
+
34
+ records
35
+ end
36
+
37
+ def to_partial_path
38
+ "query"
39
+ end
40
+
41
+ private
42
+
43
+ def params_dig(*keys)
44
+ @params.dig(*keys) || ActionController::Parameters.new
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Super
4
+ module Reset
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ undef_method :index
9
+ undef_method :show
10
+ undef_method :new
11
+ undef_method :create
12
+ undef_method :edit
13
+ undef_method :update
14
+ undef_method :destroy
15
+ end
16
+ end
17
+ end
data/lib/super/schema.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  # The Schema is a general purpose container for describing the "schema"
3
5
  # for various purposes. It primarily exists to provide a cohesive user-facing
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class Schema
3
5
  module Common
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class Schema
3
5
  class Guesser
data/lib/super/sort.rb ADDED
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Super
4
+ module Sort
5
+ class FormObject
6
+ DIRECTIONS = ["asc", "desc"]
7
+
8
+ def initialize(model:, params:, default:, sortable_columns:)
9
+ @model = model
10
+ @params = params.dup
11
+ @default = default
12
+ @sortable_columns = sortable_columns.map(&:to_s)
13
+
14
+ @params.permit!
15
+ end
16
+
17
+ attr_reader :sortable_columns
18
+
19
+ def to_partial_path
20
+ "sort"
21
+ end
22
+
23
+ def exprs
24
+ sanitized_expr_params.map { |ordering| Expression.new(**ordering) }
25
+ end
26
+
27
+ def new_expr
28
+ Expression.new(a: nil, d: :desc)
29
+ end
30
+
31
+ class Expression
32
+ attr_accessor :a # attribute
33
+ attr_accessor :d # direction
34
+
35
+ def initialize(a:, d:)
36
+ @a = a
37
+ @d = d.to_s
38
+ end
39
+
40
+ def with_index(index)
41
+ @index = index
42
+ self
43
+ end
44
+
45
+ # This is for `fields_for` to work
46
+ def id
47
+ @index
48
+ end
49
+
50
+ def persisted?
51
+ false
52
+ end
53
+ end
54
+
55
+ def persisted?
56
+ false
57
+ end
58
+
59
+ def apply_changes(query)
60
+ exprs.each do |expr|
61
+ query = query.order(expr.a => expr.d)
62
+ end
63
+
64
+ query
65
+ end
66
+
67
+ private
68
+
69
+ # Stringifies the values
70
+ def sanitized_expr_params
71
+ seen = {}
72
+ normalized_expr_params
73
+ .each do |p|
74
+ p[:a] = p[:a].presence&.to_s&.strip
75
+ p[:d] = p[:d].presence&.to_s&.strip
76
+ end
77
+ .select { |p| p[:a].present? && DIRECTIONS.include?(p[:d]) }
78
+ .select { |p| @sortable_columns.include?(p[:a]) }
79
+ .select do |p|
80
+ next false if seen.key?(p[:a])
81
+
82
+ seen[p[:a]] = true
83
+ true
84
+ end
85
+ end
86
+
87
+ # Symbolizes the keys
88
+ def normalized_expr_params
89
+ from_params = @params[:exprs]
90
+
91
+ return default_as_query if from_params.nil?
92
+
93
+ if from_params.is_a?(Array)
94
+ return from_params.map(&:to_h).map(&:symbolize_keys)
95
+ end
96
+
97
+ from_params.to_h.values.map(&:symbolize_keys)
98
+ end
99
+
100
+ def default_as_query
101
+ @default.map do |attribute_name, direction|
102
+ {
103
+ a: attribute_name,
104
+ d: direction,
105
+ }
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Super
4
+ module Useful
5
+ module Builder
6
+ def builder(method_name)
7
+ alias_method("original_#{method_name}", method_name)
8
+
9
+ define_method(method_name) do |*args|
10
+ send("original_#{method_name}", *args)
11
+ self
12
+ end
13
+ end
14
+
15
+ def builder_with_block(method_name)
16
+ alias_method("original_#{method_name}", method_name)
17
+
18
+ define_method(method_name) do |*args, &block|
19
+ send("original_#{method_name}", *args, &block)
20
+ self
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Super
4
+ module Useful
5
+ class Enum
6
+ def initialize(*choices)
7
+ @choices = choices.flatten.map { |choice| [choice, nil] }.to_h
8
+ end
9
+
10
+ def case(chosen)
11
+ Case.new(@choices, chosen)
12
+ end
13
+
14
+ class Case
15
+ def initialize(choices, chosen)
16
+ if !choices.key?(chosen)
17
+ raise Error::Enum::ImpossibleValue,
18
+ "`#{chosen}` isn't in: #{choices.keys.map(&:inspect).join(", ")}"
19
+ end
20
+
21
+ @choices = choices
22
+ @chosen = chosen
23
+ @whens = {}
24
+ end
25
+
26
+ def when(*keys, &block)
27
+ if !block_given?
28
+ raise Error::ArgumentError, "must receive block"
29
+ end
30
+
31
+ keys.each do |key|
32
+ if !@choices.key?(key)
33
+ raise Error::Enum::ImpossibleValue, "`#{key.inspect}` is not a possibility"
34
+ end
35
+
36
+ @whens[key] = block
37
+ end
38
+
39
+ self
40
+ end
41
+
42
+ def result
43
+ if @choices.size != @whens.size
44
+ missing_keys = @choices.keys - @whens.keys
45
+ raise Error::Enum::UndefinedCase, "Unset cases: #{missing_keys.join(", ")}"
46
+ end
47
+
48
+ @whens[@chosen].call(@value)
49
+ end
50
+
51
+ private
52
+
53
+ def matching_possibilities_and_checks?
54
+ if @whens.size == @choices.size
55
+ return true
56
+ end
57
+
58
+ false
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
data/lib/super/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
- VERSION = "0.0.10"
4
+ VERSION = "0.0.15"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  module ViewHelper
3
5
  module_function
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :super do
4
+ task :cheat do
5
+ require "super/cheat"
6
+ cheat = Super::Cheat.new
7
+ cheat.controls
8
+ end
9
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: super
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Ahn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-17 00:00:00.000000000 Z
11
+ date: 2021-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -198,6 +198,20 @@ dependencies:
198
198
  - - ">="
199
199
  - !ruby/object:Gem::Version
200
200
  version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: simplecov
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
201
215
  description:
202
216
  email:
203
217
  - engineering@zachahn.com
@@ -206,11 +220,8 @@ extensions: []
206
220
  extra_rdoc_files: []
207
221
  files:
208
222
  - ".yardopts"
209
- - CONTRIBUTING.md
210
223
  - LICENSE
211
224
  - README.md
212
- - Rakefile
213
- - STABILITY.md
214
225
  - app/assets/config/super_manifest.js
215
226
  - app/assets/javascripts/super/application.js
216
227
  - app/assets/stylesheets/super/application.css
@@ -218,45 +229,38 @@ files:
218
229
  - app/helpers/super/form_builder_helper.rb
219
230
  - app/views/layouts/super/application.html.erb
220
231
  - app/views/super/application/_collection_header.html.erb
232
+ - app/views/super/application/_display_actions.html.erb
233
+ - app/views/super/application/_display_index.html.erb
221
234
  - app/views/super/application/_display_rich_text.html.erb
235
+ - app/views/super/application/_display_show.html.erb
222
236
  - app/views/super/application/_filter.html.erb
223
237
  - app/views/super/application/_filter_type_select.html.erb
224
238
  - app/views/super/application/_filter_type_text.html.erb
225
239
  - app/views/super/application/_filter_type_timestamp.html.erb
226
240
  - app/views/super/application/_flash.html.erb
241
+ - app/views/super/application/_form.html.erb
242
+ - app/views/super/application/_form_field.html.erb
227
243
  - app/views/super/application/_form_field__destroy.html.erb
228
- - app/views/super/application/_form_field_checkbox.html.erb
229
- - app/views/super/application/_form_field_rich_text_area.html.erb
230
244
  - app/views/super/application/_form_field_select.html.erb
231
- - app/views/super/application/_form_field_text.html.erb
232
245
  - app/views/super/application/_form_fieldset.html.erb
233
246
  - app/views/super/application/_form_has_many.html.erb
234
247
  - app/views/super/application/_form_has_one.html.erb
248
+ - app/views/super/application/_layout.html.erb
235
249
  - app/views/super/application/_member_header.html.erb
236
- - app/views/super/application/_super_layout.html.erb
237
- - app/views/super/application/_super_pagination.html.erb
238
- - app/views/super/application/_super_panel.html.erb
239
- - app/views/super/application/_super_schema_display_actions.html.erb
240
- - app/views/super/application/_super_schema_display_index.html.erb
241
- - app/views/super/application/_super_schema_display_show.html.erb
242
- - app/views/super/application/_super_schema_form.html.erb
250
+ - app/views/super/application/_pagination.html.erb
251
+ - app/views/super/application/_panel.html.erb
252
+ - app/views/super/application/_query.html.erb
253
+ - app/views/super/application/_sort.html.erb
254
+ - app/views/super/application/_sort_expression.html.erb
243
255
  - app/views/super/application/edit.html.erb
244
256
  - app/views/super/application/index.html.erb
245
257
  - app/views/super/application/new.html.erb
246
258
  - app/views/super/application/nothing.html.erb
247
259
  - app/views/super/application/show.html.erb
248
260
  - app/views/super/feather/README.md
249
- - app/views/super/feather/_chevron_down.html
261
+ - app/views/super/feather/_x.html
250
262
  - config/locales/en.yml
251
263
  - config/routes.rb
252
- - docs/README.md
253
- - docs/action_text.md
254
- - docs/cheat.md
255
- - docs/faq.md
256
- - docs/installation.md
257
- - docs/quick_start.md
258
- - docs/webpacker.md
259
- - docs/yard_customizations.rb
260
264
  - frontend/super-frontend/dist/application.css
261
265
  - frontend/super-frontend/dist/application.js
262
266
  - lib/generators/super/action_text/USAGE
@@ -276,13 +280,15 @@ files:
276
280
  - lib/super.rb
277
281
  - lib/super/action_inquirer.rb
278
282
  - lib/super/assets.rb
283
+ - lib/super/badge.rb
284
+ - lib/super/cheat.rb
279
285
  - lib/super/client_error.rb
280
286
  - lib/super/compatibility.rb
281
287
  - lib/super/configuration.rb
282
288
  - lib/super/controls.rb
283
289
  - lib/super/controls/optional.rb
284
- - lib/super/controls/required.rb
285
290
  - lib/super/controls/steps.rb
291
+ - lib/super/controls/view.rb
286
292
  - lib/super/display.rb
287
293
  - lib/super/display/guesser.rb
288
294
  - lib/super/display/schema_types.rb
@@ -292,7 +298,6 @@ files:
292
298
  - lib/super/filter/form_object.rb
293
299
  - lib/super/filter/guesser.rb
294
300
  - lib/super/filter/operator.rb
295
- - lib/super/filter/plugin.rb
296
301
  - lib/super/filter/schema_types.rb
297
302
  - lib/super/form.rb
298
303
  - lib/super/form/builder.rb
@@ -302,21 +307,33 @@ files:
302
307
  - lib/super/form/strong_params.rb
303
308
  - lib/super/layout.rb
304
309
  - lib/super/link.rb
305
- - lib/super/navigation/automatic.rb
310
+ - lib/super/link_builder.rb
311
+ - lib/super/navigation.rb
306
312
  - lib/super/pagination.rb
307
313
  - lib/super/panel.rb
308
314
  - lib/super/partial.rb
309
315
  - lib/super/partial/resolving.rb
310
316
  - lib/super/plugin.rb
317
+ - lib/super/query/form_object.rb
318
+ - lib/super/reset.rb
311
319
  - lib/super/schema.rb
312
320
  - lib/super/schema/common.rb
313
321
  - lib/super/schema/guesser.rb
322
+ - lib/super/sort.rb
323
+ - lib/super/useful/builder.rb
324
+ - lib/super/useful/enum.rb
314
325
  - lib/super/version.rb
315
326
  - lib/super/view_helper.rb
327
+ - lib/tasks/super/cheat.rake
316
328
  homepage:
317
329
  licenses:
318
330
  - LGPL-3.0-only
319
- metadata: {}
331
+ metadata:
332
+ bug_tracker_uri: https://github.com/zachahn/super/issues
333
+ changelog_uri: https://github.com/zachahn/super/blob/main/CHANGELOG.md
334
+ documentation_uri: https://superadministration.github.io/
335
+ homepage_uri: https://github.com/zachahn/super
336
+ source_code_uri: https://github.com/zachahn/super
320
337
  post_install_message:
321
338
  rdoc_options: []
322
339
  require_paths: