super 0.0.7 → 0.0.8

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +56 -0
  3. data/README.md +6 -0
  4. data/STABILITY.md +50 -0
  5. data/app/assets/javascripts/super/application.js +12 -7
  6. data/app/controllers/super/application_controller.rb +1 -1
  7. data/app/views/layouts/super/application.html.erb +14 -6
  8. data/app/views/super/application/_super_panel.html.erb +1 -1
  9. data/app/views/super/application/_super_schema_display_index.html.erb +4 -4
  10. data/app/views/super/application/_super_schema_display_show.html.erb +3 -3
  11. data/app/views/super/application/_super_schema_form.html.erb +1 -1
  12. data/frontend/super-frontend/dist/application.js +12 -7
  13. data/frontend/super-frontend/src/javascripts/super/application.ts +5 -8
  14. data/lib/generators/super/resource/templates/resources_controller.rb.tt +1 -31
  15. data/lib/generators/super/webpacker/webpacker_generator.rb +3 -2
  16. data/lib/super.rb +11 -0
  17. data/lib/super/assets.rb +108 -38
  18. data/lib/super/configuration.rb +18 -73
  19. data/lib/super/controls.rb +2 -25
  20. data/lib/super/controls/optional.rb +41 -16
  21. data/lib/super/controls/required.rb +1 -29
  22. data/lib/super/controls/steps.rb +9 -23
  23. data/lib/super/display.rb +72 -0
  24. data/lib/super/display/guesser.rb +34 -0
  25. data/lib/super/display/schema_types.rb +19 -62
  26. data/lib/super/engine.rb +1 -1
  27. data/lib/super/filter.rb +5 -130
  28. data/lib/super/filter/form_object.rb +97 -0
  29. data/lib/super/filter/guesser.rb +30 -0
  30. data/lib/super/filter/plugin.rb +47 -0
  31. data/lib/super/filter/schema_types.rb +1 -7
  32. data/lib/super/form.rb +27 -40
  33. data/lib/super/form/builder.rb +48 -0
  34. data/lib/super/form/guesser.rb +27 -0
  35. data/lib/super/form/schema_types.rb +19 -29
  36. data/lib/super/form/strong_params.rb +29 -0
  37. data/lib/super/pagination.rb +10 -16
  38. data/lib/super/schema.rb +0 -25
  39. data/lib/super/schema/common.rb +25 -0
  40. data/lib/super/schema/guesser.rb +77 -0
  41. data/lib/super/version.rb +1 -1
  42. metadata +14 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8e7ba2e6b5845517d94684e487bdfed0779dcade517e3e3e89bff55fee6f258
4
- data.tar.gz: 62e2a405ed8d99a95de077babfdc9eb3b654d651b1887e8776d1dba609058f8e
3
+ metadata.gz: 6c7f47bcff0941f86aa7bdb0fa79fec029120128728fdcff3c4b8944dae7bf91
4
+ data.tar.gz: 58e5532e0d911cbbe859be53912f86967b29e1d77b9d9b221744114b84d1a5be
5
5
  SHA512:
