anchormodel 0.3.1 → 0.4.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +14 -0
  4. data/EXAMPLES.md +408 -0
  5. data/Gemfile.lock +1 -1
  6. data/README.md +43 -1
  7. data/VERSION +1 -1
  8. data/anchormodel.gemspec +3 -3
  9. data/bin/test +9 -0
  10. data/doc/Anchormodel/ActiveModelTypeValueMulti.html +204 -42
  11. data/doc/Anchormodel/ActiveModelTypeValueSingle.html +243 -54
  12. data/doc/Anchormodel/Attribute.html +60 -37
  13. data/doc/Anchormodel/ModelMixin.html +166 -16
  14. data/doc/Anchormodel/SimpleFormInputs/Helpers/AnchormodelInputsCommon.html +82 -21
  15. data/doc/Anchormodel/SimpleFormInputs/Helpers.html +2 -11
  16. data/doc/Anchormodel/SimpleFormInputs.html +2 -11
  17. data/doc/Anchormodel/Util.html +497 -38
  18. data/doc/Anchormodel/Version.html +2 -20
  19. data/doc/Anchormodel.html +536 -129
  20. data/doc/AnchormodelCheckBoxesInput.html +22 -1
  21. data/doc/AnchormodelGenerator.html +64 -13
  22. data/doc/AnchormodelInput.html +24 -1
  23. data/doc/AnchormodelRadioButtonsInput.html +22 -1
  24. data/doc/_index.html +16 -1
  25. data/doc/class_list.html +1 -1
  26. data/doc/file.README.html +40 -2
  27. data/doc/index.html +40 -2
  28. data/doc/method_list.html +57 -17
  29. data/doc/top-level-namespace.html +1 -1
  30. data/lib/anchormodel/active_model_type_value_multi.rb +31 -5
  31. data/lib/anchormodel/active_model_type_value_single.rb +34 -6
  32. data/lib/anchormodel/attribute.rb +20 -8
  33. data/lib/anchormodel/model_mixin.rb +43 -8
  34. data/lib/anchormodel/simple_form_inputs/anchormodel_check_boxes_input.rb +7 -0
  35. data/lib/anchormodel/simple_form_inputs/anchormodel_input.rb +9 -0
  36. data/lib/anchormodel/simple_form_inputs/anchormodel_radio_buttons_input.rb +7 -0
  37. data/lib/anchormodel/simple_form_inputs/helpers/anchormodel_inputs_common.rb +14 -0
  38. data/lib/anchormodel/util.rb +102 -17
  39. data/lib/anchormodel.rb +109 -15
  40. data/lib/generators/anchormodel/anchormodel_generator.rb +8 -0
  41. data/test/active_record_model/user_test.rb +221 -10
  42. data/test/dummy/app/anchormodels/animal.rb +1 -0
  43. metadata +3 -1
@@ -102,7 +102,9 @@
102
102
  <h2>Overview</h2><div class="docstring">
103
103
  <div class="discussion">
104
104
 
105
- <p>This class holds all information related to a Rails model pointing to an Anchormodel. It is instanciated when ModelMixin#belongs_to_anchormodel is used.</p>
105
+ <p>Metadata about an anchormodel attribute installed on a Rails model.</p>
106
+
107
+ <p>One instance is created per call to ModelMixin#belongs_to_anchormodel or ModelMixin#belongs_to_anchormodels and stored in the model class’s <code>anchormodel_attributes</code> hash. Used internally by the AR type casters and by SimpleForm inputs to discover what an attribute points to.</p>
106
108
 
107
109
 
108
110
  </div>
@@ -139,7 +141,9 @@
139
141
 
140
142
 
141
143
 
142
- <span class="summary_desc"><div class='inline'></div></span>
144
+ <span class="summary_desc"><div class='inline'>
145
+ <p>Returns the value of attribute anchormodel_class.</p>
146
+ </div></span>
143
147
 
144
148
  </li>
145
149
 
@@ -166,7 +170,9 @@
166
170
 
167
171
 
168
172
 
169
- <span class="summary_desc"><div class='inline'></div></span>
173
+ <span class="summary_desc"><div class='inline'>
174
+ <p>Returns the value of attribute attribute_name.</p>
175
+ </div></span>
170
176
 
171
177
  </li>
172
178
 
