plutonium 0.42.0 → 0.43.1

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/skills/plutonium-controller/SKILL.md +38 -1
  3. data/.claude/skills/plutonium-definition/SKILL.md +14 -0
  4. data/.claude/skills/plutonium-forms/SKILL.md +16 -1
  5. data/.claude/skills/plutonium-profile/SKILL.md +276 -0
  6. data/.claude/skills/plutonium-views/SKILL.md +23 -1
  7. data/CHANGELOG.md +42 -0
  8. data/app/assets/plutonium.css +2 -2
  9. data/app/views/plutonium/_resource_header.html.erb +6 -27
  10. data/app/views/plutonium/_resource_sidebar.html.erb +1 -2
  11. data/app/views/resource/_resource_details.rabl +3 -2
  12. data/app/views/resource/index.rabl +3 -2
  13. data/app/views/resource/show.rabl +3 -2
  14. data/docs/guides/user-profile.md +322 -0
  15. data/docs/reference/controller/index.md +38 -1
  16. data/docs/reference/definition/index.md +16 -0
  17. data/docs/reference/views/forms.md +15 -0
  18. data/docs/reference/views/index.md +23 -1
  19. data/gemfiles/rails_7.gemfile.lock +1 -1
  20. data/gemfiles/rails_8.0.gemfile.lock +1 -1
  21. data/gemfiles/rails_8.1.gemfile.lock +1 -1
  22. data/lib/generators/pu/core/assets/assets_generator.rb +12 -0
  23. data/lib/generators/pu/core/install/templates/app/controllers/resource_controller.rb.tt +11 -0
  24. data/lib/generators/pu/core/typespec/templates/common.tsp.tt +95 -0
  25. data/lib/generators/pu/core/typespec/templates/main.tsp.tt +27 -0
  26. data/lib/generators/pu/core/typespec/templates/main_multi.tsp.tt +25 -0
  27. data/lib/generators/pu/core/typespec/templates/model.tsp.tt +226 -0
  28. data/lib/generators/pu/core/typespec/typespec_generator.rb +342 -0
  29. data/lib/generators/pu/invites/USAGE +0 -1
  30. data/lib/generators/pu/invites/install_generator.rb +62 -15
  31. data/lib/generators/pu/invites/templates/db/migrate/create_user_invites.rb.tt +2 -2
  32. data/lib/generators/pu/invites/templates/packages/invites/app/controllers/invites/user_invitations_controller.rb.tt +2 -0
  33. data/lib/generators/pu/invites/templates/packages/invites/app/controllers/invites/welcome_controller.rb.tt +1 -0
  34. data/lib/generators/pu/invites/templates/packages/invites/app/models/invites/user_invite.rb.tt +5 -5
  35. data/lib/generators/pu/invites/templates/packages/invites/app/views/invites/user_invitations/signup.html.erb.tt +4 -4
  36. data/lib/generators/pu/lib/plutonium_generators/concerns/actions.rb +1 -1
  37. data/lib/generators/pu/lib/plutonium_generators/generator.rb +29 -0
  38. data/lib/generators/pu/lib/plutonium_generators/model_generator_base.rb +6 -23
  39. data/lib/generators/pu/pkg/portal/portal_generator.rb +5 -1
  40. data/lib/generators/pu/profile/USAGE +59 -0
  41. data/lib/generators/pu/profile/concerns/profile_arguments.rb +27 -0
  42. data/lib/generators/pu/profile/conn/USAGE +33 -0
  43. data/lib/generators/pu/profile/conn_generator.rb +167 -0
  44. data/lib/generators/pu/profile/install_generator.rb +119 -0
  45. data/lib/generators/pu/profile/setup/USAGE +42 -0
  46. data/lib/generators/pu/profile/setup_generator.rb +73 -0
  47. data/lib/generators/pu/rodauth/account_generator.rb +2 -4
  48. data/lib/generators/pu/rodauth/install_generator.rb +2 -2
  49. data/lib/generators/pu/rodauth/templates/app/rodauth/account_rodauth_plugin.rb.tt +3 -0
  50. data/lib/generators/pu/saas/api_client_generator.rb +0 -2
  51. data/lib/generators/pu/saas/membership_generator.rb +68 -19
  52. data/lib/generators/pu/saas/setup_generator.rb +7 -2
  53. data/lib/generators/pu/saas/user_generator.rb +0 -2
  54. data/lib/plutonium/auth/rodauth.rb +8 -0
  55. data/lib/plutonium/core/controller.rb +7 -4
  56. data/lib/plutonium/core/controllers/authorizable.rb +5 -1
  57. data/lib/plutonium/definition/base.rb +7 -0
  58. data/lib/plutonium/helpers/display_helper.rb +6 -0
  59. data/lib/plutonium/profile/security_section.rb +118 -0
  60. data/lib/plutonium/resource/controller.rb +17 -7
  61. data/lib/plutonium/resource/controllers/interactive_actions.rb +11 -25
  62. data/lib/plutonium/resource/controllers/presentable.rb +46 -3
  63. data/lib/plutonium/resource/record/associated_with.rb +7 -1
  64. data/lib/plutonium/routing/mapper_extensions.rb +18 -18
  65. data/lib/plutonium/routing/route_set_extensions.rb +23 -2
  66. data/lib/plutonium/ui/breadcrumbs.rb +111 -131
  67. data/lib/plutonium/ui/dyna_frame/content.rb +12 -2
  68. data/lib/plutonium/ui/form/resource.rb +26 -19
  69. data/lib/plutonium/ui/page/base.rb +14 -14
  70. data/lib/plutonium/ui/table/components/scopes_bar.rb +2 -74
  71. data/lib/plutonium/ui/table/components/selection_column.rb +6 -2
  72. data/lib/plutonium/ui/table/resource.rb +3 -2
  73. data/lib/plutonium/version.rb +1 -1
  74. data/lib/tasks/release.rake +6 -6
  75. data/package.json +1 -1
  76. metadata +17 -3
  77. data/lib/generators/pu/rodauth/concerns/gem_helpers.rb +0 -19
