super 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +16 -14
  3. data/app/assets/javascripts/super/application.js +191 -1
  4. data/app/controllers/super/application_controller.rb +14 -8
  5. data/app/helpers/super/form_builder_helper.rb +2 -0
  6. data/app/views/super/application/_filter.html.erb +5 -13
  7. data/app/views/super/application/_filter_type_select.html.erb +4 -1
  8. data/app/views/super/application/_filter_type_text.html.erb +5 -3
  9. data/app/views/super/application/_filter_type_timestamp.html.erb +5 -4
  10. data/app/views/super/application/_query.html.erb +18 -0
  11. data/app/views/super/application/_sort.html.erb +18 -0
  12. data/app/views/super/application/_sort_expression.html.erb +25 -0
  13. data/app/views/super/feather/README.md +1 -0
  14. data/app/views/super/feather/_x.html +15 -0
  15. data/config/routes.rb +2 -0
  16. data/docs/action_text.md +1 -1
  17. data/docs/yard_customizations.rb +2 -0
  18. data/frontend/super-frontend/dist/application.js +191 -1
  19. data/lib/generators/super/action_text/action_text_generator.rb +2 -0
  20. data/lib/generators/super/install/install_generator.rb +2 -0
  21. data/lib/generators/super/resource/resource_generator.rb +2 -0
  22. data/lib/generators/super/webpacker/webpacker_generator.rb +2 -0
  23. data/lib/super.rb +4 -1
  24. data/lib/super/action_inquirer.rb +2 -0
  25. data/lib/super/assets.rb +2 -0
  26. data/lib/super/client_error.rb +2 -0
  27. data/lib/super/compatibility.rb +2 -0
  28. data/lib/super/configuration.rb +2 -1
  29. data/lib/super/controls.rb +4 -0
  30. data/lib/super/controls/optional.rb +34 -1
  31. data/lib/super/controls/required.rb +2 -0
  32. data/lib/super/controls/steps.rb +27 -35
  33. data/lib/super/controls/view.rb +55 -0
  34. data/lib/super/display.rb +13 -5
  35. data/lib/super/display/guesser.rb +2 -0
  36. data/lib/super/display/schema_types.rb +2 -0
  37. data/lib/super/engine.rb +2 -0
  38. data/lib/super/error.rb +5 -0
  39. data/lib/super/filter.rb +2 -0
  40. data/lib/super/filter/form_object.rb +5 -8
  41. data/lib/super/filter/guesser.rb +2 -0
  42. data/lib/super/filter/operator.rb +2 -0
  43. data/lib/super/filter/schema_types.rb +2 -0
  44. data/lib/super/form.rb +2 -0
  45. data/lib/super/form/builder.rb +2 -0
  46. data/lib/super/form/guesser.rb +2 -0
  47. data/lib/super/form/inline_errors.rb +2 -0
  48. data/lib/super/form/schema_types.rb +2 -0
  49. data/lib/super/form/strong_params.rb +2 -0
  50. data/lib/super/layout.rb +2 -0
  51. data/lib/super/link.rb +2 -0
  52. data/lib/super/navigation/automatic.rb +2 -0
  53. data/lib/super/pagination.rb +2 -0
  54. data/lib/super/panel.rb +2 -0
  55. data/lib/super/partial.rb +2 -0
  56. data/lib/super/partial/resolving.rb +2 -0
  57. data/lib/super/plugin.rb +2 -0
  58. data/lib/super/query/form_object.rb +48 -0
  59. data/lib/super/schema.rb +2 -0
  60. data/lib/super/schema/common.rb +2 -0
  61. data/lib/super/schema/guesser.rb +2 -0
  62. data/lib/super/sort.rb +110 -0
  63. data/lib/super/version.rb +3 -1
  64. data/lib/super/view_helper.rb +2 -0
  65. metadata +23 -3
  66. data/lib/super/filter/plugin.rb +0 -47
