plutonium 0.63.0 → 0.65.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/.claude/skills/plutonium/SKILL.md +4 -1
- data/.claude/skills/plutonium-app/SKILL.md +14 -0
- data/.claude/skills/plutonium-dashboard/SKILL.md +161 -0
- data/.claude/skills/plutonium-resource/SKILL.md +94 -14
- data/.claude/skills/plutonium-ui/SKILL.md +22 -1
- data/.standard.yml +1 -1
- data/CHANGELOG.md +65 -0
- data/CLAUDE.md +282 -210
- data/SECURITY.md +1 -1
- data/app/assets/plutonium-charts.js +20604 -0
- data/app/assets/plutonium-charts.js.map +7 -0
- data/app/assets/plutonium-charts.min.js +41 -0
- data/app/assets/plutonium-charts.min.js.map +7 -0
- data/app/assets/plutonium.css +1 -1
- data/app/assets/plutonium.js +794 -629
- data/app/assets/plutonium.js.map +4 -4
- data/app/assets/plutonium.min.js +48 -48
- data/app/assets/plutonium.min.js.map +4 -4
- data/app/views/plutonium/_flash_alerts.html.erb +2 -2
- data/app/views/plutonium/_resource_header.html.erb +2 -2
- data/app/views/plutonium/_resource_sidebar.html.erb +11 -2
- data/app/views/plutonium/_toast.html.erb +2 -2
- data/app/views/rodauth/_login_form.html.erb +1 -1
- data/app/views/rodauth/_password_visibility.html.erb +1 -1
- data/app/views/rodauth/add_recovery_codes.html.erb +2 -2
- data/app/views/rodauth/change_login.html.erb +2 -2
- data/app/views/rodauth/create_account.html.erb +4 -4
- data/app/views/rodauth/reset_password_request.html.erb +1 -1
- data/app/views/rodauth/verify_account_resend.html.erb +1 -1
- data/app/views/rodauth/webauthn_remove.html.erb +1 -1
- data/config/brakeman.ignore +4 -4
- data/config/initializers/rabl.rb +0 -40
- data/config/locales/en/api_client.yml +22 -0
- data/config/locales/en/async.yml +34 -0
- data/config/locales/en/dashboard.yml +25 -0
- data/config/locales/en/invites.yml +37 -0
- data/config/locales/en/js.yml +40 -0
- data/config/locales/en/kanban.yml +28 -0
- data/config/locales/en/plutonium.yml +26 -0
- data/config/locales/en/positioning.yml +14 -0
- data/config/locales/en/profile.yml +29 -0
- data/config/locales/en/resource.yml +60 -0
- data/config/locales/en/ui.yml +93 -0
- data/config/locales/en/wizard.yml +46 -0
- data/docs/.vitepress/config.ts +34 -1
- data/docs/.vitepress/theme/components/HomeHero.vue +1 -1
- data/docs/.vitepress/theme/components/HomeInTheBox.vue +14 -0
- data/docs/.vitepress/theme/custom.css +34 -377
- data/docs/blog/introducing-plutonium-dashboards.md +175 -0
- data/docs/blog/introducing-plutonium-i18n.md +91 -0
- data/docs/blog/introducing-plutonium.md +4 -5
- data/docs/blog/whats-new-async-kanban-wizards.md +1 -1
- data/docs/guides/dashboards.md +300 -0
- data/docs/guides/index.md +1 -0
- data/docs/guides/kanban.md +2 -2
- data/docs/public/images/blog/dashboards-card-error.png +0 -0
- data/docs/public/images/blog/dashboards-loading.png +0 -0
- data/docs/public/images/blog/dashboards-overview.png +0 -0
- data/docs/public/images/blog/dashboards-sidebar.png +0 -0
- data/docs/public/images/blog/i18n-es-admin.png +0 -0
- data/docs/public/images/guides/dashboard-card-error.png +0 -0
- data/docs/public/images/guides/dashboard-loading.png +0 -0
- data/docs/public/images/guides/dashboard-overview.png +0 -0
- data/docs/public/images/guides/dashboard-sidebar.png +0 -0
- data/docs/reference/app/generators.md +2 -2
- data/docs/reference/app/portals.md +2 -0
- data/docs/reference/configuration.md +84 -27
- data/docs/reference/dashboard/dsl.md +123 -0
- data/docs/reference/dashboard/index.md +35 -0
- data/docs/reference/dashboard/registration.md +76 -0
- data/docs/reference/i18n.md +239 -0
- data/docs/reference/index.md +10 -1
- data/docs/reference/kanban/dsl.md +1 -1
- data/docs/reference/kanban/positioning.md +2 -2
- data/docs/reference/resource/actions.md +1 -1
- data/docs/reference/resource/definition.md +96 -18
- data/docs/reference/resource/export.md +5 -1
- data/docs/reference/resource/index.md +2 -0
- data/docs/reference/{positioning.md → resource/positioning.md} +2 -1
- data/docs/reference/resource/query.md +2 -0
- data/docs/reference/ui/assets.md +8 -0
- data/docs/reference/ui/displays.md +5 -8
- data/docs/reference/ui/index.md +1 -1
- data/docs/reference/wizard/dsl.md +2 -2
- data/esbuild.config.js +5 -2
- data/gemfiles/rails_7.gemfile.lock +3 -3
- data/gemfiles/rails_8.0.gemfile.lock +1 -1
- data/gemfiles/rails_8.1.gemfile.lock +2 -2
- data/lib/active_model/validations/array_validator.rb +1 -1
- data/lib/active_model/validations/attached_validator.rb +1 -1
- data/lib/active_model/validations/url_validator.rb +2 -2
- data/lib/generators/pu/core/assets/assets_generator.rb +36 -21
- data/lib/generators/pu/core/assets/templates/postcss.config.js +1 -1
- data/lib/generators/pu/core/update/update_generator.rb +3 -2
- data/lib/generators/pu/dashboard/dashboard_generator.rb +96 -0
- data/lib/generators/pu/dashboard/templates/dashboard.rb.tt +25 -0
- data/lib/generators/pu/docker/install/install_generator.rb +58 -0
- data/lib/generators/pu/docker/install/templates/Dockerfile.dev.tt +18 -3
- data/lib/generators/pu/docker/install/templates/Dockerfile.tt +20 -5
- data/lib/generators/pu/docker/install/templates/{docker-compose.yml → docker-compose.yml.tt} +1 -1
- data/lib/generators/pu/gem/dotenv/dotenv_generator.rb +1 -1
- data/lib/generators/pu/invites/invitable_generator.rb +18 -1
- data/lib/generators/pu/lib/plutonium_generators/concerns/actions.rb +0 -95
- data/lib/generators/pu/lib/plutonium_generators/concerns/js_package_manager.rb +146 -0
- data/lib/generators/pu/lib/plutonium_generators/generator.rb +1 -17
- data/lib/generators/pu/pkg/package/package_generator.rb +1 -0
- data/lib/generators/pu/pkg/package/templates/config/locales/en.yml.tt +28 -0
- data/lib/generators/pu/pkg/portal/portal_generator.rb +1 -0
- data/lib/generators/pu/pkg/portal/templates/config/locales/en.yml.tt +30 -0
- data/lib/generators/pu/res/scaffold/scaffold_generator.rb +0 -8
- data/lib/generators/pu/rodauth/concerns/feature_selector.rb +0 -18
- data/lib/plutonium/action/base.rb +27 -3
- data/lib/plutonium/action/interactive.rb +17 -4
- data/lib/plutonium/api_client/concerns/create_api_client.rb +12 -11
- data/lib/plutonium/api_client/concerns/disable_api_client.rb +3 -3
- data/lib/plutonium/auth/sequel_adapter.rb +1 -1
- data/lib/plutonium/configuration.rb +5 -0
- data/lib/plutonium/core/controller.rb +25 -1
- data/lib/plutonium/core/controllers/authorizable.rb +1 -1
- data/lib/plutonium/dashboard/base.rb +114 -0
- data/lib/plutonium/dashboard/card.rb +200 -0
- data/lib/plutonium/dashboard/controller.rb +101 -0
- data/lib/plutonium/dashboard/dsl.rb +104 -0
- data/lib/plutonium/dashboard/register.rb +40 -0
- data/lib/plutonium/dashboard/route_resolution.rb +30 -0
- data/lib/plutonium/dashboard.rb +42 -0
- data/lib/plutonium/definition/actions.rb +6 -1
- data/lib/plutonium/definition/base.rb +41 -3
- data/lib/plutonium/definition/index_views.rb +1 -1
- data/lib/plutonium/definition/positioning.rb +1 -1
- data/lib/plutonium/definition/presentable.rb +2 -2
- data/lib/plutonium/helpers/assets_helper.rb +15 -2
- data/lib/plutonium/helpers/display_helper.rb +10 -2
- data/lib/plutonium/interaction/async/context.rb +6 -8
- data/lib/plutonium/interaction/async/executor.rb +6 -7
- data/lib/plutonium/interaction/async/run.rb +2 -2
- data/lib/plutonium/interaction/async/run_definition.rb +1 -1
- data/lib/plutonium/interaction/base.rb +2 -0
- data/lib/plutonium/interaction/concerns/dispatchable.rb +15 -3
- data/lib/plutonium/invites/concerns/cancel_invite.rb +3 -3
- data/lib/plutonium/invites/concerns/invite_token.rb +25 -7
- data/lib/plutonium/invites/concerns/invite_user.rb +10 -5
- data/lib/plutonium/invites/concerns/resend_invite.rb +4 -4
- data/lib/plutonium/invites/controller.rb +11 -11
- data/lib/plutonium/kanban/column.rb +13 -3
- data/lib/plutonium/kanban/dsl.rb +7 -4
- data/lib/plutonium/models/has_cents.rb +1 -1
- data/lib/plutonium/profile/security_section.rb +10 -18
- data/lib/plutonium/query/filter.rb +10 -1
- data/lib/plutonium/query/filters/association.rb +27 -2
- data/lib/plutonium/query/filters/boolean.rb +4 -4
- data/lib/plutonium/query/filters/date.rb +4 -17
- data/lib/plutonium/query/filters/date_range.rb +2 -2
- data/lib/plutonium/query/filters/select.rb +10 -1
- data/lib/plutonium/query/filters/text.rb +9 -12
- data/lib/plutonium/railtie.rb +17 -0
- data/lib/plutonium/resource/controller.rb +10 -5
- data/lib/plutonium/resource/controllers/crud_actions.rb +17 -20
- data/lib/plutonium/resource/controllers/export_csv.rb +19 -9
- data/lib/plutonium/resource/controllers/kanban_actions.rb +16 -16
- data/lib/plutonium/resource/controllers/position_actions.rb +5 -5
- data/lib/plutonium/resource/controllers/typeahead.rb +24 -1
- data/lib/plutonium/resource/query_object.rb +30 -3
- data/lib/plutonium/routing/dashboard_registration.rb +137 -0
- data/lib/plutonium/routing/resource_registration.rb +5 -0
- data/lib/plutonium/routing/route_set_extensions.rb +2 -1
- data/lib/plutonium/translation.rb +227 -0
- data/lib/plutonium/ui/actions_dropdown.rb +2 -2
- data/lib/plutonium/ui/breadcrumbs.rb +3 -3
- data/lib/plutonium/ui/color_mode_selector.rb +1 -1
- data/lib/plutonium/ui/component/behaviour.rb +46 -0
- data/lib/plutonium/ui/component/methods.rb +4 -0
- data/lib/plutonium/ui/dashboard/board.rb +80 -0
- data/lib/plutonium/ui/dashboard/card.rb +127 -0
- data/lib/plutonium/ui/dashboard/chart.rb +43 -0
- data/lib/plutonium/ui/dashboard/custom.rb +32 -0
- data/lib/plutonium/ui/dashboard/frame.rb +25 -0
- data/lib/plutonium/ui/dashboard/metric.rb +137 -0
- data/lib/plutonium/ui/dashboard/skeleton.rb +40 -0
- data/lib/plutonium/ui/display/components/attachment.rb +1 -1
- data/lib/plutonium/ui/display/components/badge.rb +7 -1
- data/lib/plutonium/ui/display/components/boolean.rb +2 -2
- data/lib/plutonium/ui/display/resource.rb +23 -16
- data/lib/plutonium/ui/export_button.rb +3 -3
- data/lib/plutonium/ui/form/components/key_value_store.rb +5 -5
- data/lib/plutonium/ui/form/components/password.rb +2 -2
- data/lib/plutonium/ui/form/components/resource_select.rb +27 -0
- data/lib/plutonium/ui/form/components/secure_association.rb +2 -0
- data/lib/plutonium/ui/form/components/uppy.rb +11 -3
- data/lib/plutonium/ui/form/concerns/renders_nested_resource_fields.rb +1 -1
- data/lib/plutonium/ui/form/concerns/renders_repeater_row_controls.rb +5 -4
- data/lib/plutonium/ui/form/concerns/renders_structured_inputs.rb +1 -1
- data/lib/plutonium/ui/form/query.rb +8 -8
- data/lib/plutonium/ui/form/resource.rb +54 -26
- data/lib/plutonium/ui/frame_navigator_panel.rb +4 -4
- data/lib/plutonium/ui/grid/card.rb +3 -3
- data/lib/plutonium/ui/grid/resource.rb +3 -3
- data/lib/plutonium/ui/interaction/async/run_progress.rb +6 -6
- data/lib/plutonium/ui/interaction/async/running_banner.rb +2 -2
- data/lib/plutonium/ui/kanban/column.rb +6 -6
- data/lib/plutonium/ui/layout/base.rb +19 -1
- data/lib/plutonium/ui/layout/header.rb +1 -1
- data/lib/plutonium/ui/layout/icon_rail.rb +4 -4
- data/lib/plutonium/ui/layout/rodauth_layout.rb +1 -1
- data/lib/plutonium/ui/layout/sidebar.rb +1 -1
- data/lib/plutonium/ui/layout/topbar.rb +2 -2
- data/lib/plutonium/ui/modal/base.rb +4 -4
- data/lib/plutonium/ui/nav_grid_menu.rb +1 -1
- data/lib/plutonium/ui/nav_user.rb +2 -2
- data/lib/plutonium/ui/page/base.rb +10 -2
- data/lib/plutonium/ui/page/dashboard.rb +54 -0
- data/lib/plutonium/ui/page/edit.rb +3 -3
- data/lib/plutonium/ui/page/interactive_action.rb +2 -2
- data/lib/plutonium/ui/page/new.rb +3 -3
- data/lib/plutonium/ui/page/show.rb +2 -2
- data/lib/plutonium/ui/page/wizard.rb +22 -16
- data/lib/plutonium/ui/page/wizard_chooser.rb +10 -10
- data/lib/plutonium/ui/page/wizard_completed.rb +2 -2
- data/lib/plutonium/ui/skeleton_table.rb +1 -1
- data/lib/plutonium/ui/table/base.rb +2 -2
- data/lib/plutonium/ui/table/components/attachment.rb +1 -1
- data/lib/plutonium/ui/table/components/bulk_actions_toolbar.rb +19 -3
- data/lib/plutonium/ui/table/components/drag_handle.rb +3 -3
- data/lib/plutonium/ui/table/components/filter_form.rb +11 -10
- data/lib/plutonium/ui/table/components/filter_pills.rb +4 -4
- data/lib/plutonium/ui/table/components/pagy_info.rb +61 -17
- data/lib/plutonium/ui/table/components/pagy_pagination.rb +9 -5
- data/lib/plutonium/ui/table/components/row_actions_dropdown.rb +1 -1
- data/lib/plutonium/ui/table/components/scopes_bar.rb +6 -2
- data/lib/plutonium/ui/table/components/scopes_pills.rb +3 -3
- data/lib/plutonium/ui/table/components/selection_column.rb +1 -1
- data/lib/plutonium/ui/table/components/toolbar.rb +2 -2
- data/lib/plutonium/ui/table/components/view_switcher.rb +12 -8
- data/lib/plutonium/ui/table/resource.rb +53 -17
- data/lib/plutonium/ui/wizard/review.rb +7 -7
- data/lib/plutonium/ui/wizard/stepper.rb +1 -1
- data/lib/plutonium/ui/wizard/summary_display.rb +6 -0
- data/lib/plutonium/version.rb +1 -1
- data/lib/plutonium/wizard/base.rb +2 -0
- data/lib/plutonium/wizard/driving.rb +8 -2
- data/lib/plutonium/wizard/dsl.rb +4 -2
- data/lib/plutonium/wizard/field_importer.rb +1 -8
- data/lib/plutonium/wizard/review_step.rb +8 -1
- data/lib/plutonium/wizard/step.rb +14 -3
- data/package.json +4 -2
- data/plutonium.gemspec +15 -30
- data/postcss-gem-import.cjs +34 -0
- data/postcss-gem-import.js +3 -28
- data/src/css/components.css +91 -0
- data/src/css/slim_select.css +0 -38
- data/src/css/tokens.css +24 -0
- data/src/js/controllers/attachment_input_controller.js +15 -6
- data/src/js/controllers/chart_controller.js +162 -0
- data/src/js/controllers/clipboard_controller.js +3 -2
- data/src/js/controllers/dirty_form_guard_controller.js +4 -3
- data/src/js/controllers/easymde_controller.js +3 -0
- data/src/js/controllers/filter_panel_controller.js +15 -6
- data/src/js/controllers/flatpickr_controller.js +8 -0
- data/src/js/controllers/frame_refresh_controller.js +59 -0
- data/src/js/controllers/intl_tel_input_controller.js +5 -0
- data/src/js/controllers/register_controllers.js +4 -0
- data/src/js/controllers/slim_select_controller.js +79 -176
- data/src/js/core.js +9 -1
- data/src/js/i18n.js +69 -0
- data/src/js/plutonium-charts.js +15 -0
- data/src/js/turbo/turbo_confirm.js +5 -3
- metadata +71 -31
- data/.yarnrc.yml +0 -8
- data/config/initializers/hotwire_turbo_monkey_patches.rb +0 -12
- data/lib/generators/pu/field/input/input_generator.rb +0 -32
- data/lib/generators/pu/field/input/templates/input.rb.tt +0 -15
- data/lib/generators/pu/lib/plutonium_generators/concerns/config.rb +0 -39
- data/lib/generators/pu/lib/plutonium_generators/concerns/serializer.rb +0 -39
- data/lib/generators/pu/lib/plutonium_generators/installer.rb +0 -205
- data/lib/generators/pu/res/scaffold/templates/presenter.rb.tt +0 -13
- data/lib/generators/pu/res/scaffold/templates/query_object.rb.tt +0 -17
- data/public/plutonium-assets/application.js +0 -31419
- data/public/plutonium-assets/plutonium.ico +0 -0
- data/yarn.lock +0 -6858
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: plutonium
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.65.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stefan Froelich
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-
|
|
10
|
+
date: 2026-10-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: zeitwerk
|
|
@@ -72,6 +72,9 @@ dependencies:
|
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: '43.0'
|
|
75
|
+
- - ">="
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: 43.5.6
|
|
75
78
|
type: :runtime
|
|
76
79
|
prerelease: false
|
|
77
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -79,6 +82,9 @@ dependencies:
|
|
|
79
82
|
- - "~>"
|
|
80
83
|
- !ruby/object:Gem::Version
|
|
81
84
|
version: '43.0'
|
|
85
|
+
- - ">="
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: 43.5.6
|
|
82
88
|
- !ruby/object:Gem::Dependency
|
|
83
89
|
name: rabl
|
|
84
90
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -459,6 +465,7 @@ files:
|
|
|
459
465
|
- ".claude/skills/plutonium-async-interactions/SKILL.md"
|
|
460
466
|
- ".claude/skills/plutonium-auth/SKILL.md"
|
|
461
467
|
- ".claude/skills/plutonium-behavior/SKILL.md"
|
|
468
|
+
- ".claude/skills/plutonium-dashboard/SKILL.md"
|
|
462
469
|
- ".claude/skills/plutonium-kanban/SKILL.md"
|
|
463
470
|
- ".claude/skills/plutonium-resource/SKILL.md"
|
|
464
471
|
- ".claude/skills/plutonium-tenancy/SKILL.md"
|
|
@@ -474,7 +481,6 @@ files:
|
|
|
474
481
|
- ".vscode/extensions.json"
|
|
475
482
|
- ".vscode/launch.json"
|
|
476
483
|
- ".vscode/settings.json"
|
|
477
|
-
- ".yarnrc.yml"
|
|
478
484
|
- Appraisals
|
|
479
485
|
- CHANGELOG.md
|
|
480
486
|
- CLAUDE.md
|
|
@@ -483,6 +489,10 @@ files:
|
|
|
483
489
|
- README.md
|
|
484
490
|
- Rakefile
|
|
485
491
|
- SECURITY.md
|
|
492
|
+
- app/assets/plutonium-charts.js
|
|
493
|
+
- app/assets/plutonium-charts.js.map
|
|
494
|
+
- app/assets/plutonium-charts.min.js
|
|
495
|
+
- app/assets/plutonium-charts.min.js.map
|
|
486
496
|
- app/assets/plutonium.css
|
|
487
497
|
- app/assets/plutonium.ico
|
|
488
498
|
- app/assets/plutonium.js
|
|
@@ -564,10 +574,21 @@ files:
|
|
|
564
574
|
- config.ru
|
|
565
575
|
- config/brakeman.ignore
|
|
566
576
|
- config/initializers/action_policy.rb
|
|
567
|
-
- config/initializers/hotwire_turbo_monkey_patches.rb
|
|
568
577
|
- config/initializers/pagy.rb
|
|
569
578
|
- config/initializers/rabl.rb
|
|
570
579
|
- config/initializers/sqlite_alias.rb
|
|
580
|
+
- config/locales/en/api_client.yml
|
|
581
|
+
- config/locales/en/async.yml
|
|
582
|
+
- config/locales/en/dashboard.yml
|
|
583
|
+
- config/locales/en/invites.yml
|
|
584
|
+
- config/locales/en/js.yml
|
|
585
|
+
- config/locales/en/kanban.yml
|
|
586
|
+
- config/locales/en/plutonium.yml
|
|
587
|
+
- config/locales/en/positioning.yml
|
|
588
|
+
- config/locales/en/profile.yml
|
|
589
|
+
- config/locales/en/resource.yml
|
|
590
|
+
- config/locales/en/ui.yml
|
|
591
|
+
- config/locales/en/wizard.yml
|
|
571
592
|
- db/migrate/async_interactions/20260817000001_create_plutonium_async_runs.rb
|
|
572
593
|
- db/migrate/wizard/20260615000001_create_plutonium_wizard_sessions.rb
|
|
573
594
|
- docs/.vitepress/config.ts
|
|
@@ -592,6 +613,8 @@ files:
|
|
|
592
613
|
- docs/blog/half-finished-forms-are-pii.md
|
|
593
614
|
- docs/blog/index.md
|
|
594
615
|
- docs/blog/interactions-are-presentation-objects.md
|
|
616
|
+
- docs/blog/introducing-plutonium-dashboards.md
|
|
617
|
+
- docs/blog/introducing-plutonium-i18n.md
|
|
595
618
|
- docs/blog/introducing-plutonium.md
|
|
596
619
|
- docs/blog/jobs-are-not-permission-snapshots.md
|
|
597
620
|
- docs/blog/plutonium-and-ai-agents.md
|
|
@@ -615,6 +638,7 @@ files:
|
|
|
615
638
|
- docs/guides/creating-packages.md
|
|
616
639
|
- docs/guides/custom-actions.md
|
|
617
640
|
- docs/guides/customizing-ui.md
|
|
641
|
+
- docs/guides/dashboards.md
|
|
618
642
|
- docs/guides/index.md
|
|
619
643
|
- docs/guides/kanban.md
|
|
620
644
|
- docs/guides/multi-tenancy.md
|
|
@@ -636,8 +660,17 @@ files:
|
|
|
636
660
|
- docs/public/favicon-16x16.png
|
|
637
661
|
- docs/public/favicon-32x32.png
|
|
638
662
|
- docs/public/favicon.ico
|
|
663
|
+
- docs/public/images/blog/dashboards-card-error.png
|
|
664
|
+
- docs/public/images/blog/dashboards-loading.png
|
|
665
|
+
- docs/public/images/blog/dashboards-overview.png
|
|
666
|
+
- docs/public/images/blog/dashboards-sidebar.png
|
|
667
|
+
- docs/public/images/blog/i18n-es-admin.png
|
|
639
668
|
- docs/public/images/components/avatar.png
|
|
640
669
|
- docs/public/images/guides/custom-actions-bulk.png
|
|
670
|
+
- docs/public/images/guides/dashboard-card-error.png
|
|
671
|
+
- docs/public/images/guides/dashboard-loading.png
|
|
672
|
+
- docs/public/images/guides/dashboard-overview.png
|
|
673
|
+
- docs/public/images/guides/dashboard-sidebar.png
|
|
641
674
|
- docs/public/images/guides/kanban-after-move.png
|
|
642
675
|
- docs/public/images/guides/kanban-board-light.png
|
|
643
676
|
- docs/public/images/guides/kanban-board.png
|
|
@@ -716,18 +749,22 @@ files:
|
|
|
716
749
|
- docs/reference/behavior/interactions.md
|
|
717
750
|
- docs/reference/behavior/policies.md
|
|
718
751
|
- docs/reference/configuration.md
|
|
752
|
+
- docs/reference/dashboard/dsl.md
|
|
753
|
+
- docs/reference/dashboard/index.md
|
|
754
|
+
- docs/reference/dashboard/registration.md
|
|
719
755
|
- docs/reference/generators/lite.md
|
|
756
|
+
- docs/reference/i18n.md
|
|
720
757
|
- docs/reference/index.md
|
|
721
758
|
- docs/reference/kanban/authorization.md
|
|
722
759
|
- docs/reference/kanban/dsl.md
|
|
723
760
|
- docs/reference/kanban/index.md
|
|
724
761
|
- docs/reference/kanban/positioning.md
|
|
725
|
-
- docs/reference/positioning.md
|
|
726
762
|
- docs/reference/resource/actions.md
|
|
727
763
|
- docs/reference/resource/definition.md
|
|
728
764
|
- docs/reference/resource/export.md
|
|
729
765
|
- docs/reference/resource/index.md
|
|
730
766
|
- docs/reference/resource/model.md
|
|
767
|
+
- docs/reference/resource/positioning.md
|
|
731
768
|
- docs/reference/resource/query.md
|
|
732
769
|
- docs/reference/tenancy/entity-scoping.md
|
|
733
770
|
- docs/reference/tenancy/index.md
|
|
@@ -838,6 +875,8 @@ files:
|
|
|
838
875
|
- lib/generators/pu/core/typespec/templates/model.tsp.tt
|
|
839
876
|
- lib/generators/pu/core/typespec/typespec_generator.rb
|
|
840
877
|
- lib/generators/pu/core/update/update_generator.rb
|
|
878
|
+
- lib/generators/pu/dashboard/dashboard_generator.rb
|
|
879
|
+
- lib/generators/pu/dashboard/templates/dashboard.rb.tt
|
|
841
880
|
- lib/generators/pu/docker/install/install_generator.rb
|
|
842
881
|
- lib/generators/pu/docker/install/templates/.keep
|
|
843
882
|
- lib/generators/pu/docker/install/templates/Dockerfile.dev.tt
|
|
@@ -845,14 +884,12 @@ files:
|
|
|
845
884
|
- lib/generators/pu/docker/install/templates/bin/console
|
|
846
885
|
- lib/generators/pu/docker/install/templates/bin/restart
|
|
847
886
|
- lib/generators/pu/docker/install/templates/bin/shell
|
|
848
|
-
- lib/generators/pu/docker/install/templates/docker-compose.yml
|
|
887
|
+
- lib/generators/pu/docker/install/templates/docker-compose.yml.tt
|
|
849
888
|
- lib/generators/pu/eject/layout/layout_generator.rb
|
|
850
889
|
- lib/generators/pu/eject/shell/shell_generator.rb
|
|
851
890
|
- lib/generators/pu/extra/colorized_logger/colorized_logger_generator.rb
|
|
852
891
|
- lib/generators/pu/extra/colorized_logger/templates/config/initializers/colorized_logger.rb
|
|
853
|
-
- lib/generators/pu/field/input/input_generator.rb
|
|
854
892
|
- lib/generators/pu/field/input/templates/.keep
|
|
855
|
-
- lib/generators/pu/field/input/templates/input.rb.tt
|
|
856
893
|
- lib/generators/pu/field/renderer/renderer_generator.rb
|
|
857
894
|
- lib/generators/pu/field/renderer/templates/.keep
|
|
858
895
|
- lib/generators/pu/field/renderer/templates/renderer.rb.tt
|
|
@@ -906,18 +943,16 @@ files:
|
|
|
906
943
|
- lib/generators/pu/lib/plutonium_generators.rb
|
|
907
944
|
- lib/generators/pu/lib/plutonium_generators/cli.rb
|
|
908
945
|
- lib/generators/pu/lib/plutonium_generators/concerns/actions.rb
|
|
909
|
-
- lib/generators/pu/lib/plutonium_generators/concerns/config.rb
|
|
910
946
|
- lib/generators/pu/lib/plutonium_generators/concerns/configures_recurring.rb
|
|
911
947
|
- lib/generators/pu/lib/plutonium_generators/concerns/configures_sqlite.rb
|
|
948
|
+
- lib/generators/pu/lib/plutonium_generators/concerns/js_package_manager.rb
|
|
912
949
|
- lib/generators/pu/lib/plutonium_generators/concerns/logger.rb
|
|
913
950
|
- lib/generators/pu/lib/plutonium_generators/concerns/mounts_engines.rb
|
|
914
951
|
- lib/generators/pu/lib/plutonium_generators/concerns/package_selector.rb
|
|
915
952
|
- lib/generators/pu/lib/plutonium_generators/concerns/resource_registration.rb
|
|
916
953
|
- lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
|
|
917
954
|
- lib/generators/pu/lib/plutonium_generators/concerns/rodauth_redirects.rb
|
|
918
|
-
- lib/generators/pu/lib/plutonium_generators/concerns/serializer.rb
|
|
919
955
|
- lib/generators/pu/lib/plutonium_generators/generator.rb
|
|
920
|
-
- lib/generators/pu/lib/plutonium_generators/installer.rb
|
|
921
956
|
- lib/generators/pu/lib/plutonium_generators/model_generator_base.rb
|
|
922
957
|
- lib/generators/pu/lib/plutonium_generators/non_interactive_prompt.rb
|
|
923
958
|
- lib/generators/pu/lite/litestream/litestream_generator.rb
|
|
@@ -940,6 +975,7 @@ files:
|
|
|
940
975
|
- lib/generators/pu/pkg/package/templates/app/policies/resource_policy.rb.tt
|
|
941
976
|
- lib/generators/pu/pkg/package/templates/app/presenters/resource_presenter.rb.tt
|
|
942
977
|
- lib/generators/pu/pkg/package/templates/app/query_objects/resource_query_object.rb.tt
|
|
978
|
+
- lib/generators/pu/pkg/package/templates/config/locales/en.yml.tt
|
|
943
979
|
- lib/generators/pu/pkg/package/templates/lib/engine.rb.tt
|
|
944
980
|
- lib/generators/pu/pkg/portal/USAGE
|
|
945
981
|
- lib/generators/pu/pkg/portal/portal_generator.rb
|
|
@@ -953,6 +989,7 @@ files:
|
|
|
953
989
|
- lib/generators/pu/pkg/portal/templates/app/query_objects/resource_query_object.rb.tt
|
|
954
990
|
- lib/generators/pu/pkg/portal/templates/app/views/package/.keep
|
|
955
991
|
- lib/generators/pu/pkg/portal/templates/app/views/package/dashboard/index.html.erb
|
|
992
|
+
- lib/generators/pu/pkg/portal/templates/config/locales/en.yml.tt
|
|
956
993
|
- lib/generators/pu/pkg/portal/templates/config/routes.rb.tt
|
|
957
994
|
- lib/generators/pu/pkg/portal/templates/lib/engine.rb.tt
|
|
958
995
|
- lib/generators/pu/profile/USAGE
|
|
@@ -981,8 +1018,6 @@ files:
|
|
|
981
1018
|
- lib/generators/pu/res/scaffold/templates/controller.rb.tt
|
|
982
1019
|
- lib/generators/pu/res/scaffold/templates/definition.rb.tt
|
|
983
1020
|
- lib/generators/pu/res/scaffold/templates/policy.rb.tt
|
|
984
|
-
- lib/generators/pu/res/scaffold/templates/presenter.rb.tt
|
|
985
|
-
- lib/generators/pu/res/scaffold/templates/query_object.rb.tt
|
|
986
1021
|
- lib/generators/pu/rodauth/account_generator.rb
|
|
987
1022
|
- lib/generators/pu/rodauth/admin_generator.rb
|
|
988
1023
|
- lib/generators/pu/rodauth/concerns/account_selector.rb
|
|
@@ -1104,6 +1139,13 @@ files:
|
|
|
1104
1139
|
- lib/plutonium/core/controllers/authorizable.rb
|
|
1105
1140
|
- lib/plutonium/core/controllers/bootable.rb
|
|
1106
1141
|
- lib/plutonium/core/controllers/entity_scoping.rb
|
|
1142
|
+
- lib/plutonium/dashboard.rb
|
|
1143
|
+
- lib/plutonium/dashboard/base.rb
|
|
1144
|
+
- lib/plutonium/dashboard/card.rb
|
|
1145
|
+
- lib/plutonium/dashboard/controller.rb
|
|
1146
|
+
- lib/plutonium/dashboard/dsl.rb
|
|
1147
|
+
- lib/plutonium/dashboard/register.rb
|
|
1148
|
+
- lib/plutonium/dashboard/route_resolution.rb
|
|
1107
1149
|
- lib/plutonium/definition/actions.rb
|
|
1108
1150
|
- lib/plutonium/definition/base.rb
|
|
1109
1151
|
- lib/plutonium/definition/config_attr.rb
|
|
@@ -1223,6 +1265,7 @@ files:
|
|
|
1223
1265
|
- lib/plutonium/resource/record/routes.rb
|
|
1224
1266
|
- lib/plutonium/resource/register.rb
|
|
1225
1267
|
- lib/plutonium/rodauth/controller_methods.rb
|
|
1268
|
+
- lib/plutonium/routing/dashboard_registration.rb
|
|
1226
1269
|
- lib/plutonium/routing/mapper_extensions.rb
|
|
1227
1270
|
- lib/plutonium/routing/resource_registration.rb
|
|
1228
1271
|
- lib/plutonium/routing/route_set_extensions.rb
|
|
@@ -1240,6 +1283,7 @@ files:
|
|
|
1240
1283
|
- lib/plutonium/testing/resource_interaction.rb
|
|
1241
1284
|
- lib/plutonium/testing/resource_model.rb
|
|
1242
1285
|
- lib/plutonium/testing/resource_policy.rb
|
|
1286
|
+
- lib/plutonium/translation.rb
|
|
1243
1287
|
- lib/plutonium/ui.rb
|
|
1244
1288
|
- lib/plutonium/ui/action_button.rb
|
|
1245
1289
|
- lib/plutonium/ui/actions_dropdown.rb
|
|
@@ -1256,6 +1300,13 @@ files:
|
|
|
1256
1300
|
- lib/plutonium/ui/component/section.rb
|
|
1257
1301
|
- lib/plutonium/ui/component/tokens.rb
|
|
1258
1302
|
- lib/plutonium/ui/component_classes.rb
|
|
1303
|
+
- lib/plutonium/ui/dashboard/board.rb
|
|
1304
|
+
- lib/plutonium/ui/dashboard/card.rb
|
|
1305
|
+
- lib/plutonium/ui/dashboard/chart.rb
|
|
1306
|
+
- lib/plutonium/ui/dashboard/custom.rb
|
|
1307
|
+
- lib/plutonium/ui/dashboard/frame.rb
|
|
1308
|
+
- lib/plutonium/ui/dashboard/metric.rb
|
|
1309
|
+
- lib/plutonium/ui/dashboard/skeleton.rb
|
|
1259
1310
|
- lib/plutonium/ui/display/base.rb
|
|
1260
1311
|
- lib/plutonium/ui/display/components/association.rb
|
|
1261
1312
|
- lib/plutonium/ui/display/components/attachment.rb
|
|
@@ -1326,6 +1377,7 @@ files:
|
|
|
1326
1377
|
- lib/plutonium/ui/nav_user.rb
|
|
1327
1378
|
- lib/plutonium/ui/options/has_cents_field.rb
|
|
1328
1379
|
- lib/plutonium/ui/page/base.rb
|
|
1380
|
+
- lib/plutonium/ui/page/dashboard.rb
|
|
1329
1381
|
- lib/plutonium/ui/page/edit.rb
|
|
1330
1382
|
- lib/plutonium/ui/page/index.rb
|
|
1331
1383
|
- lib/plutonium/ui/page/interactive_action.rb
|
|
@@ -1401,11 +1453,10 @@ files:
|
|
|
1401
1453
|
- package.json
|
|
1402
1454
|
- plutonium-blog-post.md
|
|
1403
1455
|
- plutonium.gemspec
|
|
1456
|
+
- postcss-gem-import.cjs
|
|
1404
1457
|
- postcss-gem-import.js
|
|
1405
1458
|
- postcss.config.js
|
|
1406
1459
|
- public/.keep
|
|
1407
|
-
- public/plutonium-assets/application.js
|
|
1408
|
-
- public/plutonium-assets/plutonium.ico
|
|
1409
1460
|
- sig/.keep
|
|
1410
1461
|
- src/.npmignore
|
|
1411
1462
|
- src/css/components.css
|
|
@@ -1424,6 +1475,7 @@ files:
|
|
|
1424
1475
|
- src/js/controllers/breadcrumbs_controller.js
|
|
1425
1476
|
- src/js/controllers/bulk_actions_controller.js
|
|
1426
1477
|
- src/js/controllers/capture_url_controller.js
|
|
1478
|
+
- src/js/controllers/chart_controller.js
|
|
1427
1479
|
- src/js/controllers/clipboard_controller.js
|
|
1428
1480
|
- src/js/controllers/color_mode_controller.js
|
|
1429
1481
|
- src/js/controllers/currency_input_controller.js
|
|
@@ -1433,6 +1485,7 @@ files:
|
|
|
1433
1485
|
- src/js/controllers/flatpickr_controller.js
|
|
1434
1486
|
- src/js/controllers/form_controller.js
|
|
1435
1487
|
- src/js/controllers/frame_navigator_controller.js
|
|
1488
|
+
- src/js/controllers/frame_refresh_controller.js
|
|
1436
1489
|
- src/js/controllers/icon_rail_controller.js
|
|
1437
1490
|
- src/js/controllers/icon_rail_flyout_controller.js
|
|
1438
1491
|
- src/js/controllers/intl_tel_input_controller.js
|
|
@@ -1462,6 +1515,8 @@ files:
|
|
|
1462
1515
|
- src/js/controllers/wizard_controller.js
|
|
1463
1516
|
- src/js/core.js
|
|
1464
1517
|
- src/js/drag/sortable.js
|
|
1518
|
+
- src/js/i18n.js
|
|
1519
|
+
- src/js/plutonium-charts.js
|
|
1465
1520
|
- src/js/plutonium.js
|
|
1466
1521
|
- src/js/support/dom_element.js
|
|
1467
1522
|
- src/js/support/mime_icon.js
|
|
@@ -1472,7 +1527,6 @@ files:
|
|
|
1472
1527
|
- src/js/turbo/turbo_frame_monkey_patch.js
|
|
1473
1528
|
- tailwind.config.js
|
|
1474
1529
|
- tailwind.options.js
|
|
1475
|
-
- yarn.lock
|
|
1476
1530
|
homepage: https://radioactive-labs.github.io/plutonium-core/
|
|
1477
1531
|
licenses:
|
|
1478
1532
|
- MIT
|
|
@@ -1481,20 +1535,6 @@ metadata:
|
|
|
1481
1535
|
rubygems_mfa_required: 'true'
|
|
1482
1536
|
homepage_uri: https://radioactive-labs.github.io/plutonium-core/
|
|
1483
1537
|
source_code_uri: https://github.com/radioactive-labs/plutonium-core
|
|
1484
|
-
post_install_message: |
|
|
1485
|
-
⚠️ Ruby 3.2 support ends in the NEXT release
|
|
1486
|
-
|
|
1487
|
-
This is the last Plutonium release that installs on Ruby 3.2.
|
|
1488
|
-
|
|
1489
|
-
Why: pagy patches CVE-2026-54659 (a path-traversal in
|
|
1490
|
-
`Pagy::I18n.locale=`) only in >= 43.5.6, and pagy dropped Ruby 3.2 in
|
|
1491
|
-
43.5.0. No pagy version is both patched and installable on 3.2, so
|
|
1492
|
-
continuing to support it means shipping a known-vulnerable dependency.
|
|
1493
|
-
|
|
1494
|
-
Ruby 3.2 reached end-of-life in March 2026.
|
|
1495
|
-
|
|
1496
|
-
Action: upgrade to Ruby 3.3 or newer before your next Plutonium bump.
|
|
1497
|
-
If you stay on 3.2, `bundle update plutonium` will hold you here.
|
|
1498
1538
|
rdoc_options: []
|
|
1499
1539
|
require_paths:
|
|
1500
1540
|
- lib
|
|
@@ -1502,7 +1542,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
1502
1542
|
requirements:
|
|
1503
1543
|
- - ">="
|
|
1504
1544
|
- !ruby/object:Gem::Version
|
|
1505
|
-
version: 3.
|
|
1545
|
+
version: '3.3'
|
|
1506
1546
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1507
1547
|
requirements:
|
|
1508
1548
|
- - ">="
|
data/.yarnrc.yml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Work around for https://github.com/hotwired/turbo-rails/issues/512
|
|
2
|
-
# When ActionCable is not loaded, Turbo breaks boot
|
|
3
|
-
Rails.autoloaders.once.do_not_eager_load("#{Turbo::Engine.root}/app/channels") unless defined?(ActionCable)
|
|
4
|
-
|
|
5
|
-
# Work around for https://github.com/hotwired/turbo-rails/issues/535
|
|
6
|
-
Rails.application.config.after_initialize do
|
|
7
|
-
Turbo::Streams::BroadcastStreamJob.class_eval do
|
|
8
|
-
def self.perform_later(stream, content:)
|
|
9
|
-
super(stream, content: content.to_str)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "../../lib/plutonium_generators"
|
|
4
|
-
|
|
5
|
-
module Pu
|
|
6
|
-
module Field
|
|
7
|
-
class InputGenerator < Rails::Generators::Base
|
|
8
|
-
include PlutoniumGenerators::Generator
|
|
9
|
-
|
|
10
|
-
source_root File.expand_path("templates", __dir__)
|
|
11
|
-
|
|
12
|
-
desc "Generates a field input"
|
|
13
|
-
|
|
14
|
-
argument :name
|
|
15
|
-
|
|
16
|
-
def start
|
|
17
|
-
in_root do
|
|
18
|
-
template "input.rb", "app/plutonium/fields/inputs/#{name.underscore}_input.rb"
|
|
19
|
-
insert_into_file "config/initializers/plutonium.rb", registration_statement, after: /.*# Register components here.*\n/
|
|
20
|
-
end
|
|
21
|
-
rescue => e
|
|
22
|
-
exception "#{self.class} failed:", e
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
def registration_statement
|
|
28
|
-
indent "Plutonium::Core::Fields::Inputs::Factory.map_type :#{name.underscore}, to: Fields::Inputs::#{name.camelize}Input\n", 2
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "yaml"
|
|
4
|
-
|
|
5
|
-
module PlutoniumGenerators
|
|
6
|
-
module Concerns
|
|
7
|
-
module Config
|
|
8
|
-
def write_config(scope, **kwargs)
|
|
9
|
-
write_config! config.deep_merge({scope => kwargs})
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def read_config(scope, key, default: nil)
|
|
13
|
-
config.dig(scope, key) || default
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def config
|
|
19
|
-
in_root do
|
|
20
|
-
if File.exist? config_filename
|
|
21
|
-
YAML.load_file(config_filename, permitted_classes: [Regexp, Symbol]) || {}
|
|
22
|
-
else
|
|
23
|
-
{}
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def write_config!(config)
|
|
29
|
-
in_root do
|
|
30
|
-
File.write(config_filename, YAML.dump(config))
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def config_filename
|
|
35
|
-
".pu"
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module PlutoniumGenerators
|
|
4
|
-
module Concerns
|
|
5
|
-
module Serializer
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
def serialize_value(value)
|
|
9
|
-
case value
|
|
10
|
-
when Symbol
|
|
11
|
-
":#{value}"
|
|
12
|
-
when String
|
|
13
|
-
serialize_string value
|
|
14
|
-
when Integer, Float, BigDecimal
|
|
15
|
-
serialize_number value
|
|
16
|
-
when Enumerable
|
|
17
|
-
serialize_enumerable value
|
|
18
|
-
when nil
|
|
19
|
-
"nil"
|
|
20
|
-
else
|
|
21
|
-
# debug "Unable to serialize a value '#{value}:#{value.class}'"
|
|
22
|
-
value
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def serialize_string(value)
|
|
27
|
-
"'#{value.gsub("'", "\\\\'")}'"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def serialize_number(num)
|
|
31
|
-
num.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, '\\1_')
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def serialize_enumerable(enum)
|
|
35
|
-
"[#{enum.entries.map { |val| serialize_value val }.join ", "}]"
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "semantic_range"
|
|
4
|
-
require "yaml"
|
|
5
|
-
|
|
6
|
-
module PlutoniumGenerators
|
|
7
|
-
module Installer
|
|
8
|
-
def self.included(base)
|
|
9
|
-
base.send :source_root, File.expand_path("lib/generators/pu/setup/_templates", PlutoniumGenerators::ROOT_DIR)
|
|
10
|
-
|
|
11
|
-
base.send :class_option, :interactive, type: :boolean, desc: "Show prompts. Default: true"
|
|
12
|
-
base.send :class_option, :bundle, type: :boolean, desc: "Run bundle after setup. Default: true"
|
|
13
|
-
base.send :class_option, :lint, type: :boolean, desc: "Run linter after generation. Default: false"
|
|
14
|
-
base.send :class_option, :pug_id, type: :numeric, default: 0,
|
|
15
|
-
desc: "Used internally by plutonium generators. " \
|
|
16
|
-
"Do not set this value as it might lead to unspecified behaviour."
|
|
17
|
-
base.send :class_option, :force, type: :boolean, default: false,
|
|
18
|
-
desc: "Force installation even if it have been previously installed."
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
protected
|
|
22
|
-
|
|
23
|
-
def install!(feature)
|
|
24
|
-
# set_ruby_version! if root_pug?
|
|
25
|
-
|
|
26
|
-
from_version = read_config(:installed, feature, default: "0.0.0")
|
|
27
|
-
versions = methods.map do |m|
|
|
28
|
-
m.to_s.match(/install_v([\d_]+)/)&.[](1)&.tr("_", ".")
|
|
29
|
-
end
|
|
30
|
-
versions = versions.select do |version|
|
|
31
|
-
force? || SemanticRange.satisfies?(version, ">#{from_version}")
|
|
32
|
-
end.compact.sort
|
|
33
|
-
|
|
34
|
-
if versions.any?
|
|
35
|
-
versions.each do |version|
|
|
36
|
-
log :install!, "#{feature} v#{version}"
|
|
37
|
-
send :"install_v#{version.tr(".", "_")}!"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
installed_version = versions.last
|
|
41
|
-
write_config :installed, feature => installed_version
|
|
42
|
-
|
|
43
|
-
if root_pug?
|
|
44
|
-
if bundle?
|
|
45
|
-
bundle!
|
|
46
|
-
# run last minute bundle changes
|
|
47
|
-
bundle! false
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
begin
|
|
51
|
-
log :rubocop, "autocorrect"
|
|
52
|
-
run_eval "bundle exec standardrb --fix"
|
|
53
|
-
rescue
|
|
54
|
-
# Do nothing
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
success "Successfully installed #{feature} v#{installed_version}"
|
|
58
|
-
end
|
|
59
|
-
else
|
|
60
|
-
debug "Skipping installation of #{feature}. No new versions since v#{from_version}."
|
|
61
|
-
end
|
|
62
|
-
rescue => e
|
|
63
|
-
exception "#{self.class.desc} failed:", e
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def add_gem(name, **)
|
|
67
|
-
log :add_gem, name
|
|
68
|
-
before_bundle(:gem, name, **)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def rubocop(library = nil)
|
|
72
|
-
log :rubocop, "install #{library}"
|
|
73
|
-
|
|
74
|
-
add_gem "rubocop", group: :development, require: false
|
|
75
|
-
|
|
76
|
-
in_root do
|
|
77
|
-
rubocop_file = ".rubocop.yml"
|
|
78
|
-
if File.exist?(rubocop_file)
|
|
79
|
-
rubocop_def = YAML.load_file(rubocop_file)
|
|
80
|
-
rubocop_def["require"] ||= []
|
|
81
|
-
else
|
|
82
|
-
rubocop_def = {
|
|
83
|
-
"require" => [],
|
|
84
|
-
"Style/FrozenStringLiteralComment" => {"SafeAutoCorrect" => true},
|
|
85
|
-
"Style/ClassAndModuleChildren" => {"SafeAutoCorrect" => true}
|
|
86
|
-
}
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
if library.present?
|
|
90
|
-
library = "rubocop-#{library}"
|
|
91
|
-
add_gem library, group: :development, require: false
|
|
92
|
-
rubocop_def["require"] << library
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
rubocop_def["require"].uniq!
|
|
96
|
-
create_file rubocop_file, YAML.dump(rubocop_def), force: true, verbose: false
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def after_bundle(command, *args, **kwargs)
|
|
101
|
-
add_task_after(:bundle, [command, args, kwargs])
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def before_bundle(command, *args, **kwargs)
|
|
105
|
-
add_task_before(:bundle, [command, args, kwargs])
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
def yes?(statement, color = nil)
|
|
109
|
-
!interactive? || super
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def interactive?
|
|
113
|
-
options[:interactive] != false
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def bundle?
|
|
117
|
-
options[:bundle] != false
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def lint?
|
|
121
|
-
options[:lint] == true
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def pug(command)
|
|
125
|
-
args = options.slice("lint", "interactive").map { |k, v| "--#{k} #{v}" }.join " "
|
|
126
|
-
generate "pu:#{command} --pug-id=#{depth + 1} --force=#{force?} #{args}"
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
private
|
|
130
|
-
|
|
131
|
-
def bundle!(run_tasks = true)
|
|
132
|
-
log :bundle, "install"
|
|
133
|
-
|
|
134
|
-
execute_tasks_before! :bundle if run_tasks
|
|
135
|
-
Bundler.with_unbundled_env do
|
|
136
|
-
run "bundle install", verbose: false
|
|
137
|
-
end
|
|
138
|
-
execute_tasks_after! :bundle if run_tasks
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
def add_task(event, action, task)
|
|
142
|
-
log :add_task, "#{event} #{action}: #{task}"
|
|
143
|
-
|
|
144
|
-
key = :"tasks_#{event}"
|
|
145
|
-
tasks = read_config(key, action, default: [])
|
|
146
|
-
tasks << task
|
|
147
|
-
write_config(key, action => tasks)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
def execute_tasks!(event, action)
|
|
151
|
-
log :execute_tasks!, "#{event} #{action}"
|
|
152
|
-
|
|
153
|
-
key = :"tasks_#{event}"
|
|
154
|
-
tasks = read_config(key, action, default: [])
|
|
155
|
-
tasks.each do |a|
|
|
156
|
-
task = a[0]
|
|
157
|
-
args = a[1] || []
|
|
158
|
-
kwargs = a[2] || {}
|
|
159
|
-
|
|
160
|
-
log :execute_task, "#{event} #{action}: #{task}"
|
|
161
|
-
send task, *args, **kwargs
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
write_config(key, action => [])
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def add_task_before(action, task)
|
|
168
|
-
add_task :before, action, task
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
def add_task_after(action, task)
|
|
172
|
-
add_task :after, action, task
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def execute_tasks_before!(action)
|
|
176
|
-
execute_tasks! :before, action
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def execute_tasks_after!(action)
|
|
180
|
-
execute_tasks! :after, action
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
def depth
|
|
184
|
-
options[:pug_id]
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def force?
|
|
188
|
-
options[:force]
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
def root_pug?
|
|
192
|
-
depth == 0
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
# def process(cmd)
|
|
196
|
-
# stdout, stderr, status = Open3.capture3(cmd + ";")
|
|
197
|
-
# case status.exitstatus
|
|
198
|
-
# when 0
|
|
199
|
-
# stdout
|
|
200
|
-
# else
|
|
201
|
-
# raise stderr
|
|
202
|
-
# end
|
|
203
|
-
# end
|
|
204
|
-
end
|
|
205
|
-
end
|