compony 0.11.8 → 0.11.9

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 (132) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +36 -1
  3. data/CHANGELOG.md +31 -0
  4. data/CLAUDE.md +85 -0
  5. data/Gemfile.lock +1 -1
  6. data/README.md +13 -3
  7. data/VERSION +1 -1
  8. data/compony.gemspec +3 -3
  9. data/doc/ComponentGenerator.html +1 -1
  10. data/doc/Components.html +1 -1
  11. data/doc/ComponentsGenerator.html +1 -1
  12. data/doc/Compony/Component.html +54 -54
  13. data/doc/Compony/ComponentMixins/Default/Labelling.html +1 -1
  14. data/doc/Compony/ComponentMixins/Default/Standalone/ResourcefulVerbDsl.html +1 -1
  15. data/doc/Compony/ComponentMixins/Default/Standalone/StandaloneDsl.html +109 -70
  16. data/doc/Compony/ComponentMixins/Default/Standalone/VerbDsl.html +64 -28
  17. data/doc/Compony/ComponentMixins/Default/Standalone.html +1 -1
  18. data/doc/Compony/ComponentMixins/Default.html +1 -1
  19. data/doc/Compony/ComponentMixins/Resourceful.html +213 -74
  20. data/doc/Compony/ComponentMixins.html +1 -1
  21. data/doc/Compony/Components/Buttons/CssButton.html +1 -1
  22. data/doc/Compony/Components/Buttons/Link.html +1 -1
  23. data/doc/Compony/Components/Buttons.html +1 -1
  24. data/doc/Compony/Components/Destroy.html +83 -29
  25. data/doc/Compony/Components/Edit.html +110 -38
  26. data/doc/Compony/Components/Form.html +551 -208
  27. data/doc/Compony/Components/Index.html +1 -1
  28. data/doc/Compony/Components/List.html +3 -3
  29. data/doc/Compony/Components/New.html +110 -38
  30. data/doc/Compony/Components/Show.html +1 -1
  31. data/doc/Compony/Components/WithForm.html +194 -47
  32. data/doc/Compony/Components.html +1 -1
  33. data/doc/Compony/ControllerMixin.html +1 -1
  34. data/doc/Compony/Engine.html +1 -1
  35. data/doc/Compony/Intent.html +2 -2
  36. data/doc/Compony/ManageIntentsDsl.html +1 -1
  37. data/doc/Compony/MethodAccessibleHash.html +1 -1
  38. data/doc/Compony/ModelFields/Anchormodel.html +1 -1
  39. data/doc/Compony/ModelFields/Association.html +1 -1
  40. data/doc/Compony/ModelFields/Attachment.html +1 -1
  41. data/doc/Compony/ModelFields/Base.html +1 -1
  42. data/doc/Compony/ModelFields/Boolean.html +1 -1
  43. data/doc/Compony/ModelFields/Color.html +1 -1
  44. data/doc/Compony/ModelFields/Currency.html +1 -1
  45. data/doc/Compony/ModelFields/Date.html +1 -1
  46. data/doc/Compony/ModelFields/Datetime.html +1 -1
  47. data/doc/Compony/ModelFields/Decimal.html +1 -1
  48. data/doc/Compony/ModelFields/Email.html +1 -1
  49. data/doc/Compony/ModelFields/Float.html +1 -1
  50. data/doc/Compony/ModelFields/Integer.html +1 -1
  51. data/doc/Compony/ModelFields/Percentage.html +1 -1
  52. data/doc/Compony/ModelFields/Phone.html +1 -1
  53. data/doc/Compony/ModelFields/RichText.html +1 -1
  54. data/doc/Compony/ModelFields/String.html +1 -1
  55. data/doc/Compony/ModelFields/Text.html +1 -1
  56. data/doc/Compony/ModelFields/Time.html +1 -1
  57. data/doc/Compony/ModelFields/Url.html +1 -1
  58. data/doc/Compony/ModelFields.html +1 -1
  59. data/doc/Compony/ModelMixin.html +1 -1
  60. data/doc/Compony/NaturalOrdering.html +1 -1
  61. data/doc/Compony/RequestContext.html +1 -1
  62. data/doc/Compony/Version.html +1 -1
  63. data/doc/Compony/ViewHelpers.html +1 -1
  64. data/doc/Compony/VirtualModel.html +1 -1
  65. data/doc/Compony.html +1 -1
  66. data/doc/ComponyController.html +1 -1
  67. data/doc/_index.html +97 -1
  68. data/doc/file.CHANGELOG.html +758 -0
  69. data/doc/file.README.html +25 -4
  70. data/doc/file.basic_component.html +314 -0
  71. data/doc/file.cookbook.html +189 -0
  72. data/doc/file.destroy.html +105 -0
  73. data/doc/file.dsl_reference.html +672 -0
  74. data/doc/file.edit.html +109 -0
  75. data/doc/file.example.html +291 -0
  76. data/doc/file.example_advanced.html +257 -0
  77. data/doc/file.feasibility.html +115 -0
  78. data/doc/file.form.html +195 -0
  79. data/doc/file.generators.html +89 -0
  80. data/doc/file.glossary.html +217 -0
  81. data/doc/file.gotchas.html +222 -0
  82. data/doc/file.index.html +135 -0
  83. data/doc/file.inheritance.html +136 -0
  84. data/doc/file.installation.html +115 -0
  85. data/doc/file.integrations.html +218 -0
  86. data/doc/file.intents.html +265 -0
  87. data/doc/file.internal_datastructures.html +129 -0
  88. data/doc/file.list.html +253 -0
  89. data/doc/file.maintaining.html +127 -0
  90. data/doc/file.model_fields.html +137 -0
  91. data/doc/file.nesting.html +237 -0
  92. data/doc/file.new.html +109 -0
  93. data/doc/file.ownership.html +98 -0
  94. data/doc/file.patterns.html +669 -0
  95. data/doc/file.pre_built_components.html +99 -0
  96. data/doc/file.resourceful.html +181 -0
  97. data/doc/file.show.html +158 -0
  98. data/doc/file.standalone.html +233 -0
  99. data/doc/file.virtual_models.html +117 -0
  100. data/doc/file.with_form.html +157 -0
  101. data/doc/file_list.html +160 -0
  102. data/doc/guide/cookbook.md +41 -0
  103. data/doc/guide/dsl_reference.md +155 -0
  104. data/doc/guide/example_advanced.md +209 -0
  105. data/doc/guide/generators.md +1 -1
  106. data/doc/guide/glossary.md +42 -0
  107. data/doc/guide/gotchas.md +125 -0
  108. data/doc/guide/maintaining.md +64 -0
  109. data/doc/guide/patterns.md +681 -0
  110. data/doc/guide/pre_built_components/edit.md +1 -1
  111. data/doc/guide/pre_built_components/index.md +64 -1
  112. data/doc/guide/pre_built_components/list.md +111 -7
  113. data/doc/guide/pre_built_components/show.md +57 -2
  114. data/doc/guide/pre_built_components/with_form.md +56 -9
  115. data/doc/guide/pre_built_components.md +7 -2
  116. data/doc/guide/standalone.md +16 -1
  117. data/doc/index.html +25 -4
  118. data/doc/integrations.md +61 -0
  119. data/doc/llms.txt +62 -0
  120. data/doc/top-level-namespace.html +1 -1
  121. data/lib/compony/component.rb +8 -3
  122. data/lib/compony/component_mixins/default/standalone/standalone_dsl.rb +32 -15
  123. data/lib/compony/component_mixins/default/standalone/verb_dsl.rb +11 -3
  124. data/lib/compony/component_mixins/resourceful.rb +30 -16
  125. data/lib/compony/components/destroy.rb +21 -1
  126. data/lib/compony/components/edit.rb +25 -1
  127. data/lib/compony/components/form.rb +63 -21
  128. data/lib/compony/components/list.rb +1 -1
  129. data/lib/compony/components/new.rb +25 -1
  130. data/lib/compony/components/with_form.rb +20 -5
  131. data/lib/compony/intent.rb +1 -1
  132. metadata +43 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4da66a592536e24395c93aecc77d12bf0f3dcc85e2fd599c487764776068f121