@@ -131,10 +131,10 @@ namespace :release do
131
131
  task :publish_npm do
132
132
  puts "Publishing npm package..."
133
133
 
134
- # Check if user is logged in to npm
134
+ # Check if user is logged in to npm, login if needed
135
135
  unless system("npm whoami > /dev/null 2>&1")
136
- puts " You are not logged in to npm. Please run: npm login"
137
- abort("npm authentication required")
136
+ puts "Not logged in to npm. Opening login..."
137
+ system("npm login") || abort("npm login failed")
138
138
  end
139
139
 
140
140
  # Publish to npm
@@ -162,10 +162,10 @@ namespace :release do
162
162
 
163
163
  puts "Starting release workflow for v#{version}..."
164
164
 
165
- # Check npm authentication early
165
+ # Check npm authentication early, login if needed
166
166
  unless system("npm whoami > /dev/null 2>&1")
167
- puts "Error: You are not logged in to npm. Please run: npm login"
168
- exit 1
167
+ puts "Not logged in to npm. Opening login..."
168
+ system("npm login") || abort("npm login failed")
169
169
  end
170
170
  puts "✓ npm authenticated as: #{`npm whoami`.strip}"
171
171
 
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radioactive-labs/plutonium",
3
- "version": "0.42.0",
3
+ "version": "0.43.1",
4
4
  "description": "Build production-ready Rails apps in minutes, not days. Convention-driven, fully customizable, AI-ready.",
5
5
  "type": "module",
6
6
  "main": "src/js/core.js",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plutonium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.42.0
4
+ version: 0.43.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Froelich
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-02-14 00:00:00.000000000 Z
11
+ date: 2026-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk
@@ -418,6 +418,7 @@ files:
418
418
  - ".claude/skills/plutonium-package/SKILL.md"
419
419
  - ".claude/skills/plutonium-policy/SKILL.md"
420
420
  - ".claude/skills/plutonium-portal/SKILL.md"
421
+ - ".claude/skills/plutonium-profile/SKILL.md"
421
422
  - ".claude/skills/plutonium-resource/SKILL.md"
