plutonium 0.44.0 → 0.45.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 +88 -11
- data/.claude/skills/plutonium-assets/SKILL.md +1 -1
- data/.claude/skills/plutonium-controller/SKILL.md +6 -2
- data/.claude/skills/plutonium-create-resource/SKILL.md +1 -1
- data/.claude/skills/plutonium-definition/SKILL.md +445 -53
- data/.claude/skills/plutonium-definition-actions/SKILL.md +2 -2
- data/.claude/skills/plutonium-definition-query/SKILL.md +2 -2
- data/.claude/skills/plutonium-forms/SKILL.md +6 -2
- data/.claude/skills/plutonium-installation/SKILL.md +3 -3
- data/.claude/skills/plutonium-interaction/SKILL.md +3 -3
- data/.claude/skills/plutonium-invites/SKILL.md +1 -1
- data/.claude/skills/plutonium-model/SKILL.md +228 -55
- data/.claude/skills/plutonium-nested-resources/SKILL.md +9 -2
- data/.claude/skills/plutonium-package/SKILL.md +3 -3
- data/.claude/skills/plutonium-policy/SKILL.md +6 -2
- data/.claude/skills/plutonium-portal/SKILL.md +97 -59
- data/.claude/skills/plutonium-profile/SKILL.md +2 -2
- data/.claude/skills/plutonium-rodauth/SKILL.md +1 -1
- data/.claude/skills/plutonium-theming/SKILL.md +1 -1
- data/.claude/skills/plutonium-views/SKILL.md +2 -2
- data/CHANGELOG.md +25 -0
- data/app/assets/plutonium.css +1 -1
- data/gemfiles/rails_7.gemfile.lock +3 -3
- data/gemfiles/rails_8.0.gemfile.lock +3 -3
- data/gemfiles/rails_8.1.gemfile.lock +3 -3
- data/lib/generators/pu/invites/install_generator.rb +2 -2
- data/lib/generators/pu/invites/templates/packages/invites/app/views/invites/user_invitations/show.html.erb.tt +7 -7
- data/lib/generators/pu/saas/portal_generator.rb +17 -0
- data/lib/generators/pu/skills/sync/sync_generator.rb +21 -0
- data/lib/plutonium/engine.rb +1 -1
- data/lib/plutonium/railtie.rb +1 -1
- data/lib/plutonium/ui/form/components/resource_select.rb +1 -1
- data/lib/plutonium/ui/form/components/secure_association.rb +2 -2
- data/lib/plutonium/ui/form/components/secure_polymorphic_association.rb +6 -11
- data/lib/plutonium/version.rb +1 -1
- data/package.json +1 -1
- data/plutonium.gemspec +1 -1
- data/src/css/tokens.css +2 -0
- metadata +4 -8
- data/.claude/skills/plutonium-connect-resource/SKILL.md +0 -130
- data/.claude/skills/plutonium-definition-fields/SKILL.md +0 -535
- data/.claude/skills/plutonium-model-features/SKILL.md +0 -286
- data/.claude/skills/plutonium-resource/SKILL.md +0 -281
data/lib/plutonium/version.rb
CHANGED
data/package.json
CHANGED
data/plutonium.gemspec
CHANGED
|
@@ -44,7 +44,7 @@ Gem::Specification.new do |spec|
|
|
|
44
44
|
spec.add_dependency "phlex-rails"
|
|
45
45
|
spec.add_dependency "phlex-tabler_icons"
|
|
46
46
|
spec.add_dependency "phlexi-field", ">= 0.2.0"
|
|
47
|
-
spec.add_dependency "phlexi-form", ">= 0.14.
|
|
47
|
+
spec.add_dependency "phlexi-form", ">= 0.14.2"
|
|
48
48
|
spec.add_dependency "phlexi-table", ">= 0.2.0"
|
|
49
49
|
spec.add_dependency "phlexi-display", ">= 0.2.0"
|
|
50
50
|
spec.add_dependency "phlexi-menu", ">= 0.4.1"
|
data/src/css/tokens.css
CHANGED
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
--pu-text: #0f172a;
|
|
32
32
|
--pu-text-muted: #64748b;
|
|
33
33
|
--pu-text-subtle: #94a3b8;
|
|
34
|
+
--pu-text-danger: #dc2626;
|
|
34
35
|
|
|
35
36
|
/* ===================
|
|
36
37
|
Table Tokens - Clean minimal design
|
|
@@ -116,6 +117,7 @@
|
|
|
116
117
|
--pu-text: #f8fafc;
|
|
117
118
|
--pu-text-muted: #94a3b8;
|
|
118
119
|
--pu-text-subtle: #64748b;
|
|
120
|
+
--pu-text-danger: #f87171;
|
|
119
121
|
|
|
120
122
|
/* ===================
|
|
121
123
|
Table Tokens (Dark)
|
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.45.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-04-01 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: zeitwerk
|
|
@@ -183,14 +183,14 @@ dependencies:
|
|
|
183
183
|
requirements:
|
|
184
184
|
- - ">="
|
|
185
185
|
- !ruby/object:Gem::Version
|
|
186
|
-
version: 0.14.
|
|
186
|
+
version: 0.14.2
|
|
187
187
|
type: :runtime
|
|
188
188
|
prerelease: false
|
|
189
189
|
version_requirements: !ruby/object:Gem::Requirement
|
|
190
190
|
requirements:
|
|
191
191
|
- - ">="
|
|
192
192
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: 0.14.
|
|
193
|
+
version: 0.14.2
|
|
194
194
|
- !ruby/object:Gem::Dependency
|
|
195
195
|
name: phlexi-table
|
|
196
196
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -400,25 +400,21 @@ extra_rdoc_files: []
|
|
|
400
400
|
files:
|
|
401
401
|
- "# Plutonium: The pre-alpha demo.md"
|
|
402
402
|
- ".claude/skills/plutonium-assets/SKILL.md"
|
|
403
|
-
- ".claude/skills/plutonium-connect-resource/SKILL.md"
|
|
404
403
|
- ".claude/skills/plutonium-controller/SKILL.md"
|
|
405
404
|
- ".claude/skills/plutonium-create-resource/SKILL.md"
|
|
406
405
|
- ".claude/skills/plutonium-definition-actions/SKILL.md"
|
|
407
|
-
- ".claude/skills/plutonium-definition-fields/SKILL.md"
|
|
408
406
|
- ".claude/skills/plutonium-definition-query/SKILL.md"
|
|
409
407
|
- ".claude/skills/plutonium-definition/SKILL.md"
|
|
410
408
|
- ".claude/skills/plutonium-forms/SKILL.md"
|
|
411
409
|
- ".claude/skills/plutonium-installation/SKILL.md"
|
|
412
410
|
- ".claude/skills/plutonium-interaction/SKILL.md"
|
|
413
411
|
- ".claude/skills/plutonium-invites/SKILL.md"
|
|
414
|
-
- ".claude/skills/plutonium-model-features/SKILL.md"
|
|
415
412
|
- ".claude/skills/plutonium-model/SKILL.md"
|
|
416
413
|
- ".claude/skills/plutonium-nested-resources/SKILL.md"
|
|
417
414
|
- ".claude/skills/plutonium-package/SKILL.md"
|
|
418
415
|
- ".claude/skills/plutonium-policy/SKILL.md"
|
|
419
416
|
- ".claude/skills/plutonium-portal/SKILL.md"
|
|
420
417
|
- ".claude/skills/plutonium-profile/SKILL.md"
|
|
421
|
-
- ".claude/skills/plutonium-resource/SKILL.md"
|
|
422
418
|
- ".claude/skills/plutonium-rodauth/SKILL.md"
|
|
423
419
|
- ".claude/skills/plutonium-theming/SKILL.md"
|
|
424
420
|
- ".claude/skills/plutonium-views/SKILL.md"
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: plutonium-connect-resource
|
|
3
|
-
description: Connect existing resources to portals for web access
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Connect Resource Skill
|
|
7
|
-
|
|
8
|
-
Use the `pu:res:conn` generator to connect resources to portals. This is required to expose resources through a portal's web interface.
|
|
9
|
-
|
|
10
|
-
## Command Syntax
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
rails g pu:res:conn RESOURCE [RESOURCE...] --dest=PORTAL_NAME [--singular]
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
**Always specify resources directly** - this avoids interactive prompts. The `--src` option is only needed for interactive mode and can be ignored.
|
|
17
|
-
|
|
18
|
-
### Options
|
|
19
|
-
|
|
20
|
-
| Option | Description |
|
|
21
|
-
|--------|-------------|
|
|
22
|
-
| `--dest=NAME` | Target portal package (required) |
|
|
23
|
-
| `--singular` | Register as a singular resource (e.g., profile, dashboard) |
|
|
24
|
-
|
|
25
|
-
## Usage Patterns
|
|
26
|
-
|
|
27
|
-
### Main App Resources (not in a package)
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
rails g pu:res:conn PropertyAmenity --dest=admin_portal
|
|
31
|
-
rails g pu:res:conn Post Comment Tag --dest=dashboard_portal
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### Namespaced Resources (from a feature package)
|
|
35
|
-
|
|
36
|
-
Use the full class name:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
rails g pu:res:conn Blogging::Post --dest=admin_portal
|
|
40
|
-
rails g pu:res:conn Blogging::Post Blogging::Comment --dest=admin_portal
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Multiple Resources at Once
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
rails g pu:res:conn Property PropertyAmenity Unit Tenant --dest=admin_portal
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Singular Resources
|
|
50
|
-
|
|
51
|
-
For resources that represent a single record per user (e.g., profile, dashboard, settings):
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
rails g pu:res:conn Profile --dest=customer_portal --singular
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
This registers the resource with `singular: true`, generating routes like `/profile` instead of `/profiles/:id`.
|
|
58
|
-
|
|
59
|
-
## What Gets Generated
|
|
60
|
-
|
|
61
|
-
For a resource `Post` connected to `admin_portal`:
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
packages/admin_portal/
|
|
65
|
-
├── app/
|
|
66
|
-
│ ├── controllers/admin_portal/
|
|
67
|
-
│ │ └── posts_controller.rb # Portal controller
|
|
68
|
-
│ ├── policies/admin_portal/
|
|
69
|
-
│ │ └── post_policy.rb # Portal policy (if needed)
|
|
70
|
-
│ └── definitions/admin_portal/
|
|
71
|
-
│ └── post_definition.rb # Portal definition (if needed)
|
|
72
|
-
└── config/
|
|
73
|
-
└── routes.rb # Updated with register_resource
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Generated Controller
|
|
77
|
-
|
|
78
|
-
```ruby
|
|
79
|
-
class AdminPortal::PostsController < ::PostsController
|
|
80
|
-
include AdminPortal::Concerns::Controller
|
|
81
|
-
end
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### Generated Policy
|
|
85
|
-
|
|
86
|
-
```ruby
|
|
87
|
-
class AdminPortal::PostPolicy < ::PostPolicy
|
|
88
|
-
include AdminPortal::ResourcePolicy
|
|
89
|
-
|
|
90
|
-
def permitted_attributes_for_create
|
|
91
|
-
[:title, :content, :user_id]
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def permitted_attributes_for_read
|
|
95
|
-
[:title, :content, :user_id, :created_at, :updated_at]
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def permitted_associations
|
|
99
|
-
%i[]
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### Route Registration
|
|
105
|
-
|
|
106
|
-
```ruby
|
|
107
|
-
# In packages/admin_portal/config/routes.rb
|
|
108
|
-
register_resource ::Post
|
|
109
|
-
register_resource ::Profile, singular: true # With --singular
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## Typical Workflow
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
# 1. Create resources (always specify --dest)
|
|
116
|
-
rails g pu:res:scaffold Post user:belongs_to title:string 'content:text?' --dest=main_app
|
|
117
|
-
|
|
118
|
-
# 2. Run migrations
|
|
119
|
-
rails db:migrate
|
|
120
|
-
|
|
121
|
-
# 3. Connect resources to portal (always specify --dest)
|
|
122
|
-
rails g pu:res:conn Post --dest=admin_portal
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## Important Notes
|
|
126
|
-
|
|
127
|
-
1. **Always specify resources directly** - avoids prompts, no `--src` needed
|
|
128
|
-
2. **Always use the generator** - never manually connect resources
|
|
129
|
-
3. **Run after migrations** - the generator reads model columns for policy attributes
|
|
130
|
-
4. **Portal-specific customization** - customize the generated policy/definition per-portal
|