4
- data.tar.gz: 55ea0cd74cff7574474f6f08db471abf6f593bdc8445cb4d0b945a5264a7de03
3
+ metadata.gz: c96b51289100f96400e08df0b199dfd9cac2cff364824cc343ba984529167815
4
+ data.tar.gz: 5d8d262267b872b04a8e73cc8aa1c4d1a5e3f30ab472d3d760a28ba81f655d43
5
5
  SHA512:
6
- metadata.gz: e3a1e0481fdc62762cbb01777340d7b22cfe3c90d819599d571cf1793ef0c1366a4908311da30075c7c38231ec60b937bb0425dce6860645a70135d6da110232
7
- data.tar.gz: 2b9e1935658027be623004f995d5a0950cc993383a78bbdf06a593e7459be0c3beded06a1283af365c52249b6861d95b7b4887088b85774edaa5034130eff68d
6
+ metadata.gz: e412e808765697862c9f1c48ccadb89fed6c0e74a3487f88080230956ebced430e7ec78e2815b2a9fbc4ef6971885679f75ab4d639c4de3c678246844747bcd7
7
+ data.tar.gz: 07c13110a8ebf76b1e244de0ef7960555a1d86e1af8b90370fc2893c27a8e9d81c499619ff1d2a1bbf9fcde6b1a4c1b96b0cc597bb5120edca68c0937f382e95
data/.yardopts CHANGED
@@ -1,2 +1,37 @@
1
1
  --markup=markdown
2
- --protected
2
+ --protected
3
+ --main README.md
4
+ -
5
+ README.md
6
+ CHANGELOG.md
7
+ doc/guide/installation.md
8
+ doc/guide/example.md
9
+ doc/guide/example_advanced.md
10
+ doc/guide/basic_component.md
11
+ doc/guide/standalone.md
12
+ doc/guide/inheritance.md
13
+ doc/guide/nesting.md
14
+ doc/guide/resourceful.md
15
+ doc/guide/intents.md
16
+ doc/guide/feasibility.md
17
+ doc/guide/ownership.md
18
+ doc/guide/model_fields.md
19
+ doc/guide/generators.md
20
+ doc/guide/internal_datastructures.md
21
+ doc/guide/virtual_models.md
22
+ doc/guide/pre_built_components.md
23
+ doc/guide/pre_built_components/show.md
24
+ doc/guide/pre_built_components/index.md
25
+ doc/guide/pre_built_components/list.md
26
+ doc/guide/pre_built_components/destroy.md
27
+ doc/guide/pre_built_components/with_form.md
28
+ doc/guide/pre_built_components/form.md
29
+ doc/guide/pre_built_components/new.md
30
+ doc/guide/pre_built_components/edit.md
31
+ doc/guide/dsl_reference.md
32
+ doc/guide/glossary.md
33
+ doc/guide/gotchas.md
34
+ doc/guide/patterns.md
35
+ doc/guide/cookbook.md
36
+ doc/integrations.md
37
+ doc/guide/maintaining.md
data/CHANGELOG.md CHANGED
@@ -1,3 +1,34 @@
1
+ # 0.11.9
2
+
3
+ - Fix `standalone` overrides clobbering inherited `layout` / `skip_authentication` /
4
+ `skip_forgery_protection`. A second `standalone` call (e.g. a subclass overriding a
5
+ pre-built component) re-ran `StandaloneDsl` whose `to_conf` always emitted the hard
6
+ defaults (`layout: true`, `skip_*: false`); `deep_merge!` then overwrote the value
7
+ inherited from the parent. These now default to `nil` and the real defaults are only
8
+ injected when `provide_defaults` is true (first call), so `compact` strips them on
9
+ overrides and `deep_merge!` preserves the inherited value — mirroring `VerbDsl#to_conf`.
10
+ Subclasses no longer need to repeat `layout :backend` just to keep it.
11
+ - Enhance documentation for better LLM support (and humans as well of course):
12
+ - Documentation: add agent-oriented docs — `CLAUDE.md` primer, `doc/llms.txt` index,
13
+ `doc/guide/dsl_reference.md`, `doc/guide/glossary.md`, `doc/guide/gotchas.md`,
14
+ `doc/guide/example_advanced.md`, `doc/guide/patterns.md`, `doc/guide/cookbook.md`
15
+ (task-indexed recipes). Thicken the thin pre-built
16
+ component docs (Index, Show, List, WithForm). Fix stale docs: README guide index links
17
+ (Virtual models, Edit), `pre_built_components.md` (wrongly claimed no Show/Index
18
+ component; Edit link), and an `Edit` hook name in `edit.md` (`on_update_failed`).
19
+ - Inline YARD: documented previously-bare DSL hooks (New/Edit/Destroy `on_*`) and added
20
+ `@param`/`@return`/`@yield`/`@api` plus `@!group DSL` to the WithForm, Form,
21
+ Resourceful, verb and standalone DSL methods. Comments only — no behavior change.
22
+ - `.yardopts` now lists the guide pages as extra files so the whole guide (including
23
+ the new agent docs) renders in the YARD/rubydoc reference, not just `lib/`.
24
+ - Add `doc/integrations.md` (companion-gem map mirroring the gemspec) and
25
+ `doc/guide/maintaining.md` (release / docs / dependency / anonymization policy);
26
+ cross-link non-obvious DSL methods (e.g. `path`) to matching patterns.
27
+ - Fix broken relative links: `generators.md` → `inheritance.md#best-practice` (was a
28
+ doubled `./doc/guide/` path) and two wrong-depth links in `pre_built_components.md`
29
+ (`../` → `./`). Full guide link/anchor set now verified (0 broken).
30
+ - (Run `yard doc` to regenerate the HTML under `doc/` after doc changes.)
31
+
1
32
  # 0.11.8
2
33
 
3
34
  - Fix `Compony::VirtualModel#attributes` to include virtual attributes (declared via `attribute :foo, :type`). The `include ActiveModel::Attributes` was shadowing `ActiveType::VirtualAttributes#attributes`, so virtual attribute values were stored in `@virtual_attributes` but invisible to `#attributes`, breaking callers that use `model.attributes.slice(...)` or `model.attributes.select { ... }`.