@@ -0,0 +1,18 @@
1
+ <h1 class="text-lg mt-6">Sort</h1>
2
+ <div data-controller="apply-template">
3
+ <% sort.exprs.each.with_index do |expr, index| %>
4
+ <%= form.fields_for("exprs[]", expr.with_index(index)) do |expr_fields| %>
5
+ <%= render "sort_expression", expr_fields: expr_fields, sort: sort %>
6
+ <% end %>
7
+ <% end %>
8
+
9
+ <%= form.fields_for("exprs[]", sort.new_expr.with_index("TEMPLATEINDEX")) do |expr_fields| %>
10
+ <template data-apply-template-target="template">
11
+ <%= render "sort_expression", expr_fields: expr_fields, sort: sort %>
12
+ </template>
13
+ <% end %>
14
+
15
+ <a href="#" data-action="apply-template#call" class="block mt-2 text-sm">
16
+ Add
17
+ </a>
18
+ </div>
@@ -0,0 +1,25 @@
1
+ <div data-controller="delete clean-filter-param" class="mt-4">
2
+ <div class="flex items-center">
3
+ <div class="flex-auto">
4
+ <%= expr_fields.super.select(
5
+ :a,
6
+ sort.sortable_columns,
7
+ {},
8
+ {}
9
+ ) %>
10
+ </div>
11
+ <div class="flex-none w-2">
12
+ </div>
13
+ <div class="flex-auto">
14
+ <%= expr_fields.super.select(
15
+ :d,
16
+ sort.class::DIRECTIONS,
17
+ { include_blank: false },
18
+ {}
19
+ ) %>
20
+ </div>
21
+ <div class="flex-none pl-2">
22
+ <a href="#" data-action="delete#call" class="block text-black hover:text-red-600 h-4 w-4"><%= render("super/feather/x") %></a>
23
+ </div>
24
+ </div>
25
+ </div>
@@ -3,6 +3,7 @@
3
3
  Vendored from: https://github.com/feathericons/feather
4
4
 
5
5
  * `icons/chevron-down.svg` @ `3c64e93543fab6befab54c3abd013dd8db52509e`
6
+ * `icons/x.svg` @ `a718a7e9c39447202f703783336e8ba1c8e32405`
6
7
 
7
8
 
8
9
  ## License
@@ -0,0 +1,15 @@
1
+ <svg
2
+ xmlns="http://www.w3.org/2000/svg"
3
+ width="24"
4
+ height="24"
5
+ viewBox="0 0 24 24"
6
+ fill="none"
7
+ stroke="currentColor"
8
+ stroke-width="2"
9
+ stroke-linecap="round"
10
+ stroke-linejoin="round"
11
+ class="feather feather-x"
12
+ >
13
+ <line x1="18" y1="6" x2="6" y2="18" />
14
+ <line x1="6" y1="6" x2="18" y2="18" />
15
+ </svg>
data/config/routes.rb CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Rails.application.routes.draw do
2
4
  end
data/docs/action_text.md CHANGED
@@ -39,7 +39,7 @@ class Controls < Super::Controls
39
39
  end
40
40
 
41
41
  def display_schema(action:)
42
- Super::Display.new(action: action) do |fields, type|
42
+ Super::Display.new do |fields, type|
43
43
  fields[:title] = type.text
44
44
  fields[:content] = type.rich_text
45
45
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "yard"
2
4
 
3
5
  module FixRelativeLinks
@@ -4332,6 +4332,187 @@ var _default = /*#__PURE__*/function (_Controller) {
4332
4332
  return _default;
4333
4333
  }(_stimulus.Controller);
4334
4334
 