@@ -193,7 +199,9 @@
193
199
 
194
200
 
195
201
 
196
- <span class="summary_desc"><div class='inline'></div></span>
202
+ <span class="summary_desc"><div class='inline'>
203
+ <p>Returns the value of attribute optional.</p>
204
+ </div></span>
197
205
 
198
206
  </li>
199
207
 
@@ -254,7 +262,9 @@
254
262
 
255
263
 
256
264
 
257
- <span class="summary_desc"><div class='inline'></div></span>
265
+ <span class="summary_desc"><div class='inline'>
266
+ <p>True for <code>belongs_to_anchormodels</code> (collection), false for <code>belongs_to_anchormodel</code> (single).</p>
267
+ </div></span>
258
268
 
259
269
  </li>
260
270
 
@@ -291,13 +301,13 @@
291
301
  <span class='name'>model_class</span>
292
302
 
293
303
 
294
- <span class='type'>(<tt>ActiveRecord::Base</tt>)</span>
304
+ <span class='type'>(<tt>Class</tt>)</span>
295
305
 
296
306
 
297
307
 
298
308
  &mdash;
299
309
  <div class='inline'>
300
- <p>The Rails model where ModelMixin#belongs_to_anchormodel is used</p>
310
+ <p>The ActiveRecord model class on which ModelMixin#belongs_to_anchormodel is called.</p>
301
311
  </div>
302
312
 
303
313
  </li>
@@ -313,7 +323,7 @@
313
323
 
314
324
  &mdash;
315
325
  <div class='inline'>
316
- <p>The name and database column of the attribute</p>
326
+ <p>The model attribute / DB column name.</p>
317
327
  </div>
318
328
 
319
329
  </li>
@@ -323,7 +333,7 @@
323
333
  <span class='name'>anchormodel_class</span>
324
334
 
325
335
 
326
- <span class='type'>(<tt>Class</tt>)</span>
336
+ <span class='type'>(<tt>Class</tt>, <tt>nil</tt>)</span>
327
337
 
328
338
 
329
339
  <em class="default">(defaults to: <tt>nil</tt>)</em>
@@ -331,7 +341,7 @@
331
341
 
332
342
  &mdash;
333
343
  <div class='inline'>
334
- <p>Class of the Anchormodel (omit if attribute <code>:foo_bar</code> holds an <code>FooBar</code>)</p>
344
+ <p>The Anchormodel subclass. Omit if attribute <code>:foo_bar</code> references <code>FooBar</code>.</p>
335
345
  </div>
336
346
 
337
347
  </li>
@@ -349,7 +359,7 @@
349
359
 
350
360
  &mdash;
351
361
  <div class='inline'>
352
- <p>If true, a presence validation is added to the model.</p>
362
+ <p>If true, no presence validation is added.</p>
353
363
  </div>
354
364
 
355
365
  </li>
@@ -367,7 +377,7 @@
367
377
 
368
378
  &mdash;
369
379
  <div class='inline'>
370
- <p>If true, this attribute holds multiple anchormodels.</p>
380
+ <p>If true, this attribute holds a Set of anchormodels (CSV in column).</p>
371
381
  </div>
372
382
 
373
383
  </li>
@@ -381,16 +391,16 @@
381
391
  <pre class="lines">
382
392
 
383
393
 
384
- 14
385
- 15
386
- 16
387
- 17
388
- 18
389
- 19
390
- 20</pre>
394
+ 25
395
+ 26
396
+ 27
397
+ 28
398
+ 29
399
+ 30
400
+ 31</pre>
391
401
  </td>
392
402
  <td>
393
- <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 14</span>
403
+ <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 25</span>
394
404
 
395
405
  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_model_class'>model_class</span><span class='comma'>,</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='comma'>,</span> <span class='id identifier rubyid_anchormodel_class'>anchormodel_class</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_optional'>optional</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='id identifier rubyid_multiple'>multiple</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
396
406
  <span class='ivar'>@model_class</span> <span class='op'>=</span> <span class='id identifier rubyid_model_class'>model_class</span>
@@ -423,6 +433,8 @@
423
433
  </h3><div class="docstring">
424
434
  <div class="discussion">
425
435
 
436
+ <p>Returns the value of attribute anchormodel_class.</p>
437
+
426
438
 