422
423
  - ".claude/skills/plutonium-rodauth/SKILL.md"
423
424
  - ".claude/skills/plutonium-theming/SKILL.md"
@@ -543,6 +544,7 @@ files:
543
544
  - docs/guides/theming.md
544
545
  - docs/guides/troubleshooting.md
545
546
  - docs/guides/user-invites.md
547
+ - docs/guides/user-profile.md
546
548
  - docs/index.md
547
549
  - docs/og-image.html
548
550
  - docs/public/android-chrome-192x192.png
@@ -609,6 +611,11 @@ files:
609
611
  - lib/generators/pu/core/install/templates/config/packages.rb
610
612
  - lib/generators/pu/core/ruby/ruby_generator.rb
611
613
  - lib/generators/pu/core/ruby/templates/.keep
614
+ - lib/generators/pu/core/typespec/templates/common.tsp.tt
615
+ - lib/generators/pu/core/typespec/templates/main.tsp.tt
616
+ - lib/generators/pu/core/typespec/templates/main_multi.tsp.tt
617
+ - lib/generators/pu/core/typespec/templates/model.tsp.tt
618
+ - lib/generators/pu/core/typespec/typespec_generator.rb
612
619
  - lib/generators/pu/core/update/update_generator.rb
613
620
  - lib/generators/pu/docker/install/install_generator.rb
614
621
  - lib/generators/pu/docker/install/templates/.keep
@@ -719,6 +726,13 @@ files:
719
726
  - lib/generators/pu/pkg/portal/templates/app/views/package/dashboard/index.html.erb
720
727
  - lib/generators/pu/pkg/portal/templates/config/routes.rb.tt
721
728
  - lib/generators/pu/pkg/portal/templates/lib/engine.rb.tt
729
+ - lib/generators/pu/profile/USAGE
730
+ - lib/generators/pu/profile/concerns/profile_arguments.rb
731
+ - lib/generators/pu/profile/conn/USAGE
732
+ - lib/generators/pu/profile/conn_generator.rb
733
+ - lib/generators/pu/profile/install_generator.rb
734
+ - lib/generators/pu/profile/setup/USAGE
735
+ - lib/generators/pu/profile/setup_generator.rb
722
736
  - lib/generators/pu/res/conn/USAGE
723
737
  - lib/generators/pu/res/conn/conn_generator.rb
724
738
  - lib/generators/pu/res/conn/templates/.keep
@@ -745,7 +759,6 @@ files:
745
759
  - lib/generators/pu/rodauth/concerns/account_selector.rb
746
760
  - lib/generators/pu/rodauth/concerns/configuration.rb
747
761
  - lib/generators/pu/rodauth/concerns/feature_selector.rb
748
- - lib/generators/pu/rodauth/concerns/gem_helpers.rb
749
762
  - lib/generators/pu/rodauth/install_generator.rb
750
763
  - lib/generators/pu/rodauth/migration/active_record/account_expiration.erb
751
764
  - lib/generators/pu/rodauth/migration/active_record/active_sessions.erb
@@ -896,6 +909,7 @@ files:
896
909
  - lib/plutonium/portal/controller.rb
897
910
  - lib/plutonium/portal/dynamic_controllers.rb
898
911
  - lib/plutonium/portal/engine.rb
912
+ - lib/plutonium/profile/security_section.rb
899
913
  - lib/plutonium/query/adhoc_block.rb
900
914
  - lib/plutonium/query/base.rb
901
915
  - lib/plutonium/query/filter.rb
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pu
4
- module Rodauth
5
- module Concerns
6
- module GemHelpers
7
- private
8
-
9
- def gem_in_bundle?(name)
10
- in_root do
11
- return true if File.exist?("Gemfile") && File.read("Gemfile").match?(/gem ['"]#{name}['"]/)
12
- return true if File.exist?("Gemfile.lock") && File.read("Gemfile.lock").include?(" #{name} ")
13
- end
14
- false
15
- end
16
- end
17
- end
18
- end
19
- end