4335
+ exports.default = _default;
4336
+ },{"stimulus":"../node_modules/stimulus/index.js"}],"javascripts/super/clean_filter_param_controller.js":[function(require,module,exports) {
4337
+ "use strict";
4338
+
4339
+ Object.defineProperty(exports, "__esModule", {
4340
+ value: true
4341
+ });
4342
+ exports.default = void 0;
4343
+
4344
+ var _stimulus = require("stimulus");
4345
+
4346
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4347
+
4348
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4349
+
4350
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
4351
+
4352
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
4353
+
4354
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
4355
+
4356
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
4357
+
4358
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
4359
+
4360
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
4361
+
4362
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
4363
+
4364
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
4365
+
4366
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
4367
+
4368
+ var _default = /*#__PURE__*/function (_Controller) {
4369
+ _inherits(_default, _Controller);
4370
+
4371
+ var _super = _createSuper(_default);
4372
+
4373
+ function _default() {
4374
+ _classCallCheck(this, _default);
4375
+
4376
+ return _super.apply(this, arguments);
4377
+ }
4378
+
4379
+ _createClass(_default, [{
4380
+ key: "call",
4381
+ value: function call() {
4382
+ var allControlsBlank = this.controlTargets.every(function (el) {
4383
+ return el.value === "";
4384
+ });
4385
+
4386
+ if (!allControlsBlank) {
4387
+ return;
4388
+ }
4389
+
4390
+ this.candidateTargets.forEach(function (el) {
4391
+ el.disabled = true;
4392
+ });
4393
+ }
4394
+ }], [{
4395
+ key: "targets",
4396
+ get: function get() {
4397
+ return ["candidate", "control"];
4398
+ }
4399
+ }]);
4400
+
4401
+ return _default;
4402
+ }(_stimulus.Controller);
4403
+
4404
+ exports.default = _default;
4405
+ },{"stimulus":"../node_modules/stimulus/index.js"}],"javascripts/super/clean_filter_params_controller.js":[function(require,module,exports) {
4406
+ "use strict";
4407
+
4408
+ Object.defineProperty(exports, "__esModule", {
4409
+ value: true
4410
+ });
4411
+ exports.default = void 0;
4412
+
4413
+ var _stimulus = require("stimulus");
4414
+
4415
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4416
+
4417
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4418
+
4419
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
4420
+
4421
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
4422
+
4423
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
4424
+
4425
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
4426
+
4427
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
4428
+
4429
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
4430
+
4431
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
4432
+
4433
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
4434
+
4435
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
4436
+
4437
+ var _default = /*#__PURE__*/function (_Controller) {
4438
+ _inherits(_default, _Controller);
4439
+
4440
+ var _super = _createSuper(_default);
4441
+
4442
+ function _default() {
4443
+ _classCallCheck(this, _default);
4444
+
4445
+ return _super.apply(this, arguments);
4446
+ }
4447
+
4448
+ _createClass(_default, [{
4449
+ key: "call",
4450
+ value: function call(event) {
4451
+ this.element.querySelectorAll("[data-controller='clean-filter-param']").forEach(function (el) {
4452
+ var controller = this.application.getControllerForElementAndIdentifier(el, "clean-filter-param");
4453
+ controller.call();
4454
+ }.bind(this));
4455
+ }
4456
+ }]);
4457
+
4458
+ return _default;
4459
+ }(_stimulus.Controller);
4460
+
4461
+ exports.default = _default;
4462
+ },{"stimulus":"../node_modules/stimulus/index.js"}],"javascripts/super/delete_controller.js":[function(require,module,exports) {
4463
+ "use strict";
4464
+
4465
+ Object.defineProperty(exports, "__esModule", {
4466
+ value: true
4467
+ });
4468
+ exports.default = void 0;
4469
+
4470
+ var _stimulus = require("stimulus");
4471
+
4472
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4473
+
4474
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4475
+
4476
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
4477
+
4478
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
4479
+
4480
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
4481
+
4482
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
4483
+
4484
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
4485
+
4486
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
4487
+
4488
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
4489
+
4490
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
4491
+
4492
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
4493
+
4494
+ var _default = /*#__PURE__*/function (_Controller) {
4495
+ _inherits(_default, _Controller);
4496
+
4497
+ var _super = _createSuper(_default);
4498
+
4499
+ function _default() {
4500
+ _classCallCheck(this, _default);
4501
+
4502
+ return _super.apply(this, arguments);
4503
+ }
4504
+
4505
+ _createClass(_default, [{
4506
+ key: "call",
4507
+ value: function call(event) {
4508
+ event.preventDefault();
4509
+ this.element.remove();
4510
+ }
4511
+ }]);
4512
+
4513
+ return _default;
4514
+ }(_stimulus.Controller);
4515
+
4335
4516
  exports.default = _default;
4336
4517
  },{"stimulus":"../node_modules/stimulus/index.js"}],"javascripts/super/toggle_pending_destruction_controller.js":[function(require,module,exports) {
4337
4518
  "use strict";
@@ -4415,6 +4596,12 @@ var _stimulus = require("stimulus");
4415
4596
 
4416
4597
  var _apply_template_controller = _interopRequireDefault(require("./apply_template_controller"));
4417
4598
 
4599
+ var _clean_filter_param_controller = _interopRequireDefault(require("./clean_filter_param_controller"));
4600
+
4601
+ var _clean_filter_params_controller = _interopRequireDefault(require("./clean_filter_params_controller"));
4602
+
4603
+ var _delete_controller = _interopRequireDefault(require("./delete_controller"));
4604
+
4418
4605
  var _toggle_pending_destruction_controller = _interopRequireDefault(require("./toggle_pending_destruction_controller"));
4419
4606
 
4420
4607
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -4425,5 +4612,8 @@ var StimulusApplication = _stimulus.Application.start();
4425
4612
 
4426
4613
  exports.StimulusApplication = StimulusApplication;
4427
4614
  StimulusApplication.register("apply-template", _apply_template_controller.default);
4615
+ StimulusApplication.register("clean-filter-param", _clean_filter_param_controller.default);
4616
+ StimulusApplication.register("clean-filter-params", _clean_filter_params_controller.default);
4617
+ StimulusApplication.register("delete", _delete_controller.default);
4428
4618
  StimulusApplication.register("toggle-pending-destruction", _toggle_pending_destruction_controller.default);
4429
- },{"@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.js","./toggle_pending_destruction_controller":"javascripts/super/toggle_pending_destruction_controller.js"}]},{},["javascripts/super/application.js"], "Super")
4619
+ },{"@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.js","./clean_filter_param_controller":"javascripts/super/clean_filter_param_controller.js","./clean_filter_params_controller":"javascripts/super/clean_filter_params_controller.js","./delete_controller":"javascripts/super/delete_controller.js","./toggle_pending_destruction_controller":"javascripts/super/toggle_pending_destruction_controller.js"}]},{},["javascripts/super/application.js"], "Super")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class ActionTextGenerator < Rails::Generators::Base
3
5
  source_root File.expand_path("templates", __dir__)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class InstallGenerator < Rails::Generators::Base