data/CLAUDE.md ADDED
@@ -0,0 +1,85 @@
1
+ # Compony — agent primer
2
+
3
+ Compony is a Ruby on Rails gem. A **component** = one Ruby class that exports a route, a
4
+ controller action, and a view (written in [Dyny](https://github.com/kalsan/dyny), HTML as
5
+ Ruby). Components are subclassable, so views and controller logic inherit like normal Ruby.
6
+
7
+ This file orients coding agents. Humans: start at [README.md](/README.md).
8
+
9
+ ## Mental model in 6 sentences
10
+
11
+ 1. A component lives at `app/components/<family>/<comp>.rb` as `Components::<Family>::<Comp>`.
12
+ Family = pluralized model/controller name (`Users`); comp = action name (`Show`).
13
+ 2. Almost all behavior goes inside a `setup do ... end` block; subclass `setup` runs after
14
+ parent `setup`, so children override parents.
15
+ 3. `standalone path: '...' do verb :get do authorize { ... } end end` generates the Rails
16
+ route. No `standalone` → component must be nested in another, has no URL.
17
+ 4. `content do ... end` is the view, evaluated in a `RequestContext` (Dyny + controller
18
+ helpers + component as `self`-ish providers).
19
+ 5. Resourceful components (`include Compony::ComponentMixins::Resourceful` or inherit a
20
+ pre-built one) auto-load a record into `@data` from `params[:id]`.
21
+ 6. Point between components with **intents**: `Compony.path(:show, model)` for redirects,
22
+ `render_intent(:edit, model)` for buttons/links inside content.
23
+
24
+ ## Public API surface (the `Compony.*` module methods)
25
+
26
+ | Symbol | Purpose |
27
+ | --- | --- |
28
+ | `Compony.intent(...)` | Build an `Intent` (gateway to a component). |
29
+ | `Compony.path(comp, model_or_family, **)` | Rails path string. Use for redirects. |
30
+ | `Compony.comp_class_for(:show, family)` | Returns comp class or `nil` (existence check). |
31
+ | `Compony.comp_class_for!(...)` | Same, raises if missing. |
32
+ | `Compony.root_comp` | Currently rendered root component (use in layout). |
33
+ | `Compony.family_name_for(model_or_sym)` | Resolve family name. |
34
+ | `Compony.register_button_style(:name, 'Class')` | Register a button style. |
35
+ | `Compony.default_button_style=(:name)` | Set default button style. |
36
+ | `Compony.authentication_before_action=(sym)` | Hook app auth into Compony. |
37
+ | `Compony.content_before_root_comp { }` / `_after_` | Inject markup around root comp. |
38
+ | `Compony.model_field_namespaces=([...])` | Add custom model-field type classes. |
39
+
40
+ Set the config setters in `config/initializers/compony.rb`.
41
+
42
+ ## Where to read what
43
+
44
+ | You need to… | Read |
45
+ | --- | --- |
46
+ | Full DSL method list with signatures | [doc/guide/dsl_reference.md](/doc/guide/dsl_reference.md) |
47
+ | Definition of a Compony term | [doc/guide/glossary.md](/doc/guide/glossary.md) |
48
+ | Avoid a known footgun | [doc/guide/gotchas.md](/doc/guide/gotchas.md) |
49
+ | A simple end-to-end app | [doc/guide/example.md](/doc/guide/example.md) |
50
+ | A realistic app (custom form, virtual fields, CSV, feasibility) | [doc/guide/example_advanced.md](/doc/guide/example_advanced.md) |
51
+ | Routing | [doc/guide/standalone.md](/doc/guide/standalone.md) |
52
+ | Linking between components | [doc/guide/intents.md](/doc/guide/intents.md) |
53
+ | Pre-built CRUD components | [doc/guide/pre_built_components.md](/doc/guide/pre_built_components.md) |
54
+ | Companion gems (required/optional/app-side) | [doc/integrations.md](/doc/integrations.md) |
55
+ | Release & docs policy (working on the gem) | [doc/guide/maintaining.md](/doc/guide/maintaining.md) |
56
+ | Machine-readable index of all docs | [doc/llms.txt](/doc/llms.txt) |
57
+
58
+ ## Source layout
59
+
60
+ - `lib/compony.rb` — the `Compony.*` module methods (public API).
61
+ - `lib/compony/component.rb` — base `Component`: `setup`, `content`, `before_render`,
62
+ `exposed_intents`, `sub_comp`, `render`, `path`.
63
+ - `lib/compony/component_mixins/resourceful.rb` — `@data`, `load_data`, `store_data`,
64
+ `assign_attributes`, `after_assign_attributes`, `data_class`.
65
+ - `lib/compony/component_mixins/default/standalone/` — `standalone` / `verb` / `respond` /
66
+ `authorize` / `skip_authentication!` / `layout` DSL.
67
+ - `lib/compony/components/` — pre-built `Show Index List New Edit Form WithForm Destroy`.
68
+ - `lib/compony/intent.rb` — `Intent`: path/label/feasibility/button rendering.
69
+ - `lib/compony/model_mixin.rb` — model side: `field`, `prevent` (feasibility), `owned_by`.
70
+ - `lib/compony/virtual_model.rb` — non-persistent ActiveType-backed models.
71
+
72
+ When a consumer app vendors the gem, source is at
73
+ `vendor/bundle/ruby/<ver>/gems/compony-<ver>/`.
74
+
75
+ ## Conventions when editing this gem
76
+
77
+ - DSL methods carry a `# DSL method` comment. Keep that marker; the
78
+ [dsl_reference.md](/doc/guide/dsl_reference.md) table mirrors it.
79
+ - Every user-facing behavior change needs a `CHANGELOG.md` entry (under `# unreleased`).
80
+ `VERSION` ending in `.edge` means an unreleased prerelease.
81
+ - Write code matching surrounding style. RuboCop config is in `.rubocop.yml`.
82
+ - The gem ships no CSS/JS — never add styling; that is the host app's job.
83
+ - Dependencies live in the `:gemspec` Rake task (not the hand); `compony.gemspec` is
84
+ generated. New guide page → add it to [.yardopts](/.yardopts) or it won't render.
85
+ - Full release/docs/anonymization rules: [doc/guide/maintaining.md](/doc/guide/maintaining.md).
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- compony (0.11.8.edge)
4
+ compony (0.11.9.edge)
5
5
  anchormodel (>= 0.3.0)
6
6
  cancancan (~> 3.6.1)
7
7
  dslblend (>= 0.0.3)
data/README.md CHANGED
@@ -19,7 +19,7 @@ Compony's key aspects:
19
19
  - Compony's feasibility framework allows you to prohibit actions based on conditions, along with an error message. This causes all buttons pointing to that action to be disabled with a meaningful error message.
20
20
  - Compony only structures your code, but provides no style whatsoever. It is like a bookshelf rather than a reader's library. You still implement your own layouts, CSS and Javascript to define the behavior of your front-end.
21
21
  - Compony seamlessly integrates with Rails and does not interfere with existing code. Using Compony, you **can** write your application as components, but it is still possible to have regular routes, controllers and views side-to-side to it. This way, you can migrate your applications to Compony little by little and enter and leave the Compony world as you please. It is also possible to render Compony components from regular views and vice versa.
22
- - Compony is built for Rails 7, 7.1 and 8, and fully supports Stimulus and Turbo Drive. It is also compatible Turbo Frames and Streams, but there are not many helpers specifically targetting theme at this point..
22
+ - Compony requires Rails >= 7.2.1 and Ruby >= 3.3.5 (see [doc/integrations.md](./doc/integrations.md) for all dependencies), and fully supports Stimulus and Turbo Drive. It is also compatible Turbo Frames and Streams, but there are not many helpers specifically targetting theme at this point..
23
23
  - Compony uses [CanCanCan](https://github.com/CanCanCommunity/cancancan) for authorization but does not provide an authentication mechanism. You can easily build your own by creating login/logout components that manage cookies, and configure Compony to enforce authentication using the `Compony.authentication_before_action` setter. I have also successfully tested Compony to work with [Devise](https://github.com/heartcombo/devise).
24
24
 
25
25
  ## State of the project
@@ -35,7 +35,17 @@ A project with a similar aim, but a different approach, is [Phlex](https://githu
35
35
  The following topics should help you get started. Please note that the links will not work in yard doc - read this on [Compony's GitHub repo](https://github.com/kalsan/compony).
36
36
 
37
37
  - [Self-contained example](./doc/guide/example.md) for those who like to dive straight into code
38
+ - [Advanced example](./doc/guide/example_advanced.md): custom form, feasibility, CSV export, virtual-model launch form
38
39
  - [Installation](./doc/guide/installation.md) (start here)
40
+ - Quick reference (also handy for AI coding assistants):
41
+ - [DSL reference](./doc/guide/dsl_reference.md): every DSL method with signature and context
42
+ - [Glossary](./doc/guide/glossary.md): one-line definitions of Compony vocabulary
43
+ - [Gotchas](./doc/guide/gotchas.md): known anti-patterns with symptom, cause, fix
44
+ - [Real-world patterns](./doc/guide/patterns.md): idioms distilled from production apps
45
+ - [Cookbook](./doc/guide/cookbook.md): recipes indexed by task ("I want to do X")
46
+ - [Integrations](./doc/integrations.md): companion gems — required, optional, app-side
47
+ - [Agent primer](./CLAUDE.md) and [doc/llms.txt](./doc/llms.txt): orientation for LLM-based tools
48
+ - [Maintaining](./doc/guide/maintaining.md): release & docs policy (for gem contributors)
39
49
  - Concepts and usage:
40
50
  - [A basic component](./doc/guide/basic_component.md): Basic concepts relevant for all components
41
51
  - [Standalone](./doc/guide/standalone.md): Routing to components
@@ -48,7 +58,7 @@ The following topics should help you get started. Please note that the links wil
48
58
  - [Model fields](./doc/guide/model_fields.md): Allowing Compony to auto-generate UI elements by telling it about the structure of your model
49
59
  - [Rails generators](./doc/guide/generators.md): Creating components quickly
50
60
  - [Internal datastructures](./doc/guide/internal_datastructures.md): Noteworthy datastructures provided by Compony
51
- - [Virtual models](./doc/guide/internal_datastructures.md): Unleashing non-persistent interactions through Compony's `ActiveType` integration
61
+ - [Virtual models](./doc/guide/virtual_models.md): Unleashing non-persistent interactions through Compony's `ActiveType` integration
52
62
  - Pre-built components shipped with Compony
53
63
  - [Introduction](./doc/guide/pre_built_components.md)
54
64
  - [Show](./doc/guide/pre_built_components/show.md): Compony's equivalent to Rail's `show` controller action
@@ -58,7 +68,7 @@ The following topics should help you get started. Please note that the links wil
58
68
  - [WithForm](./doc/guide/pre_built_components/with_form.md): A base class for components containing and submitting forms
59
69
  - [Form](./doc/guide/pre_built_components/form.md): Compony's equivalent to Rail's `_form` partial
60
70
  - [New](./doc/guide/pre_built_components/new.md): Compony's equivalent to Rail's `new` and `create` controller action
61
- - [Edit](./doc/guide/pre_built_components/new.md): Compony's equivalent to Rail's `edit` and `update` controller action
71
+ - [Edit](./doc/guide/pre_built_components/edit.md): Compony's equivalent to Rail's `edit` and `update` controller action
62
72
 
63
73
  # Contributing
64
74
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.8
1
+ 0.11.9
data/compony.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
  # This file is auto-generated via: 'rake gemspec'.
3
3
 
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: compony 0.11.8 ruby lib
5
+ # stub: compony 0.11.9 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "compony".freeze
9
- s.version = "0.11.8".freeze
9
+ s.version = "0.11.9".freeze
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Sandro Kalbermatter".freeze, "contributors".freeze]
14
14
  s.date = "1980-01-02"
15
- s.files = [".gitignore".freeze, ".ruby-version".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "Gemfile.lock".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "TODO.md".freeze, "VERSION".freeze, "app/controllers/compony_controller.rb".freeze, "compony.gemspec".freeze, "config/locales/de.yml".freeze, "config/locales/en.yml".freeze, "config/locales/fr.yml".freeze, "config/routes.rb".freeze, "doc/ComponentGenerator.html".freeze, "doc/Components.html".freeze, "doc/ComponentsGenerator.html".freeze, "doc/Compony.html".freeze, "doc/Compony/Component.html".freeze, "doc/Compony/ComponentMixins.html".freeze, "doc/Compony/ComponentMixins/Default.html".freeze, "doc/Compony/ComponentMixins/Default/Labelling.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/ResourcefulVerbDsl.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/StandaloneDsl.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/VerbDsl.html".freeze, "doc/Compony/ComponentMixins/Resourceful.html".freeze, "doc/Compony/Components.html".freeze, "doc/Compony/Components/Button.html".freeze, "doc/Compony/Components/Buttons.html".freeze, "doc/Compony/Components/Buttons/CssButton.html".freeze, "doc/Compony/Components/Buttons/Link.html".freeze, "doc/Compony/Components/Destroy.html".freeze, "doc/Compony/Components/Edit.html".freeze, "doc/Compony/Components/Form.html".freeze, "doc/Compony/Components/Index.html".freeze, "doc/Compony/Components/List.html".freeze, "doc/Compony/Components/New.html".freeze, "doc/Compony/Components/Show.html".freeze, "doc/Compony/Components/WithForm.html".freeze, "doc/Compony/ControllerMixin.html".freeze, "doc/Compony/Engine.html".freeze, "doc/Compony/ExposedIntentsDsl.html".freeze, "doc/Compony/Intent.html".freeze, "doc/Compony/ManageIntentsDsl.html".freeze, "doc/Compony/MethodAccessibleHash.html".freeze, "doc/Compony/ModelFields.html".freeze, "doc/Compony/ModelFields/Anchormodel.html".freeze, "doc/Compony/ModelFields/Association.html".freeze, "doc/Compony/ModelFields/Attachment.html".freeze, "doc/Compony/ModelFields/Base.html".freeze, "doc/Compony/ModelFields/Boolean.html".freeze, "doc/Compony/ModelFields/Color.html".freeze, "doc/Compony/ModelFields/Currency.html".freeze, "doc/Compony/ModelFields/Date.html".freeze, "doc/Compony/ModelFields/Datetime.html".freeze, "doc/Compony/ModelFields/Decimal.html".freeze, "doc/Compony/ModelFields/Email.html".freeze, "doc/Compony/ModelFields/Float.html".freeze, "doc/Compony/ModelFields/Integer.html".freeze, "doc/Compony/ModelFields/Percentage.html".freeze, "doc/Compony/ModelFields/Phone.html".freeze, "doc/Compony/ModelFields/RichText.html".freeze, "doc/Compony/ModelFields/String.html".freeze, "doc/Compony/ModelFields/Text.html".freeze, "doc/Compony/ModelFields/Time.html".freeze, "doc/Compony/ModelFields/Url.html".freeze, "doc/Compony/ModelMixin.html".freeze, "doc/Compony/NaturalOrdering.html".freeze, "doc/Compony/RequestContext.html".freeze, "doc/Compony/Version.html".freeze, "doc/Compony/ViewHelpers.html".freeze, "doc/Compony/VirtualModel.html".freeze, "doc/ComponyController.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.README.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/guide/basic_component.md".freeze, "doc/guide/example.md".freeze, "doc/guide/feasibility.md".freeze, "doc/guide/generators.md".freeze, "doc/guide/inheritance.md".freeze, "doc/guide/installation.md".freeze, "doc/guide/intents.md".freeze, "doc/guide/internal_datastructures.md".freeze, "doc/guide/model_fields.md".freeze, "doc/guide/nesting.md".freeze, "doc/guide/ownership.md".freeze, "doc/guide/pre_built_components.md".freeze, "doc/guide/pre_built_components/destroy.md".freeze, "doc/guide/pre_built_components/edit.md".freeze, "doc/guide/pre_built_components/form.md".freeze, "doc/guide/pre_built_components/index.md".freeze, "doc/guide/pre_built_components/list.md".freeze, "doc/guide/pre_built_components/new.md".freeze, "doc/guide/pre_built_components/show.md".freeze, "doc/guide/pre_built_components/with_form.md".freeze, "doc/guide/resourceful.md".freeze, "doc/guide/standalone.md".freeze, "doc/guide/virtual_models.md".freeze, "doc/imgs/intro-example-destroy.png".freeze, "doc/imgs/intro-example-edit.png".freeze, "doc/imgs/intro-example-index.png".freeze, "doc/imgs/intro-example-new.png".freeze, "doc/imgs/intro-example-show.png".freeze, "doc/index.html".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/method_list.html".freeze, "doc/resourceful_lifecycle.graphml".freeze, "doc/resourceful_lifecycle.pdf".freeze, "doc/resourceful_lifecycle.png".freeze, "doc/top-level-namespace.html".freeze, "lib/compony.rb".freeze, "lib/compony/component.rb".freeze, "lib/compony/component_mixins/default/labelling.rb".freeze, "lib/compony/component_mixins/default/standalone.rb".freeze, "lib/compony/component_mixins/default/standalone/resourceful_verb_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/standalone_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/verb_dsl.rb".freeze, "lib/compony/component_mixins/resourceful.rb".freeze, "lib/compony/components/buttons/css_button.rb".freeze, "lib/compony/components/buttons/link.rb".freeze, "lib/compony/components/destroy.rb".freeze, "lib/compony/components/edit.rb".freeze, "lib/compony/components/form.rb".freeze, "lib/compony/components/index.rb".freeze, "lib/compony/components/list.rb".freeze, "lib/compony/components/new.rb".freeze, "lib/compony/components/show.rb".freeze, "lib/compony/components/with_form.rb".freeze, "lib/compony/controller_mixin.rb".freeze, "lib/compony/engine.rb".freeze, "lib/compony/intent.rb".freeze, "lib/compony/manage_intents_dsl.rb".freeze, "lib/compony/method_accessible_hash.rb".freeze, "lib/compony/model_fields/anchormodel.rb".freeze, "lib/compony/model_fields/association.rb".freeze, "lib/compony/model_fields/attachment.rb".freeze, "lib/compony/model_fields/base.rb".freeze, "lib/compony/model_fields/boolean.rb".freeze, "lib/compony/model_fields/color.rb".freeze, "lib/compony/model_fields/currency.rb".freeze, "lib/compony/model_fields/date.rb".freeze, "lib/compony/model_fields/datetime.rb".freeze, "lib/compony/model_fields/decimal.rb".freeze, "lib/compony/model_fields/email.rb".freeze, "lib/compony/model_fields/float.rb".freeze, "lib/compony/model_fields/integer.rb".freeze, "lib/compony/model_fields/percentage.rb".freeze, "lib/compony/model_fields/phone.rb".freeze, "lib/compony/model_fields/rich_text.rb".freeze, "lib/compony/model_fields/string.rb".freeze, "lib/compony/model_fields/text.rb".freeze, "lib/compony/model_fields/time.rb".freeze, "lib/compony/model_fields/url.rb".freeze, "lib/compony/model_mixin.rb".freeze, "lib/compony/natural_ordering.rb".freeze, "lib/compony/request_context.rb".freeze, "lib/compony/version.rb".freeze, "lib/compony/view_helpers.rb".freeze, "lib/compony/virtual_model.rb".freeze, "lib/generators/component/USAGE".freeze, "lib/generators/component/component_generator.rb".freeze, "lib/generators/component/templates/component.rb.erb".freeze, "lib/generators/component/templates/destroy.rb.erb".freeze, "lib/generators/component/templates/edit.rb.erb".freeze, "lib/generators/component/templates/form.rb.erb".freeze, "lib/generators/component/templates/index.rb.erb".freeze, "lib/generators/component/templates/list.rb.erb".freeze, "lib/generators/component/templates/new.rb.erb".freeze, "lib/generators/component/templates/show.rb.erb".freeze, "lib/generators/component/templates/with_base_component.rb.erb".freeze, "lib/generators/components/USAGE".freeze, "lib/generators/components/components_generator.rb".freeze, "logo.svg".freeze]
15
+ s.files = [".gitignore".freeze, ".ruby-version".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "CLAUDE.md".freeze, "Gemfile".freeze, "Gemfile.lock".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "TODO.md".freeze, "VERSION".freeze, "app/controllers/compony_controller.rb".freeze, "compony.gemspec".freeze, "config/locales/de.yml".freeze, "config/locales/en.yml".freeze, "config/locales/fr.yml".freeze, "config/routes.rb".freeze, "doc/ComponentGenerator.html".freeze, "doc/Components.html".freeze, "doc/ComponentsGenerator.html".freeze, "doc/Compony.html".freeze, "doc/Compony/Component.html".freeze, "doc/Compony/ComponentMixins.html".freeze, "doc/Compony/ComponentMixins/Default.html".freeze, "doc/Compony/ComponentMixins/Default/Labelling.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/ResourcefulVerbDsl.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/StandaloneDsl.html".freeze, "doc/Compony/ComponentMixins/Default/Standalone/VerbDsl.html".freeze, "doc/Compony/ComponentMixins/Resourceful.html".freeze, "doc/Compony/Components.html".freeze, "doc/Compony/Components/Button.html".freeze, "doc/Compony/Components/Buttons.html".freeze, "doc/Compony/Components/Buttons/CssButton.html".freeze, "doc/Compony/Components/Buttons/Link.html".freeze, "doc/Compony/Components/Destroy.html".freeze, "doc/Compony/Components/Edit.html".freeze, "doc/Compony/Components/Form.html".freeze, "doc/Compony/Components/Index.html".freeze, "doc/Compony/Components/List.html".freeze, "doc/Compony/Components/New.html".freeze, "doc/Compony/Components/Show.html".freeze, "doc/Compony/Components/WithForm.html".freeze, "doc/Compony/ControllerMixin.html".freeze, "doc/Compony/Engine.html".freeze, "doc/Compony/ExposedIntentsDsl.html".freeze, "doc/Compony/Intent.html".freeze, "doc/Compony/ManageIntentsDsl.html".freeze, "doc/Compony/MethodAccessibleHash.html".freeze, "doc/Compony/ModelFields.html".freeze, "doc/Compony/ModelFields/Anchormodel.html".freeze, "doc/Compony/ModelFields/Association.html".freeze, "doc/Compony/ModelFields/Attachment.html".freeze, "doc/Compony/ModelFields/Base.html".freeze, "doc/Compony/ModelFields/Boolean.html".freeze, "doc/Compony/ModelFields/Color.html".freeze, "doc/Compony/ModelFields/Currency.html".freeze, "doc/Compony/ModelFields/Date.html".freeze, "doc/Compony/ModelFields/Datetime.html".freeze, "doc/Compony/ModelFields/Decimal.html".freeze, "doc/Compony/ModelFields/Email.html".freeze, "doc/Compony/ModelFields/Float.html".freeze, "doc/Compony/ModelFields/Integer.html".freeze, "doc/Compony/ModelFields/Percentage.html".freeze, "doc/Compony/ModelFields/Phone.html".freeze, "doc/Compony/ModelFields/RichText.html".freeze, "doc/Compony/ModelFields/String.html".freeze, "doc/Compony/ModelFields/Text.html".freeze, "doc/Compony/ModelFields/Time.html".freeze, "doc/Compony/ModelFields/Url.html".freeze, "doc/Compony/ModelMixin.html".freeze, "doc/Compony/NaturalOrdering.html".freeze, "doc/Compony/RequestContext.html".freeze, "doc/Compony/Version.html".freeze, "doc/Compony/ViewHelpers.html".freeze, "doc/Compony/VirtualModel.html".freeze, "doc/ComponyController.html".freeze, "doc/_index.html".freeze, "doc/class_list.html".freeze, "doc/css/common.css".freeze, "doc/css/full_list.css".freeze, "doc/css/style.css".freeze, "doc/file.CHANGELOG.html".freeze, "doc/file.README.html".freeze, "doc/file.basic_component.html".freeze, "doc/file.cookbook.html".freeze, "doc/file.destroy.html".freeze, "doc/file.dsl_reference.html".freeze, "doc/file.edit.html".freeze, "doc/file.example.html".freeze, "doc/file.example_advanced.html".freeze, "doc/file.feasibility.html".freeze, "doc/file.form.html".freeze, "doc/file.generators.html".freeze, "doc/file.glossary.html".freeze, "doc/file.gotchas.html".freeze, "doc/file.index.html".freeze, "doc/file.inheritance.html".freeze, "doc/file.installation.html".freeze, "doc/file.integrations.html".freeze, "doc/file.intents.html".freeze, "doc/file.internal_datastructures.html".freeze, "doc/file.list.html".freeze, "doc/file.maintaining.html".freeze, "doc/file.model_fields.html".freeze, "doc/file.nesting.html".freeze, "doc/file.new.html".freeze, "doc/file.ownership.html".freeze, "doc/file.patterns.html".freeze, "doc/file.pre_built_components.html".freeze, "doc/file.resourceful.html".freeze, "doc/file.show.html".freeze, "doc/file.standalone.html".freeze, "doc/file.virtual_models.html".freeze, "doc/file.with_form.html".freeze, "doc/file_list.html".freeze, "doc/frames.html".freeze, "doc/guide/basic_component.md".freeze, "doc/guide/cookbook.md".freeze, "doc/guide/dsl_reference.md".freeze, "doc/guide/example.md".freeze, "doc/guide/example_advanced.md".freeze, "doc/guide/feasibility.md".freeze, "doc/guide/generators.md".freeze, "doc/guide/glossary.md".freeze, "doc/guide/gotchas.md".freeze, "doc/guide/inheritance.md".freeze, "doc/guide/installation.md".freeze, "doc/guide/intents.md".freeze, "doc/guide/internal_datastructures.md".freeze, "doc/guide/maintaining.md".freeze, "doc/guide/model_fields.md".freeze, "doc/guide/nesting.md".freeze, "doc/guide/ownership.md".freeze, "doc/guide/patterns.md".freeze, "doc/guide/pre_built_components.md".freeze, "doc/guide/pre_built_components/destroy.md".freeze, "doc/guide/pre_built_components/edit.md".freeze, "doc/guide/pre_built_components/form.md".freeze, "doc/guide/pre_built_components/index.md".freeze, "doc/guide/pre_built_components/list.md".freeze, "doc/guide/pre_built_components/new.md".freeze, "doc/guide/pre_built_components/show.md".freeze, "doc/guide/pre_built_components/with_form.md".freeze, "doc/guide/resourceful.md".freeze, "doc/guide/standalone.md".freeze, "doc/guide/virtual_models.md".freeze, "doc/imgs/intro-example-destroy.png".freeze, "doc/imgs/intro-example-edit.png".freeze, "doc/imgs/intro-example-index.png".freeze, "doc/imgs/intro-example-new.png".freeze, "doc/imgs/intro-example-show.png".freeze, "doc/index.html".freeze, "doc/integrations.md".freeze, "doc/js/app.js".freeze, "doc/js/full_list.js".freeze, "doc/js/jquery.js".freeze, "doc/llms.txt".freeze, "doc/method_list.html".freeze, "doc/resourceful_lifecycle.graphml".freeze, "doc/resourceful_lifecycle.pdf".freeze, "doc/resourceful_lifecycle.png".freeze, "doc/top-level-namespace.html".freeze, "lib/compony.rb".freeze, "lib/compony/component.rb".freeze, "lib/compony/component_mixins/default/labelling.rb".freeze, "lib/compony/component_mixins/default/standalone.rb".freeze, "lib/compony/component_mixins/default/standalone/resourceful_verb_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/standalone_dsl.rb".freeze, "lib/compony/component_mixins/default/standalone/verb_dsl.rb".freeze, "lib/compony/component_mixins/resourceful.rb".freeze, "lib/compony/components/buttons/css_button.rb".freeze, "lib/compony/components/buttons/link.rb".freeze, "lib/compony/components/destroy.rb".freeze, "lib/compony/components/edit.rb".freeze, "lib/compony/components/form.rb".freeze, "lib/compony/components/index.rb".freeze, "lib/compony/components/list.rb".freeze, "lib/compony/components/new.rb".freeze, "lib/compony/components/show.rb".freeze, "lib/compony/components/with_form.rb".freeze, "lib/compony/controller_mixin.rb".freeze, "lib/compony/engine.rb".freeze, "lib/compony/intent.rb".freeze, "lib/compony/manage_intents_dsl.rb".freeze, "lib/compony/method_accessible_hash.rb".freeze, "lib/compony/model_fields/anchormodel.rb".freeze, "lib/compony/model_fields/association.rb".freeze, "lib/compony/model_fields/attachment.rb".freeze, "lib/compony/model_fields/base.rb".freeze, "lib/compony/model_fields/boolean.rb".freeze, "lib/compony/model_fields/color.rb".freeze, "lib/compony/model_fields/currency.rb".freeze, "lib/compony/model_fields/date.rb".freeze, "lib/compony/model_fields/datetime.rb".freeze, "lib/compony/model_fields/decimal.rb".freeze, "lib/compony/model_fields/email.rb".freeze, "lib/compony/model_fields/float.rb".freeze, "lib/compony/model_fields/integer.rb".freeze, "lib/compony/model_fields/percentage.rb".freeze, "lib/compony/model_fields/phone.rb".freeze, "lib/compony/model_fields/rich_text.rb".freeze, "lib/compony/model_fields/string.rb".freeze, "lib/compony/model_fields/text.rb".freeze, "lib/compony/model_fields/time.rb".freeze, "lib/compony/model_fields/url.rb".freeze, "lib/compony/model_mixin.rb".freeze, "lib/compony/natural_ordering.rb".freeze, "lib/compony/request_context.rb".freeze, "lib/compony/version.rb".freeze, "lib/compony/view_helpers.rb".freeze, "lib/compony/virtual_model.rb".freeze, "lib/generators/component/USAGE".freeze, "lib/generators/component/component_generator.rb".freeze, "lib/generators/component/templates/component.rb.erb".freeze, "lib/generators/component/templates/destroy.rb.erb".freeze, "lib/generators/component/templates/edit.rb.erb".freeze, "lib/generators/component/templates/form.rb.erb".freeze, "lib/generators/component/templates/index.rb.erb".freeze, "lib/generators/component/templates/list.rb.erb".freeze, "lib/generators/component/templates/new.rb.erb".freeze, "lib/generators/component/templates/show.rb.erb".freeze, "lib/generators/component/templates/with_base_component.rb.erb".freeze, "lib/generators/components/USAGE".freeze, "lib/generators/components/components_generator.rb".freeze, "logo.svg".freeze]
16
16
  s.required_ruby_version = Gem::Requirement.new(">= 3.3.5".freeze)
17
17
  s.rubygems_version = "4.0.11".freeze
18
18
  s.summary = "Compony is a Gem that allows you to write your Rails application in component-style fashion. It combines a controller action and route along \\ with its view into a single Ruby class. This allows writing much DRYer code, using inheritance even in views and much easier refactoring for your Rails \\ applications, helping you to keep the code clean as the application evolves.".freeze
@@ -249,7 +249,7 @@
249
249
  </div>
250
250
 
251
251
  <div id="footer">
252
- Generated on Fri May 15 10:29:34 2026 by
252
+ Generated on Mon May 18 13:55:36 2026 by
253
253
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
254
254
  0.9.34 (ruby-3.3.5).
255
255
  </div>
data/doc/Components.html CHANGED
@@ -95,7 +95,7 @@
95
95
  </div>
96
96
 
97
97
  <div id="footer">
98
- Generated on Fri May 15 10:29:33 2026 by
98
+ Generated on Mon May 18 13:55:35 2026 by
99
99
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
100
100
  0.9.34 (ruby-3.3.5).
101
101
  </div>
@@ -193,7 +193,7 @@
193
193
  </div>
194
194
 
195
195
  <div id="footer">
196
- Generated on Fri May 15 10:29:34 2026 by
196
+ Generated on Mon May 18 13:55:36 2026 by
197
197
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
198
198
  0.9.34 (ruby-3.3.5).
199
199
  </div>
@@ -515,7 +515,7 @@
515
515
  <li class="public ">
516
516
  <span class="summary_signature">
517
517
 
518
- <a href="#path-instance_method" title="#path (instance method)">#<strong>path</strong>(&amp;block) &#x21d2; Object </a>
518
+ <a href="#path-instance_method" title="#path (instance method)">#<strong>path</strong>(&amp;block) &#x21d2; void </a>
519
519
 
520
520
 
521
521
 
@@ -1155,13 +1155,13 @@
1155
1155
  <pre class="lines">
1156
1156
 
1157
1157
 
1158
- 142
1159
- 143
1160
- 144
1161
- 145</pre>
1158
+ 147
1159
+ 148
1160
+ 149
1161
+ 150</pre>
1162
1162
  </td>
1163
1163
  <td>
1164
- <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 142</span>
1164
+ <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 147</span>
1165
1165
 
1166
1166
  <span class='kw'>def</span> <span class='id identifier rubyid_before_render'>before_render</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='symbol'>:main</span><span class='comma'>,</span> <span class='label'>before:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='op'>**</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1167
1167
  <span class='id identifier rubyid_fail'>fail</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>`before_render` expects a block in </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
@@ -1270,16 +1270,16 @@
1270
1270
  <pre class="lines">
1271
1271
 
1272
1272
 
1273
- 153
1274
- 154
1275
- 155
1276
- 156
1277
- 157
1278
1273
  158
1279
- 159</pre>
1274
+ 159
1275
+ 160
1276
+ 161
1277
+ 162
1278
+ 163
1279
+ 164</pre>
1280
1280
  </td>
1281
1281
  <td>
1282
- <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 153</span>
1282
+ <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 158</span>
1283
1283
 
1284
1284
  <span class='kw'>def</span> <span class='id identifier rubyid_content'>content</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='symbol'>:main</span><span class='comma'>,</span> <span class='label'>before:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='op'>**</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1285
1285
  <span class='comment'># A block is required here, but if this is an override (e.g. to hide another content block), we can tolerate the missing block.
@@ -1305,7 +1305,7 @@
1305
1305
  </h3><div class="docstring">
1306
1306
  <div class="discussion">
1307
1307
 
1308
- <p>DSL method If a block is given: Enters the DSL where exposed intents can be added or removed (use from <span class='object_link'><a href="#setup-class_method" title="Compony::Component.setup (method)">setup</a></span> within the component). If no block is given: Builds the declared intents and returns them (use from a RequestContest outside the component).</p>
1308
+ <p>DSL method If a block is given: Enters the DSL where exposed intents can be added or removed (use from <span class='object_link'><a href="#setup-class_method" title="Compony::Component.setup (method)">setup</a></span> within the component). If no block is given: Builds the declared intents and returns them (use from a <span class='object_link'><a href="RequestContext.html" title="Compony::RequestContext (class)">RequestContext</a></span> outside the component).</p>
1309
1309
 
1310
1310
 
1311
1311
  </div>
@@ -1319,21 +1319,21 @@
1319
1319
  <pre class="lines">
1320
1320
 
1321
1321
 
1322
- 219
1323
- 220
1324
- 221
1325
- 222
1326
- 223
1327
1322
  224
1328
1323
  225
1329
1324
  226
1330
1325
  227
1331
1326
  228
1332
1327
  229
1333
- 230</pre>
1328
+ 230
1329
+ 231
1330
+ 232
1331
+ 233
1332
+ 234
1333
+ 235</pre>
1334
1334
  </td>
1335
1335
  <td>
1336
- <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 219</span>
1336
+ <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 224</span>
1337
1337
 
1338
1338
  <span class='kw'>def</span> <span class='id identifier rubyid_exposed_intents'>exposed_intents</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1339
1339
  <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
@@ -1568,7 +1568,7 @@
1568
1568
  <div class="method_details ">
1569
1569
  <h3 class="signature " id="path-instance_method">
1570
1570
 
1571
- #<strong>path</strong>(&amp;block) &#x21d2; <tt>Object</tt>
1571
+ #<strong>path</strong>(&amp;block) &#x21d2; <tt>void</tt>
1572
1572
 
1573
1573
 
1574
1574
 
@@ -1576,8 +1576,8 @@
1576
1576
 
1577
1577
  </h3><div class="docstring">
1578
1578
  <div class="discussion">
1579
-
1580
- <p>DSL method Overrides how the path to this component should be generated. The block will be given the following args: a model (optional), pos. args for the path helper, the kwarg <code>standalone_name</code> and kwargs for the path helper. The block is expected to return a Rails path. It is not given <code>controller</code> or <code>helpers</code>, instead use: <code>Rails.application.routes.url_helpers</code>. For an example, refer to the initializer of this class, where the default block is defined.</p>
1579
+ <p class="note returns_void">This method returns an undefined value.</p>
1580
+ <p>DSL method Overrides how the path to this component should be generated. The block will be given the following args: a model (optional), pos. args for the path helper, the kwarg <code>standalone_name</code> and kwargs for the path helper. The block is expected to return a Rails path. It is not given <code>controller</code> or <code>helpers</code>, instead use: <code>Rails.application.routes.url_helpers</code>. For the default block, refer to the initializer of this class. Useful when callers should pass a higher-level argument that is translated into path params here, e.g. minting a signed token into the URL so an unauthenticated link can authorize itself. Worked examples: see <code>doc/guide/standalone.md</code> (“Customizing path generation”) and <code>doc/guide/patterns.md</code> §18 (signed-token capability links).</p>
1581
1581
 
1582
1582
 
1583
1583
  </div>
@@ -1591,17 +1591,17 @@
1591
1591
  <pre class="lines">
1592
1592
 
1593
1593
 
1594
- 127
1595
- 128
1596
- 129
1597
- 130
1598
- 131
1599
1594
  132
1600
1595
  133
1601
- 134</pre>
1596
+ 134
1597
+ 135
1598
+ 136
1599
+ 137
1600
+ 138
1601
+ 139</pre>
1602
1602
  </td>
1603
1603
  <td>
1604
- <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 127</span>
1604
+ <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 132</span>
1605
1605
 
1606
1606
  <span class='kw'>def</span> <span class='id identifier rubyid_path'>path</span><span class='lparen'>(</span><span class='op'>*</span><span class='comma'>,</span> <span class='op'>**</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
1607
1607
  <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
@@ -1662,18 +1662,18 @@
1662
1662
  <pre class="lines">
1663
1663
 
1664
1664
 
1665
- 164
1666
- 165
1667
- 166
1668
- 167
1669
- 168
1670
1665
  169
1671
1666
  170
1672
1667
  171
1673
- 172</pre>
1668
+ 172
1669
+ 173
1670
+ 174
1671
+ 175
1672
+ 176
1673
+ 177</pre>
1674
1674
  </td>
1675
1675
  <td>
1676
- <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 164</span>
1676
+ <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 169</span>
1677
1677
 
1678
1678
  <span class='kw'>def</span> <span class='id identifier rubyid_remove_content'>remove_content</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='comment'># rubocop:disable Naming/PredicateMethod
1679
1679
  </span> <span class='id identifier rubyid_existing_index'>existing_index</span> <span class='op'>=</span> <span class='ivar'>@content_blocks</span><span class='period'>.</span><span class='id identifier rubyid_find_index'>find_index</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_el'>el</span><span class='op'>|</span> <span class='id identifier rubyid_el'>el</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>==</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span> <span class='rbrace'>}</span>
@@ -1735,12 +1735,12 @@
1735
1735
  <pre class="lines">
1736
1736
 
1737
1737
 
1738
- 177
1739
- 178
1740
- 179</pre>
1738
+ 182
1739
+ 183
1740
+ 184</pre>
1741
1741
  </td>
1742
1742
  <td>
1743
- <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 177</span>
1743
+ <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 182</span>
1744
1744
 
1745
1745
  <span class='kw'>def</span> <span class='id identifier rubyid_remove_content!'>remove_content!</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
1746
1746
  <span class='id identifier rubyid_remove_content'>remove_content</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_fail'>fail</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Content block </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'> not found for removal in </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
@@ -1798,11 +1798,6 @@
1798
1798
  <pre class="lines">
1799
1799
 
1800
1800
 
1801
- 184
1802
- 185
1803
- 186
1804
- 187
1805
- 188
1806
1801
  189
1807
1802
  190
1808
1803
  191
@@ -1828,10 +1823,15 @@
1828
1823
  211
1829
1824
  212
1830
1825
  213
1831
- 214</pre>
1826
+ 214
1827
+ 215
1828
+ 216
1829
+ 217
1830
+ 218
1831
+ 219</pre>
1832
1832
  </td>
1833
1833
  <td>
1834
- <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 184</span>
1834
+ <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 189</span>
1835
1835
 
1836
1836
  <span class='kw'>def</span> <span class='id identifier rubyid_render'>render</span><span class='lparen'>(</span><span class='id identifier rubyid_controller'>controller</span><span class='comma'>,</span> <span class='label'>standalone:</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_locals'>locals</span><span class='rparen'>)</span>
1837
1837
  <span class='comment'># Call before_render hooks (if any) and backfire instance variables back to the component
@@ -1908,12 +1908,12 @@
1908
1908
  <pre class="lines">
1909
1909
 
1910
1910
 
1911
- 233
1912
- 234
1913
- 235</pre>
1911
+ 238
1912
+ 239
1913
+ 240</pre>
1914
1914
  </td>
1915
1915
  <td>
1916
- <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 233</span>
1916
+ <pre class="code"><span class="info file"># File 'lib/compony/component.rb', line 238</span>
1917
1917
 
1918
1918
  <span class='kw'>def</span> <span class='id identifier rubyid_resourceful?'>resourceful?</span>
1919
1919
  <span class='kw'>return</span> <span class='kw'>false</span>
@@ -2072,7 +2072,7 @@
2072
2072
  </div>
2073
2073
 
2074
2074
  <div id="footer">
2075
- Generated on Fri May 15 10:29:33 2026 by
2075
+ Generated on Mon May 18 13:55:35 2026 by
2076
2076
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
2077
2077
  0.9.34 (ruby-3.3.5).
2078
2078
  </div>
@@ -477,7 +477,7 @@
477
477
  </div>
478
478
 
479
479
  <div id="footer">
480
- Generated on Fri May 15 10:29:33 2026 by
480
+ Generated on Mon May 18 13:55:35 2026 by
481
481
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
482
482
  0.9.34 (ruby-3.3.5).
483
483
  </div>
@@ -529,7 +529,7 @@
529
529
  </div>
530
530
 
531
531
  <div id="footer">
532
- Generated on Fri May 15 10:29:34 2026 by
532
+ Generated on Mon May 18 13:55:36 2026 by
533
533
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
534
534
  0.9.34 (ruby-3.3.5).
535
535
  </div>