427
439
  </div>
428
440
  </div>
@@ -435,12 +447,12 @@
435
447
  <pre class="lines">
436
448
 
437
449
 
438
- 6
439
- 7
440
- 8</pre>
450
+ 14
451
+ 15
452
+ 16</pre>
441
453
  </td>
442
454
  <td>
443
- <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 6</span>
455
+ <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 14</span>
444
456
 
445
457
  <span class='kw'>def</span> <span class='id identifier rubyid_anchormodel_class'>anchormodel_class</span>
446
458
  <span class='ivar'>@anchormodel_class</span>
@@ -464,6 +476,8 @@
464
476
  </h3><div class="docstring">
465
477
  <div class="discussion">
466
478
 
479
+ <p>Returns the value of attribute attribute_name.</p>
480
+
467
481
 
468
482
  </div>
469
483
  </div>
@@ -476,12 +490,12 @@
476
490
  <pre class="lines">
477
491
 
478
492
 
479
- 5
480
- 6
481
- 7</pre>
493
+ 10
494
+ 11
495
+ 12</pre>
482
496
  </td>
483
497
  <td>
484
- <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 5</span>
498
+ <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 10</span>
485
499
 
486
500
  <span class='kw'>def</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span>
487
501
  <span class='ivar'>@attribute_name</span>
@@ -505,6 +519,8 @@
505
519
  </h3><div class="docstring">
506
520
  <div class="discussion">
507
521
 
522
+ <p>Returns the value of attribute optional.</p>
523
+
508
524
 
509
525
  </div>
510
526
  </div>
@@ -517,12 +533,12 @@
517
533
  <pre class="lines">
518
534
 
519
535
 
520
- 7
521
- 8
522
- 9</pre>
536
+ 18
537
+ 19
538
+ 20</pre>
523
539
  </td>
524
540
  <td>
525
- <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 7</span>
541
+ <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 18</span>
526
542
 
527
543
  <span class='kw'>def</span> <span class='id identifier rubyid_optional'>optional</span>
528
544
  <span class='ivar'>@optional</span>
@@ -551,6 +567,8 @@
551
567
  </h3><div class="docstring">
552
568
  <div class="discussion">
553
569
 
570
+ <p>Returns true for <code>belongs_to_anchormodels</code> (collection), false for <code>belongs_to_anchormodel</code> (single).</p>
571
+
554
572
 
555
573
  </div>
556
574
  </div>
@@ -566,6 +584,11 @@
566
584
 
567
585
 
568
586
 
587
+ &mdash;
588
+ <div class='inline'>
589
+ <p>true for <code>belongs_to_anchormodels</code> (collection), false for <code>belongs_to_anchormodel</code> (single).</p>
590
+ </div>
591
+
569
592
  </li>
570
593
 
571
594
  </ul>
@@ -576,12 +599,12 @@
576
599
  <pre class="lines">
577
600
 
578
601
 
579
- 22
580
- 23
581
- 24</pre>
602
+ 34
603
+ 35
604
+ 36</pre>
582
605
  </td>
583
606
  <td>
584
- <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 22</span>
607
+ <pre class="code"><span class="info file"># File 'lib/anchormodel/attribute.rb', line 34</span>
585
608
 
586
609
  <span class='kw'>def</span> <span class='id identifier rubyid_multiple?'>multiple?</span>
587
610
  <span class='ivar'>@multiple</span>
@@ -596,7 +619,7 @@
596
619
  </div>
597
620
 
598
621
  <div id="footer">
599
- Generated on Wed May 13 11:46:10 2026 by
622
+ Generated on Wed May 13 15:48:24 2026 by
600
623
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
601
624
  0.9.28 (ruby-3.3.5).
602
625
  </div>
@@ -91,18 +91,66 @@
91
91
  <h2>Overview</h2><div class="docstring">
92
92
  <div class="discussion">
93
93
 
94
- <p>All Rails models making use of #belongs_to_anchormodel must include this mixin. Typically, it is included in <code>application_record.rb</code>.</p>
94
+ <p>Include this mixin in every Rails model that uses anchormodel attributes. The common pattern is to include it once in <code>application_record.rb</code> so all descendant models pick it up automatically.</p>
95
+
96
+ <p>Adds two class-level macros: - ClassMethods#belongs_to_anchormodel for single-value attributes - ClassMethods#belongs_to_anchormodels for collection-valued attributes</p>
95
97
 
