Skip to content

Commit

Permalink
Minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
exodist committed Sep 21, 2010
1 parent 1c93adc commit a0d4ae7
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions lib/Exodist/Util/Accessors.pm
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ sub _simple_accessor {
my ( $name, $default ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
( $self->{$name} ) = @_ if @_;
$self->{$name} = $default->()
if $default && !exists $self->{$name};
Expand Down Expand Up @@ -89,17 +90,20 @@ sub _cat_pull_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my ( $type ) = @_;
$type ||= '!';
my $ref = $self->$refname;
return @{ delete $ref->{ $type }};
return @{ delete $ref->{ $type } || [] };
};
}

sub _cat_push_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
return unless @_;
my $ref = $self->$refname;
push @{ $ref->{ blessed($_) || '!' }} => $_
for @_;
Expand All @@ -110,6 +114,7 @@ sub _cat_keys_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my $ref = $self->$refname;
return keys %$ref;
};
Expand All @@ -119,9 +124,10 @@ sub _cat_all_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my ( $type ) = @_;
my $ref = $self->$refname;
return @{ $ref->{ $type }} if $type;
return @{ $ref->{ $type } || [] } if $type;
return( map { @$_ ? (@$_) : () } values %$ref );
};
}
Expand All @@ -130,6 +136,7 @@ sub _cat_pull_all_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my $ref = $self->$refname;
my @out = map { @$_ ? (@$_) : () } values %$ref;
$self->$refname({});
Expand All @@ -141,6 +148,7 @@ sub _arr_all_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my $ref = $self->$refname;
return @$ref;
};
Expand All @@ -150,6 +158,8 @@ sub _arr_push_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
return unless @_;
my $ref = $self->$refname;
push @$ref => @_;
};
Expand All @@ -159,6 +169,7 @@ sub _arr_pull_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my $ref = $self->$refname;
$self->$refname([]);
return @$ref;
Expand All @@ -169,6 +180,7 @@ sub _arr_pop_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my $ref = $self->$refname;
pop @$ref;
};
Expand All @@ -178,6 +190,7 @@ sub _arr_unshift_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my $ref = $self->$refname;
unshift @$ref => @_;
};
Expand All @@ -187,11 +200,18 @@ sub _arr_shift_accessor {
my ( $refname ) = @_;
return sub {
my $self = shift;
_verify_self( $self );
my $ref = $self->$refname;
shift @$ref;
};
}

sub _verify_self {
my ( $self ) = @_;
return if blessed( $self );
croak "Attempted to use accessor on unblessed item '$self'";
}

1;

__END__
Expand Down

0 comments on commit a0d4ae7

Please sign in to comment.