<div dir="ltr">I&#39;ve abstracted out my work to something more general.  I&#39;m going to copy over and run the entire DBIC test suite against it and see what fails.  There is some magic in the load_components bit as it uses some Moo internals to do the Moo extends and with properly.  Just posting here if anyone is curious.<div><br></div><div><a href="https://github.com/bluefeet/DBICx-Moo">https://github.com/bluefeet/DBICx-Moo</a><br></div><div><br></div><div>Aran</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 1, 2014 at 7:21 PM, Aran Deltac <span dir="ltr">&lt;<a href="mailto:bluefeet@gmail.com" target="_blank">bluefeet@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><span style="font-family:arial,sans-serif;font-size:13px">I&#39;ve been converting a lot of @work&#39;s custom components, result, result set, schema, and storage classes (yes, we even have custom storage classes) to Moo roles and classes.</span><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">I&#39;ve just about completed it and have worked through a lot of issues, but am left with one remaining issue which I&#39;m stumped at and have been able to whittle it down to a couple small examples:</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px"><div>package FooResult;</div><div>use Moo;</div><div>print &#39;HAS BUILDARGS: &#39; . (FooResult-&gt;can(&#39;BUILDARGS&#39;) ? &#39;YES&#39; : &#39;NO&#39;) . &quot;\n&quot;;</div><div>extends &#39;DBIx::Class::Core&#39;;</div><div>print &#39;HAS BUILDARGS: &#39; . (FooResult-&gt;can(&#39;BUILDARGS&#39;) ? &#39;YES&#39; : &#39;NO&#39;) . &quot;\n&quot;;</div></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">That prints:</div><div style="font-family:arial,sans-serif;font-size:13px"><div>HAS BUILDARGS: YES</div><div>HAS BUILDARGS: NO</div></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div></span><div style="font-family:arial,sans-serif;font-size:13px">I was able to change this to YES-YES by adding Moo::Object to the front of my extends, which in the above example would look like:</div><span class=""><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">extends &#39;Moo::Object&#39;, &#39;DBIx::Class::Core&#39;;</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Is that the right thing to do when inheriting from a non-Moo class?  Documentation on non-moo inheritance was minimal in the Moo docs, but maybe I missed it.  Note that I found this issue via a Moose result class which inherits from my Moo result base class which inherits from DBIx::Class::Core.  Something about that relationship structure requires BUILDARGS even though the involved code neither declares nor calls BUILDARGS.</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Another issue is this:</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">package FooResult;</div><div style="font-family:arial,sans-serif;font-size:13px">use Moo;</div><div style="font-family:arial,sans-serif;font-size:13px">extends &#39;DBIx::Class::Core&#39;;</div><div style="font-family:arial,sans-serif;font-size:13px">has bar =&gt; ( is=&gt;&#39;ro&#39; );</div><div style="font-family:arial,sans-serif;font-size:13px">FooResult-&gt;new( bar=&gt;32 );</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Which then hangs with:</div><div style="font-family:arial,sans-serif;font-size:13px"><div><br></div><div>Deep recursion on subroutine &quot;DBIx::Class::Row::throw_exception&quot; at /home/aran/local-lib/lib/perl5/DBIx/Class/Row.pm line 1416.</div><div>Deep recursion on subroutine &quot;DBIx::Class::Row::result_source&quot; at /home/aran/local-lib/lib/perl5/DBIx/Class/Row.pm line 1568.</div></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">I tried fiddling with FOREIGNBUILDARGS to see if I could produce arguments which made DBIC&#39;s new() happy but it was a fruitless effort.</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div></span><div style="font-family:arial,sans-serif;font-size:13px">At this point the error I am getting with the real application code is:</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px"><div>DBIx::Class::Sims::load_sims(): Can&#39;t call method &quot;new&quot; on an undefined value at /home/aran/local-lib/lib/perl5/DBIx/Class/ResultSet.pm line 2590. at /home/aran/ziprecruiter/app/t/lib/Test/ZR/Schema.pm line 95<br></div><div><br></div><div>Which is what lead me to the two previous examples.  As far as I can tell my Moo conversion is complete and there is something wrong with the argument processing between Moo and DBIC.</div></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">I&#39;m using the latest DBIC (0.082800) and Moo (1.006).</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Any pointers, examples, words of wisdom, RTFMs, etc, appreciated.<br></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Thanks!</div></div>
</blockquote></div><br></div>