96
98
 
97
99
  </div>
98
100
  </div>
99
101
  <div class="tags">
100
102
 
103
+ <div class="examples">
104
+ <p class="tag_title">Examples:</p>
105
+
106
+
107
+ <p class="example_title"><div class='inline'>
108
+ <p>Install in ApplicationRecord</p>
109
+ </div></p>
110
+
111
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>ApplicationRecord</span> <span class='op'>&lt;</span> <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Base</span>
112
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="../Anchormodel.html" title="Anchormodel (class)">Anchormodel</a></span></span><span class='op'>::</span><span class='const'>ModelMixin</span>
113
+ <span class='kw'>end</span></code></pre>
114
+
115
+ </div>
116
+
101
117
 
102
118
  </div>
103
119
 
104
120
 
105
121
 
122
+ <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
123
+ <ul class="summary">
124
+
125
+ <li class="public ">
126
+ <span class="summary_signature">
127
+
128
+ <a href="#anchormodel_attributes-instance_method" title="#anchormodel_attributes (instance method)">#<strong>anchormodel_attributes</strong> &#x21d2; Hash{Symbol =&gt; Anchormodel::Attribute} </a>
129
+
130
+
131
+
132
+ </span>
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+ <span class="summary_desc"><div class='inline'>
146
+ <p>All anchormodel attributes declared on this model class, keyed by attribute name.</p>
147
+ </div></span>
148
+
149
+ </li>
150
+
151
+
152
+ </ul>
153
+
106
154
 
107
155
 
108
156
 
@@ -132,7 +180,7 @@
132
180
 
133
181
 
134
182
  <span class="summary_desc"><div class='inline'>
135
- <p>Creates an attribute linking to an Anchormodel.</p>
183
+ <p>Declares a single-value anchormodel attribute.</p>
136
184
  </div></span>
137
185
 
138
186
  </li>
@@ -156,7 +204,7 @@
156
204
 
157
205
 
158
206
  <span class="summary_desc"><div class='inline'>
159
- <p>Creates an attribute linking to an array of Anchormodels.</p>
207
+ <p>Declares a collection-valued anchormodel attribute.</p>
160
208
  </div></span>
161
209
 
162
210
  </li>
@@ -167,6 +215,68 @@
167
215
 
168
216
 
169
217
 
218
+ <div id="instance_attr_details" class="attr_details">
219
+ <h2>Instance Attribute Details</h2>
220
+
221
+
222
+ <span id="anchormodel_attributes=-instance_method"></span>
223
+ <div class="method_details first">
224
+ <h3 class="signature first" id="anchormodel_attributes-instance_method">
225
+
226
+ #<strong>anchormodel_attributes</strong> &#x21d2; <tt>Hash{Symbol =&gt; <span class='object_link'><a href="Attribute.html" title="Anchormodel::Attribute (class)">Anchormodel::Attribute</a></span>}</tt>
227
+
228
+
229
+
230
+
231
+
232
+ </h3><div class="docstring">
233
+ <div class="discussion">
234
+
235
+ <p>Returns All anchormodel attributes declared on this model class, keyed by attribute name.</p>
236
+
237
+
238
+ </div>
239
+ </div>
240
+ <div class="tags">
241
+
242
+ <p class="tag_title">Returns:</p>
243
+ <ul class="return">
244
+
245
+ <li>
246
+
247
+
248
+ <span class='type'>(<tt>Hash{Symbol =&gt; <span class='object_link'><a href="Attribute.html" title="Anchormodel::Attribute (class)">Anchormodel::Attribute</a></span>}</tt>)</span>
249
+
250
+
251
+
252
+ &mdash;
253
+ <div class='inline'>
254
+ <p>All anchormodel attributes declared on this model class, keyed by attribute name.</p>
255
+ </div>
256
+
257
+ </li>
258
+
259
+ </ul>
260
+
261
+ </div><table class="source_code">
262
+ <tr>
263
+ <td>
264
+ <pre class="lines">
265
+
266
+
267
+ 20</pre>
268
+ </td>
269
+ <td>
270
+ <pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line 20</span>
271
+
272
+ <span class='id identifier rubyid_class_attribute'>class_attribute</span> <span class='symbol'>:anchormodel_attributes</span><span class='comma'>,</span> <span class='label'>default:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre>
273
+ </td>
274
+ </tr>
275
+ </table>
276
+ </div>
277
+
278
+ </div>
279
+
170
280
 
