No commit bit, but I'll be happy to write the tests as tickets.

Regarding that "BUG #1", I made a note in OmniTrigger.pm:

THERE'S A SPECIAL CASE, WHEN WE'RE HERE AS THE RESULT OF A SLOT BEING SET DURING FIXUP FOR THE PURPOSE OF "TRANSFERRING" A VALUE FROM THE "OLD" INSTANCE TO THE "NEW." WE DON'T COUNT SUCH A TRANSFER AS A *CHANGE*: IT'S JUST BOOKKEEPING. SO FOR THESE TRANSFERS WE NEITHER FIRE THE OMNITRIGGER NOW NOR SET fire_omnitrig_when_ready TRUE
FOR A FUTURE FIRING.

KLUDGY SOLUTION, THE unless CONDITION, HERE. I FINALLY HAD TO DO SOMETHING LIKE THIS BECAUSE OF THE WAY _fixup_attributes_after_rebless IS IMPLEMENTED. THERE ARE BASICALLY THREE DIFFERENT SCENARIOS THERE: 1) EXISTING VALUES OF ATTRIBUTES WITH UNDEFINED init_argS ARE TRANSFERRED VIA set_value; 2) EXISTING VALUES OF ATTRIBUTES WITH DEFINED init_argS ARE TRANSFERRED VIA set_initial_value; AND 3) NEWLY INCOMING VALUES FOR ATTRIBUTES WITH DEFINED init_argS ARE SET VIA set_initial_value. WE NORMALLY FIRE
OMNITRIGGERS FOR ANY USE OF set_value OR set_initial_value (RATHER,
_set_initial_slot_value, ULTIMATELY), BUT HERE OMNITRIGGERS SHOULD FIRE ONLY FOR THAT THIRD SCENARIO. AS MOOSE GIVES NO WAY EXPLICITLY TO ISOLATE "SET-FOR-THE- PURPOSE-OF- TRANSFER" OPERATIONS, WE'VE GOT TO ISOLATE (AND AVOID) THEM MORE CIRCUITOUSLY.

The bug is scenario #1, above -- calling set_value entails a trigger call.

-----Original Message----- From: Karen Etheridge
Sent: Thursday, December 22, 2011 2:55 PM
To: [email protected]
Subject: Re: MooseX::OmniTrigger

On Thu, Dec 22, 2011 at 02:36:00PM -0700, Todd Lorenz wrote:
Hi, Karen, sure. I should say I *suspect* they're bugs based on my
expectations of trigger behavior. I should also say they're extremely minor
and probably aren't affecting anyone anywhere.

They're in mooseisms.t. My explanation of #2 is pretty flip -- I didn't
figure anyone would ever actually read it. Let me know if it needs
translation.

Using:
https://github.com/trlorenz/MooseX-OmniTrigger/blob/master/t/007-mooseisms.t

# POSSIBLE MOOSE BUG #1. DURING A REBLESS, REGULAR TRIGGERS WILL FIRE FOR
# ANY ATTRIBUTES THAT HAVE AN UNDEFINED init_arg AND BEGAN THE REBLESS WITH
# A VALUE.

This sounds suspiciously similar to a fix I made for 2.0009: "When an
object is reblessed, triggers are called on attributes that are set during
the reblessing."  To clarify, triggers were not called for attributes that
were being *added* (initialized, or altered) during the reblessing, as
rebless() allows the supply of additional constructor arguments -- but
possibly this is a red herring and there is no connection.

I've confirmed this behaviour with my own tests, and indeed the attr must
have init_arg=>undef for the trigger to fire during a rebless.  IMHO this
is definitely a bug and should be fixed.

#2 also sounds like a real issue (it is long so I won't repeat it here).

Todd, do you have a Moose commit bit? It would be of significant value if
you were to commit some TODO tests to the Moose repository so these issues
were documented, and/or write them up as separate RT tickets.  (You can
submit your ssh public key via the instructions in
Moose::Manual::Contributing, or hop on irc.perl.org #moose.)



--
     "I do not fear computers. I fear the lack of them." - Isaac Asimov
           .             .            .            .             .
Karen Etheridge, [email protected] GCS C+++$ USL+++$ P+++$ w--- M++

Reply via email to