3
5
  source_root File.expand_path("templates", __dir__)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class ResourceGenerator < Rails::Generators::NamedBase
3
5
  source_root File.expand_path("templates", __dir__)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class WebpackerGenerator < Rails::Generators::Base
3
5
  source_root File.expand_path("templates", __dir__)
data/lib/super.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "tsort"
2
4
 
3
5
  require "rails/engine"
@@ -18,7 +20,6 @@ require "super/filter"
18
20
  require "super/filter/form_object"
19
21
  require "super/filter/guesser"
20
22
  require "super/filter/operator"
21
- require "super/filter/plugin"
22
23
  require "super/filter/schema_types"
23
24
  require "super/form"
24
25
  require "super/form/builder"
@@ -33,8 +34,10 @@ require "super/pagination"
33
34
  require "super/panel"
34
35
  require "super/partial"
35
36
  require "super/plugin"
37
+ require "super/query/form_object"
36
38
  require "super/schema"
37
39
  require "super/schema/guesser"
40
+ require "super/sort"
38
41
  require "super/version"
39
42
  require "super/view_helper"
40
43
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  # ```ruby
3
5
  # action = Super::ActionInquirer.new(
data/lib/super/assets.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  # Utilities for determining whether to use Sprockets or Webpacker
3
5
  class Assets
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  # A container class for all user-facing (4xx) errors thrown by this library.
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  module Compatability
3
5
  module_function
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  # @yield [Configuration]
3
5
  # @return [Configuration]
@@ -25,7 +27,6 @@ module Super
25
27
  self.controller_namespace = "admin"
26
28
  self.route_namespace = :admin
27
29
 
28
- controller_plugins.use(prepend: Super::Filter::ControllerMethods)
29
30
  controller_plugins.use(prepend: Super::Pagination::ControllerMethods)
30
31
 
31
32
  self.javascripts = [Super::Assets.auto("super/application")]
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "super/controls/optional"
2
4
  require "super/controls/required"
3
5
  require "super/controls/steps"
6
+ require "super/controls/view"
4
7
 
5
8
  module Super
6
9
  # The base Controls class. Most parts of Super can be configured by
@@ -9,5 +12,6 @@ module Super
9
12
  include Required
10
13
  include Optional
11
14
  include Steps
15
+ include View
12
16
  end
13
17
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Super
2
4
  class Controls
3
5
  # Methods for `Controls` that have a sane default implementation
@@ -24,7 +26,7 @@ module Super
24
26
  # @param action [ActionInquirer]
25
27
  # @return [Display]
26
28
  def display_schema(action:)
27
- Display.new(action: action) do |fields, type|
29
+ Display.new do |fields, type|
28
30
  Display::Guesser.new(model: model, action: action, fields: fields, type: type).call
29
31
  end
30
32
  end
@@ -74,6 +76,37 @@ module Super
74
76
  Super::Link.find_all(:show, :edit, :destroy)
75
77
  end
76
78
  end
79
+
80
+ def filters_enabled?
81
+ true
82
+ end
83
+
84
+ def filter_schema
85
+ Super::Filter.new do |fields, type|
86
+ Super::Filter::Guesser.new(model: model, fields: fields, type: type).call
87
+ end
88
+ end
89
+
90
+ def sort_enabled?
91
+ true
92
+ end
93
+
94
+ def sortable_columns
95
+ action = ActionInquirer.new(
96
+ ActionInquirer.default_for_resources,
97
+ "index"
98
+ )
99
+ attribute_names =
100
+ display_schema(action: action).each_attribute.map do |key, val|
101
+ key if val.real?
102
+ end
103
+
104
+ attribute_names.compact
105
+ end
106
+
107
+ def default_sort
108
+ { id: :desc }
109
+ end
77
110
  end
78
111
  end
79
112
  end