171
281
  <div id="class_method_details" class="method_details_list">
172
282
  <h2>Class Method Details</h2>
@@ -184,18 +294,36 @@
184
294
  </h3><div class="docstring">
185
295
  <div class="discussion">
186
296
 
187
- <p>Creates an attribute linking to an Anchormodel. The attribute should be present in the DB and the column should be of type String and named the same as <code>attribute_name</code>.</p>
297
+ <p>Declares a single-value anchormodel attribute.</p>
298
+
299
+ <p>The DB table must have a String column with the same name as <code>attribute_name</code>.</p>
188
300
 
189
301
 
190
302
  </div>
191
303
  </div>
192
304
  <div class="tags">
193
305
 
306
+ <div class="examples">
307
+ <p class="tag_title">Examples:</p>
308
+
309
+
310
+ <p class="example_title"><div class='inline'>
311
+ <p>Basic usage</p>
312
+ </div></p>
313
+
314
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>User</span> <span class='op'>&lt;</span> <span class='const'>ApplicationRecord</span>
315
+ <span class='id identifier rubyid_belongs_to_anchormodel'>belongs_to_anchormodel</span> <span class='symbol'>:role</span> <span class='comment'># `Role` inferred from attribute name
316
+ </span> <span class='id identifier rubyid_belongs_to_anchormodel'>belongs_to_anchormodel</span> <span class='symbol'>:role</span><span class='comma'>,</span> <span class='label'>optional:</span> <span class='kw'>true</span>
317
+ <span class='id identifier rubyid_belongs_to_anchormodel'>belongs_to_anchormodel</span> <span class='symbol'>:favorite_color</span><span class='comma'>,</span> <span class='const'>Color</span> <span class='comment'># explicit anchormodel class
318
+ </span><span class='kw'>end</span></code></pre>
319
+
320
+ </div>
321
+
194
322
 
195
323
  <p class="tag_title">See Also:</p>
196
324
  <ul class="see">
197
325
 
198
- <li>Parameters</li>
326
+ <li><span class='object_link'><a href="Util.html#install_methods_in_model-class_method" title="Anchormodel::Util.install_methods_in_model (method)">Full parameter documentation.</a></span></li>
199
327
 
200
328
  </ul>
201
329
 
@@ -205,12 +333,12 @@
205
333
  <pre class="lines">
206
334
 
207
335
 
208
- 14
209
- 15
210
- 16</pre>
336
+ 34
337
+ 35
338
+ 36</pre>
211
339
  </td>
212
340
  <td>
213
- <pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line 14</span>
341
+ <pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line 34</span>
214
342
 
215
343
  <span class='kw'>def</span> <span class='id identifier rubyid_belongs_to_anchormodel'>belongs_to_anchormodel</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_kwargs'>kwargs</span><span class='rparen'>)</span>
216
344
  <span class='const'><span class='object_link'><a href="../Anchormodel.html" title="Anchormodel (class)">Anchormodel</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Util.html" title="Anchormodel::Util (module)">Util</a></span></span><span class='period'>.</span><span class='id identifier rubyid_install_methods_in_model'><span class='object_link'><a href="Util.html#install_methods_in_model-class_method" title="Anchormodel::Util.install_methods_in_model (method)">install_methods_in_model</a></span></span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_kwargs'>kwargs</span><span class='rparen'>)</span>
@@ -232,18 +360,40 @@
232
360
  </h3><div class="docstring">
233
361
  <div class="discussion">
234
362
 
235
- <p>Creates an attribute linking to an array of Anchormodels. The attribute should be present in the DB and the column should be named the singular of <code>attribute_name</code>.</p>
363
+ <p>Declares a collection-valued anchormodel attribute.</p>
364
+
365
+ <p>The DB table must have a String column with the same name as <code>attribute_name</code>. Multiple keys are stored as a comma-separated string. Reading the attribute returns a <code>Set</code> of Anchormodel instances. <code>optional: true</code> is forced (an empty collection is a valid value).</p>
236
366
 
