Steve Bertrand wrote:
> Uri Guttman wrote:
>>>>>>> "SB" == Steve Bertrand <st...@ibctech.ca> writes:
> 
>> i told you dispatch tables are very useful!
>>
>> i leave how to code it as an exercise for you.
> 
> Well, I did end up implementing the dispatch table, and had some serious
> problems trying to retrofit it into a particular class's namespace, but
> it's done.
> 
> Quickly I found that I was copy/pasting the way I did it, and will have
> two spots to make changes, but was able to do it without making any API
> changes. Even though I continued on to completion for experience, I
> realized that what I should be doing is configuring the 'struct'
> definitions themselves as the dispatch table (which I will proceed to do).
> 
> My type definitions are a hash, where the key is the 'tag', and the
> value is a human-presentable description of the tag. I figure that if I
> make the 'description' contain a coderef to the validation directly,
> I've saved much time, and held true to the primary programmer virtue,
> all the while not needing to make any API changes.
> 
> I have a semi-related code question that has to do with the tightening
> of param validation.
> 
> In my ISP::Vars class, I have a compare() method, which now checks for
> extra, _and_ missing 'tags'. I've compiled in a config var that I can
> use while building the gui that states:
> 
> [ISP::Vars]
> forgive_missing_attrs   = 1
> 
> I want to add the ability for a 't/*.t' test to either disable this
> check, or implement some form of "IM_A_TEST" variable into the ISP::Var
> namespace without having to modify the config file itself.

..d'oh! How about modifying the class's accessor method that is pulled
from the config so I can write to it via the test:

(I obviously haven't changed from the symbol table mod...yes).

# config accessors
        my @config_vars = qw (
                                FORGIVE_MISSING_ATTRS
                            );
        for my $member (@config_vars) {
                no strict 'refs';
                *{$member} = sub {
                        my $self = shift;
                        $self->{config}{$member} = shift if @_;
                        return $self->{config}{$member};
                }
        }

Steve

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to