6
- metadata.gz: 76bd34e08d34ea8797f0ed197b062a6be056247204a5f6badfea5a82f119c196d37b04a65ad2b1f25535885c013a1ebed7175399090078888cc528b997b57371
7
- data.tar.gz: 5933d518932ea142b70aa5ac3c844d497a5bea951ee7bd72ad1a128fabc911212e2c09b63857900b2eec881a97f28aff5682b6e5c9457a25f2d0dba431887900
6
+ metadata.gz: 2dc95583d9a8926a105a48515c695b9546d61eb9a8043c22741759b40620c85038affecaee527fce0356e635a2a9ef4327ff33dc5772469dcbd75cc4cf90eddc
7
+ data.tar.gz: b9539c0e2b57adc6ea1c78398ea5240291de73b7922dd42d8f8049f822c08be24dab24652c475273990c9392f7a3a58e1f277ea41e9db322358dcf653141c221
@@ -0,0 +1,56 @@
1
+ # Contributing
2
+
3
+ Thank you for thinking about contributing to Super!
4
+
5
+
6
+ ## General guidelines
7
+
8
+ There are a few ground rules that to adhere to:
9
+
10
+ * be friendly and patient,
11
+ * be welcoming,
12
+ * be considerate,
13
+ * be respectful,
14
+ * be careful in the words that you choose and be kind to others,
15
+ * when we disagree, try to understand why.
16
+
17
+ This isn't an exhaustive list of things that you can't do. Rather, take it in
18
+ the spirit in which it's intended - a guide to make it easier to communicate and
19
+ participate in the community.
20
+
21
+ This applies to all spaces managed by the Super project.
22
+
23
+ If you believe someone is violating the code of conduct, we ask that you report
24
+ it by emailing: super+conduct at zachahn.com
25
+
26
+ Offenders may be banned, asked to apologize, etc.
27
+
28
+ (These guidelines are based on the [FreeBSD CoC][FreeBSD CoC], which in turn is
29
+ based on [LLVM Project's draft CoC][LLVM CoC], which in turn is based on the
30
+ [Django Project Code of Conduct][Django CoC], which is in turn based on wording
31
+ from the Speak Up! project.)
32
+
33
+
34
+ ## Bug reports / issues
35
+
36
+ 1. Please tell us what version of Super, Ruby, and Rails you are using
37
+ 1. Please search the issues before posting your problem
38
+ 1. Please ask questions in a public place to benefit all Super users
39
+ 1. Please email security-related problems to super+security [at] zachahn.com
40
+
41
+
42
+ ## Feature requests / pull requests
43
+
44
+ Contributors will need to sign a CLA. This isn't set up yet, so I won't be able
45
+ to accept contributions.
46
+
47
+ 1. Please note that pull requests may be closed/denied for any reason.
48
+ Your feature may be better as its own repository. If so, I will link to your
49
+ project from the README!
50
+ 1. Please allow Super's contributors to modify your PR before merging.
51
+ It might make the process a bit smoother, but this isn't a necessity.
52
+
53
+
54
+ [FreeBSD CoC]: https://www.freebsd.org/internal/code-of-conduct.html
55
+ [LLVM CoC]: https://llvm.org/docs/CodeOfConduct.html
56
+ [Django CoC]: https://www.djangoproject.com/conduct/
data/README.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Super
2
2
 
3
+ ![Unit tests status](https://github.com/zachahn/super/workflows/Unit%20tests/badge.svg?branch=master)
4
+ [![Gem](https://img.shields.io/gem/v/super)][gem]
5
+ [![Try the demo](https://img.shields.io/badge/try-demo-blue)][super_demo]
6
+
7
+
3
8
  Super is an admin framework for Ruby on Rails applications. Super helps you make
4
9
  powerful admin pages quickly so that you can concentrate on the parts of your
5
10
  app that make it great.
@@ -103,6 +108,7 @@ See [CONTRIBUTING](./CONTRIBUTING.md)
103
108
  The gem is available under the terms of the [GNU LGPLv3](./LICENSE).
104
109
 
105
110
 
111
+ [gem]: https://rubygems.org/gems/super
106
112
  [Administrate]: https://github.com/thoughtbot/administrate
107
113
  [ActiveAdmin]: https://github.com/activeadmin/activeadmin
108
114
  [RailsAdmin]: https://github.com/sferik/rails_admin
@@ -0,0 +1,50 @@
1
+ # Stability
2
+
3
+ The table below shows the current progress towards API stability and the release
4
+ of version 1.0.
5
+
6
+ Note though that it is neither a comprehensive list nor a guarantee of
7
+ stability.
8
+
9
+
10
+ <table>
11
+ <thead>
12
+ <tr><th>Feature</th><th>Status</th></tr>
13
+ </thead>
14
+ <tbody>
15
+ <tr><td>UI</td> <td>❌</td></tr>
16
+ <tr><td>Frontend JS</td> <td>❌</td></tr>
17
+ <tr><td><code>Super::ActionInquirer</code></td> <td>✅</td></tr>
18
+ <tr><td><code>Super::ApplicationController</code></td> <td>✅</td></tr>
19
+ <tr><td><code>Super::Assets</code></td> <td>🚧</td></tr>
20
+ <tr><td><code>Super::ClientError</code></td> <td>✅</td></tr>
21
+ <tr><td><code>Super::Compatability</code></td> <td>🙈</td></tr>
22
+ <tr><td><code>Super::Configuration</code></td> <td>❌</td></tr>
23
+ <tr><td><code>Super::Controls::Optional</code></td> <td>✅</td></tr>
24
+ <tr><td><code>Super::Controls::Required</code></td> <td>✅</td></tr>
25
+ <tr><td><code>Super::Controls::Steps</code></td> <td>🤔</td></tr>
26
+ <tr><td><code>Super::Controls</code></td> <td>✅</td></tr>
27
+ <tr><td><code>Super::Display</code></td> <td>🤔</td></tr>
28
+ <tr><td><code>Super::Engine</code></td> <td>🙈</td></tr>
29
+ <tr><td><code>Super::Error</code></td> <td>✅</td></tr>
30
+ <tr><td><code>Super::Filter</code></td> <td>❌</td></tr>
31
+ <tr><td><code>Super::Form</code></td> <td>🤔</td></tr>
32
+ <tr><td><code>Super::Layout</code></td> <td>🤔</td></tr>
33
+ <tr><td><code>Super::Link</code></td> <td>✅</td></tr>
34
+ <tr><td><code>Super::Navigation</code></td> <td>🤔</td></tr>
35
+ <tr><td><code>Super::Pagination</code></td> <td>🤔</td></tr>
36
+ <tr><td><code>Super::Panel</code></td> <td>🤔</td></tr>
37
+ <tr><td><code>Super::Partial</code></td> <td>🤔</td></tr>
38
+ <tr><td><code>Super::Plugin</code></td> <td>✅</td></tr>
39
+ <tr><td><code>Super::ViewHelper</code></td> <td>❌</td></tr>
40
+ </tbody>
41
+ </table>
42
+
43
+
44
+ ### Legend
45
+
46
+ * ✅ Tentatively stable. Further changes will probably be additive
47
+ * 🚧 Likely upcoming breaking changes
48
+ * ❌ Planned upcoming breaking changes
49
+ * 🤔 Undecided
50
+ * 🙈 Private API
@@ -4399,21 +4399,26 @@ var __importDefault = this && this.__importDefault || function (mod) {
4399
4399
  Object.defineProperty(exports, "__esModule", {
4400
4400
  value: true
4401
4401
  });
4402
+ exports.StimulusController = exports.StimulusApplication = void 0;
4402
4403
 
4403
4404
  var ujs_1 = __importDefault(require("@rails/ujs"));
4404
4405
 
4405
4406
  var stimulus_1 = require("stimulus");
4406
4407
 
4408
+ Object.defineProperty(exports, "StimulusController", {
4409
+ enumerable: true,
4410
+ get: function get() {
4411
+ return stimulus_1.Controller;
4412
+ }
4413
+ });
4414
+
4407
4415
  var apply_template_controller_1 = __importDefault(require("./apply_template_controller"));
4408
4416
 
4409
4417
  var toggle_pending_destruction_controller_1 = __importDefault(require("./toggle_pending_destruction_controller"));
4410
4418
 
4411
4419
  ujs_1.default.start();
4412
- var application = stimulus_1.Application.start();
4413
- application.register("apply-template", apply_template_controller_1.default);
4414
- application.register("toggle-pending-destruction", toggle_pending_destruction_controller_1.default);
4415
- exports.default = {
4416
- StimulusApplication: application,
4417
- StimulusController: stimulus_1.Controller
4418
- };
4420
+ var StimulusApplication = stimulus_1.Application.start();
4421
+ exports.StimulusApplication = StimulusApplication;
4422
+ StimulusApplication.register("apply-template", apply_template_controller_1.default);
4423
+ StimulusApplication.register("toggle-pending-destruction", toggle_pending_destruction_controller_1.default);
4419
4424
  },{"@rails/ujs":"../node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","stimulus":"../node_modules/stimulus/index.js","./apply_template_controller":"javascripts/super/apply_template_controller.ts","./toggle_pending_destruction_controller":"javascripts/super/toggle_pending_destruction_controller.ts"}]},{},["javascripts/super/application.ts"], "Super")
@@ -78,7 +78,7 @@ module Super
78
78
  private
79
79
 
80
80
  def controls
81
- Super::Controls.new(new_controls)
81
+ @controls ||= new_controls
82
82
  end
83
83
 
84
84
  def action_inquirer
@@ -9,12 +9,20 @@
9
9
 
10
10
  <meta name="viewport" content="width=device-width, initial-scale=1">
11
11
 
12
- <% if Super.configuration.asset_handler.sprockets? %>
13
- <%= stylesheet_link_tag "super/application", media: "all" %>
14
- <%= javascript_include_tag "super/application" %>
15
- <% elsif Super.configuration.asset_handler.webpacker? %>
16
- <%= stylesheet_pack_tag "super/application", media: "all" %>
17
- <%= javascript_pack_tag "super/application" %>
12
+ <% Super.configuration.stylesheets.each do |stylesheet| %>
13
+ <% if stylesheet.handler.sprockets? %>
14
+ <%= stylesheet_link_tag(stylesheet.path, **stylesheet.arguments) %>
15
+ <% elsif stylesheet.handler.webpacker? %>
16
+ <%= stylesheet_pack_tag(stylesheet.path, **stylesheet.arguments) %>
17
+ <% end %>
18
+ <% end %>
19
+
20
+ <% Super.configuration.javascripts.each do |javascript| %>
21
+ <% if javascript.handler.sprockets? %>
22
+ <%= javascript_include_tag(javascript.path) %>
23
+ <% elsif javascript.handler.webpacker? %>
24
+ <%= javascript_pack_tag(javascript.path) %>
25
+ <% end %>
18
26
  <% end %>
19
27
  </head>
20
28
 
@@ -1,4 +1,4 @@
1
- <% if super_panel.resolve(self, block_given? ? Proc.new : nil).resolved_parts.any? %>
1
+ <% if super_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
  <% super_panel.resolved_parts.each do |partial| %>
4
4
  <%= Super::Partial.render(partial, template: self) %>
@@ -2,9 +2,9 @@
2
2
  <table class="w-full border-separate relative" cellspacing="0" cellpadding="0">
3
3
  <thead class="">
4
4
  <tr class="">
5
- <% super_schema_display_index.field_keys.each do |column| %>
5
+ <% super_schema_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 sticky top-0 z-10">
7
- <%= controls.model.human_attribute_name(column) %>
7
+ <%= controls.model.human_attribute_name(attribute_name) %>
8
8
  </th>
9
9
  <% end %>
10
10
  </tr>
@@ -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
- <% super_schema_display_index.field_keys.each do |column| %>
15
+ <% super_schema_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
- <%= super_schema_display_index.schema_type.render_field(template: self, record: record, column: column) %>
17
+ <%= super_schema_display_index.render_field(template: self, record: record, column: attribute_name) %>
18
18
  </td>
19
19
  <% end %>
20
20
  </tr>
@@ -1,8 +1,8 @@
1
1
  <table class="max-w-full leading-loose mt-4">
2
- <% super_schema_display_show.field_keys.each do |column| %>
2
+ <% super_schema_display_show.each_attribute_name do |attribute_name| %>
3
3
  <tr>
4
- <th class="text-right px-4"><%= column.to_s.humanize %></th>
5
- <td><%= super_schema_display_show.schema_type.render_field(template: self, record: @record, column: column) %></td>
4
+ <th class="text-right px-4"><%= controls.model.human_attribute_name(attribute_name) %></th>
5
+ <td><%= super_schema_display_show.render_field(template: self, record: @record, column: attribute_name) %></td>
6
6
  </tr>
7
7
  <% end %>
8
8
  </table>
@@ -1,6 +1,6 @@
1
1
  <%= form_for(Super.configuration.path_parts(@record), builder: Super::Form::Builder) do |f| %>
2
2
  <div class="max-w-3xl">
3
- <% super_schema_form.fields.each do |field, type| %>
3
+ <% super_schema_form.each_attribute do |field, type| %>
4
4
  <%= render(
5
5
  type,
6
6
  form: f,
@@ -4399,21 +4399,26 @@ var __importDefault = this && this.__importDefault || function (mod) {
4399
4399
  Object.defineProperty(exports, "__esModule", {
4400
4400
  value: true
4401
4401
  });
4402
+ exports.StimulusController = exports.StimulusApplication = void 0;
4402
4403
 
4403
4404
  var ujs_1 = __importDefault(require("@rails/ujs"));
4404
4405
 
4405
4406
  var stimulus_1 = require("stimulus");
4406
4407
 
4408
+ Object.defineProperty(exports, "StimulusController", {
4409
+ enumerable: true,
4410
+ get: function get() {
4411
+ return stimulus_1.Controller;
4412
+ }
4413
+ });
4414
+
4407
4415
  var apply_template_controller_1 = __importDefault(require("./apply_template_controller"));
4408
4416
 
4409
4417
  var toggle_pending_destruction_controller_1 = __importDefault(require("./toggle_pending_destruction_controller"));
4410
4418
 
4411
4419
  ujs_1.default.start();
4412
- var application = stimulus_1.Application.start();
4413
- application.register("apply-template", apply_template_controller_1.default);
4414
- application.register("toggle-pending-destruction", toggle_pending_destruction_controller_1.default);
4415
- exports.default = {
4416
- StimulusApplication: application,
4417
- StimulusController: stimulus_1.Controller
4418
- };
4420
+ var StimulusApplication = stimulus_1.Application.start();
4421
+ exports.StimulusApplication = StimulusApplication;
4422
+ StimulusApplication.register("apply-template", apply_template_controller_1.default);
4423
+ StimulusApplication.register("toggle-pending-destruction", toggle_pending_destruction_controller_1.default);
4419
4424
  },{"@rails/ujs":"../node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","stimulus":"../node_modules/stimulus/index.js","./apply_template_controller":"javascripts/super/apply_template_controller.ts","./toggle_pending_destruction_controller":"javascripts/super/toggle_pending_destruction_controller.ts"}]},{},["javascripts/super/application.ts"], "Super")
@@ -1,18 +1,15 @@
1
1
  import RailsUjs from "@rails/ujs";
2
- import { Application, Controller } from "stimulus";
2
+ import { Application, Controller as StimulusController } from "stimulus";
3
3
  import ApplyTemplateController from "./apply_template_controller";
4
4
  import TogglePendingDestructionController from "./toggle_pending_destruction_controller";
5
5
 
6
6
  RailsUjs.start();
7
7
 
8
- const application = Application.start();
9
- application.register("apply-template", ApplyTemplateController);
10
- application.register(
8
+ let StimulusApplication = Application.start();
9
+ StimulusApplication.register("apply-template", ApplyTemplateController);
10
+ StimulusApplication.register(
11
11
  "toggle-pending-destruction",
12
12
  TogglePendingDestructionController
13
13
  );
14
14
 
15
- export default {
16
- StimulusApplication: application,
17
- StimulusController: Controller,
18
- };
15
+ export { StimulusApplication, StimulusController };
@@ -6,40 +6,10 @@ class <%= class_name.pluralize %>Controller < <%= parent_controller_name %>
6
6
  Controls.new
7
7
  end
8
8
 
9
- class Controls
10
- def title
11
- <%= class_name %>.name.pluralize
12
- end
13
-
9
+ class Controls < Super::Controls
14
10
  def model
15
11
  <%= class_name %>
16
12
  end
17
-
18
- def scope(action:)
19
- if action.read?
20
- <%= class_name %>.all
21
- else
22
- <%= class_name %>.all
23
- end
24
- end
25
-
26
- def permitted_params(params, action:)
27
- if action.create?
28
- params.require(:<%= file_name %>).permit()
29
- else
30
- params.require(:<%= file_name %>).permit()
31
- end
32
- end
33
-
34
- def display_schema(action:)
35
- Super::Schema.new(Super::Display::SchemaTypes.new) do |fields, type|
36
- end
37
- end
38
-
39
- def form_schema(action:)
40
- Super::Schema.new(Super::Form::SchemaTypes.new) do |fields, type|
41
- end
42
- end
43
13
  end
44
14
  end
45
15
  <% end -%>
@@ -12,14 +12,15 @@ module Super
12
12
  def set_asset_handler_to_webpacker
13
13
  insert_into_file(
14
14
  "config/initializers/super.rb",
15
- " c.asset_handler = Super::Assets.webpacker\n",
15
+ " c.javascripts = Super::Assets.use_webpacker(c.javascripts)\n" \
16
+ " c.stylesheets = Super::Assets.use_webpacker(c.stylesheets)\n",
16
17
  before: /\bend\b/
17
18
  )
18
19
  end
19
20
 
20
21
  def remind_about_erb
21
22
  say "Make sure ERB is set up for Webpacker!", :bold
22
- say "Run if needed: rails webpacker:install:erb", :bold
23
+ say "Run if needed: bundle exec rails webpacker:install:erb"
23
24
  end
24
25
  end
25
26
  end
@@ -2,19 +2,29 @@ require "tsort"
2
2
 
3
3
  require "rails/engine"
4
4
 
5
+ require "super/schema/common"
6
+
5
7
  require "super/action_inquirer"
6
8
  require "super/assets"
7
9
  require "super/client_error"
8
10
  require "super/compatibility"
9
11
  require "super/configuration"
10
12
  require "super/controls"
13
+ require "super/display"
14
+ require "super/display/guesser"
11
15
  require "super/display/schema_types"
12
16
  require "super/error"
13
17
  require "super/filter"
18
+ require "super/filter/form_object"
19
+ require "super/filter/guesser"
14
20
  require "super/filter/operator"
21
+ require "super/filter/plugin"
15
22
  require "super/filter/schema_types"
16
23
  require "super/form"
24
+ require "super/form/builder"
25
+ require "super/form/guesser"
17
26
  require "super/form/schema_types"
27
+ require "super/form/strong_params"
18
28
  require "super/layout"
19
29
  require "super/link"
20
30
  require "super/navigation/automatic"
@@ -23,6 +33,7 @@ require "super/panel"
23
33
  require "super/partial"
24
34
  require "super/plugin"
25
35
  require "super/schema"
36
+ require "super/schema/guesser"
26
37
  require "super/version"
27
38
  require "super/view_helper"
28
39
 
@@ -1,8 +1,64 @@
1
1
  module Super
2
2
  # Utilities for determining whether to use Sprockets or Webpacker
3
3
  class Assets
4
- def self.sprockets_available?
5
- Gem::Dependency.new("sprockets").matching_specs.any?
4
+ def self.webpacker(path, **arguments)
5
+ Asset.new(handler: Handler.webpacker, path: path, arguments: arguments)
6
+ end
7
+
8
+ def self.sprockets(path, **arguments)
9
+ Asset.new(handler: Handler.sprockets, path: path, arguments: arguments)
10
+ end
11
+
12
+ def self.auto(path, **arguments)
13
+ Asset.new(handler: Handler.auto, path: path, arguments: arguments)
14
+ end
15
+
16
+ def self.use_webpacker(assets, grep: nil)
17
+ assets = [assets] if !assets.kind_of?(Array)
18
+
19
+ assets.map do |asset|
20
+ grep_matches = grep && asset === grep
21
+ if grep_matches || !grep
22
+ asset.instance_variable_set(:@handler, Handler.webpacker)
23
+ end
24
+
25
+ asset
26
+ end
27
+ end
28
+
29
+ def self.use_sprockets(assets, grep: nil)
30
+ assets = [assets] if !assets.kind_of?(Array)
31
+
32
+ assets.map do |asset|
33
+ grep_matches = grep && asset === grep
34
+ if grep_matches || !grep
35
+ asset.instance_variable_set(:@asset_handler, Handler.sprockets)
36
+ end
37
+
38
+ asset
39
+ end
40
+ end
41
+
42
+ class Asset
43
+ def initialize(handler:, path:, arguments:)
44
+ @handler = handler
45
+ @path = path
46
+ @arguments = arguments
47
+ end
48
+
49
+ attr_reader :handler
50
+ attr_reader :path
51
+ attr_reader :arguments
52
+
53
+ def ===(other)
54
+ return true if path == other
55
+ return true if other.is_a?(Regexp) && path.match?(other)
56
+ return true if handler == other
57
+ return true if handler.to_sym == other
58
+ return true if handler.to_s == other
59
+
60
+ false
61
+ end
6
62
  end
7
63
 
8
64
  def self.dist(gem_name, package_name)
@@ -15,49 +71,63 @@ module Super
15
71
  gem_path.join("frontend", package_name, "dist")
16
72
  end
17
73
 
18
- def self.auto
19
- @auto ||=
20
- if Gem::Dependency.new("sprockets", "~> 4.0").matching_specs.any?
21
- sprockets
22
- elsif Gem::Dependency.new("sprockets", "~> 3.0").matching_specs.any?
23
- sprockets
24
- elsif Gem::Dependency.new("sprockets", "~> 2.0").matching_specs.any?
25
- sprockets
26
- elsif Gem::Dependency.new("webpacker", "~> 4.0").matching_specs.any?
27
- webpacker
28
- elsif Gem::Dependency.new("webpacker", "~> 3.0").matching_specs.any?
29
- webpacker
30
- else
31
- none
32
- end
33
- end
74
+ class Handler
75
+ def self.auto
76
+ @auto ||=
77
+ if Gem::Dependency.new("sprockets", "~> 4.0").matching_specs.any?
78
+ sprockets
79
+ elsif Gem::Dependency.new("sprockets", "~> 3.0").matching_specs.any?
80
+ sprockets
81
+ elsif Gem::Dependency.new("sprockets", "~> 2.0").matching_specs.any?
82
+ sprockets
83
+ elsif Gem::Dependency.new("webpacker", "~> 4.0").matching_specs.any?
84
+ webpacker
85
+ elsif Gem::Dependency.new("webpacker", "~> 3.0").matching_specs.any?
86
+ webpacker
87
+ else
88
+ none
89
+ end
90
+ end
34
91
 
35
- def self.sprockets
36
- new(:sprockets)
37
- end
92
+ def self.sprockets_available?
93
+ Gem::Dependency.new("sprockets").matching_specs.any? && defined?(Sprockets)
94
+ end
38
95
 
39
- def self.webpacker
40
- new(:webpacker)
41
- end
96
+ def self.sprockets
97
+ @sprockets ||= new(:sprockets)
98
+ end
42
99
 
43
- def self.none
44
- new(:none)
45
- end
100
+ def self.webpacker
101
+ @webpacker ||= new(:webpacker)
102
+ end
46
103
 
47
- def initialize(asset_handler)
48
- @asset_handler = asset_handler
49
- end
104
+ def self.none
105
+ @none ||= new(:none)
106
+ end
50
107
 
51
- def sprockets?
52
- @asset_handler == :sprockets
53
- end
108
+ def initialize(asset_handler)
109
+ @asset_handler = asset_handler
110
+ end
54
111
 
55
- def webpacker?
56
- @asset_handler == :webpacker
57
- end
112
+ def sprockets?
113
+ @asset_handler == :sprockets
114
+ end
115
+
116
+ def webpacker?
117
+ @asset_handler == :webpacker
118
+ end
119
+
120
+ def none?
121
+ @asset_handler == :none
122
+ end
123
+
124
+ def to_sym
125
+ @asset_handler
126
+ end
58
127
 
59
- def none?
60
- @asset_handler == :none
128
+ def to_s
129
+ @asset_handler.to_s
130
+ end
61
131
  end
62
132
  end
63
133
  end