1 package SQL::Translator::Role::ListAttr;
3 use SQL::Translator::Utils qw(parse_list_arg ex2err);
4 use List::MoreUtils qw(uniq);
10 subs => [qw(has around)],
15 my ($class, $target_package, $name, %arguments) = @_;
17 my $may_throw = delete $arguments{may_throw};
18 my $undef_if_empty = delete $arguments{undef_if_empty};
19 my $append = delete $arguments{append};
20 my $coerce = delete $arguments{uniq}
21 ? sub { [ uniq @{parse_list_arg($_[0])} ] }
26 (!$arguments{builder} ? (
27 default => sub { [] },
34 my ($orig, $self) = (shift, shift);
35 my $list = parse_list_arg(@_);
36 $self->$orig([ @{$append ? $self->$orig : []}, @$list ])
41 $return = ex2err($orig, $self) or return;
44 $return = $self->$orig;
46 my $scalar_return = !@{$return} && $undef_if_empty ? undef : $return;
47 return wantarray ? @{$return} : $scalar_return;