237
367
 
238
368
  </div>
239
369
  </div>
240
370
  <div class="tags">
241
371
 
372
+ <div class="examples">
373
+ <p class="tag_title">Examples:</p>
374
+
375
+
376
+ <p class="example_title"><div class='inline'>
377
+ <p>Basic usage</p>
378
+ </div></p>
379
+
380
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>User</span> <span class='op'>&lt;</span> <span class='const'>ApplicationRecord</span>
381
+ <span class='id identifier rubyid_belongs_to_anchormodels'>belongs_to_anchormodels</span> <span class='symbol'>:animals</span>
382
+ <span class='kw'>end</span>
383
+
384
+ <span class='id identifier rubyid_user'>user</span> <span class='op'>=</span> <span class='const'>User</span><span class='period'>.</span><span class='id identifier rubyid_create!'>create!</span><span class='lparen'>(</span><span class='label'>animals:</span> <span class='qsymbols_beg'>%i[</span><span class='tstring_content'>cat</span><span class='words_sep'> </span><span class='tstring_content'>dog</span><span class='tstring_end'>]</span></span><span class='rparen'>)</span>
385
+ <span class='id identifier rubyid_user'>user</span><span class='period'>.</span><span class='id identifier rubyid_animals'>animals</span> <span class='comment'># =&gt; #&lt;Set: {#&lt;Animal&lt;cat&gt;&gt;, #&lt;Animal&lt;dog&gt;&gt;}&gt;
386
+ </span><span class='id identifier rubyid_user'>user</span><span class='period'>.</span><span class='id identifier rubyid_cat?'>cat?</span> <span class='comment'># =&gt; true
387
+ </span><span class='id identifier rubyid_user'>user</span><span class='period'>.</span><span class='id identifier rubyid_animals'>animals</span> <span class='op'>&lt;&lt;</span> <span class='symbol'>:horse</span>
388
+ <span class='const'>User</span><span class='period'>.</span><span class='id identifier rubyid_with_any_animals'>with_any_animals</span><span class='lparen'>(</span><span class='symbol'>:cat</span><span class='comma'>,</span> <span class='symbol'>:horse</span><span class='rparen'>)</span> <span class='comment'># =&gt; relation matching the user above</span></code></pre>
389
+
390
+ </div>
391
+
242
392
 
243
393
  <p class="tag_title">See Also:</p>
244
394
  <ul class="see">
245
395
 
246
- <li>Parameters</li>
396
+ <li><span class='object_link'><a href="Util.html#install_methods_in_model-class_method" title="Anchormodel::Util.install_methods_in_model (method)">Full parameter documentation.</a></span></li>
247
397
 
248
398
  </ul>
249
399
 
@@ -253,12 +403,12 @@
253
403
  <pre class="lines">
254
404
 
255
405
 
256
- 21
257
- 22
258
- 23</pre>
406
+ 56
407
+ 57
408
+ 58</pre>
259
409
  </td>
260
410
  <td>
261
- <pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line 21</span>
411
+ <pre class="code"><span class="info file"># File 'lib/anchormodel/model_mixin.rb', line 56</span>
262
412
 
263
413
  <span class='kw'>def</span> <span class='id identifier rubyid_belongs_to_anchormodels'>belongs_to_anchormodels</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_kwargs'>kwargs</span><span class='rparen'>)</span>
264
414
  <span class='const'><span class='object_link'><a href="../Anchormodel.html" title="Anchormodel (class)">Anchormodel</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Util.html" title="Anchormodel::Util (module)">Util</a></span></span><span class='period'>.</span><span class='id identifier rubyid_install_methods_in_model'><span class='object_link'><a href="Util.html#install_methods_in_model-class_method" title="Anchormodel::Util.install_methods_in_model (method)">install_methods_in_model</a></span></span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_kwargs'>kwargs</span><span class='comma'>,</span> <span class='label'>multiple:</span> <span class='kw'>true</span><span class='rparen'>)</span>
@@ -273,7 +423,7 @@
273
423
  </div>
274
424
 
275
425
  <div id="footer">
276
- Generated on Wed May 13 11:46:10 2026 by
426
+ Generated on Wed May 13 15:48:24 2026 by
277
427
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
278
428
  0.9.28 (ruby-3.3.5).
279
429
  </div>