No need to specify a Moose version now that we're in core.
[gitmo/Moose.git] / lib / Moose / AttributeHelpers / MethodProvider / ImmutableHash.pm
CommitLineData
e3c07b19 1package Moose::AttributeHelpers::MethodProvider::ImmutableHash;
2use Moose::Role;
3
37b7c240 4our $VERSION = '0.84';
e3c07b19 5$VERSION = eval $VERSION;
6our $AUTHORITY = 'cpan:STEVAN';
7
8sub exists : method {
9 my ($attr, $reader, $writer) = @_;
10 return sub { CORE::exists $reader->($_[0])->{$_[1]} ? 1 : 0 };
11}
12
13sub defined : method {
14 my ($attr, $reader, $writer) = @_;
15 return sub { CORE::defined $reader->($_[0])->{$_[1]} ? 1 : 0 };
16}
17
18sub get : method {
19 my ($attr, $reader, $writer) = @_;
20 return sub {
21 if ( @_ == 2 ) {
22 $reader->($_[0])->{$_[1]}
23 } else {
24 my ( $self, @keys ) = @_;
25 @{ $reader->($self) }{@keys}
26 }
27 };
28}
29
30sub keys : method {
31 my ($attr, $reader, $writer) = @_;
32 return sub { CORE::keys %{$reader->($_[0])} };
33}
34
35sub values : method {
36 my ($attr, $reader, $writer) = @_;
37 return sub { CORE::values %{$reader->($_[0])} };
38}
39
40sub kv : method {
41 my ($attr, $reader, $writer) = @_;
42 return sub {
43 my $h = $reader->($_[0]);
44 map {
45 [ $_, $h->{$_} ]
46 } CORE::keys %{$h}
47 };
48}
49
50sub elements : method {
51 my ($attr, $reader, $writer) = @_;
52 return sub {
53 my $h = $reader->($_[0]);
54 map {
55 $_, $h->{$_}
56 } CORE::keys %{$h}
57 };
58}
59
60sub count : method {
61 my ($attr, $reader, $writer) = @_;
62 return sub { scalar CORE::keys %{$reader->($_[0])} };
63}
64
65sub empty : method {
66 my ($attr, $reader, $writer) = @_;
67 return sub { scalar CORE::keys %{$reader->($_[0])} ? 1 : 0 };
68}
69
701;
71
72__END__
73
74=pod
75
76=head1 NAME
77
78Moose::AttributeHelpers::MethodProvider::ImmutableHash
79
80=head1 DESCRIPTION
81
82This is a role which provides the method generators for
83L<Moose::AttributeHelpers::Collection::ImmutableHash>.
84
85=head1 METHODS
86
87=over 4
88
89=item B<meta>
90
91=back
92
93=head1 PROVIDED METHODS
94
95=over 4
96
97=item B<count>
98
99Returns the number of elements in the list.
100
101=item B<empty>
102
103If the list is populated, returns true. Otherwise, returns false.
104
105=item B<exists>
106
107Returns true if the given key is present in the hash
108
109=item B<defined>
110
111Returns true if the value of a given key is defined
112
113=item B<get>
114
115Returns an element of the hash by its key.
116
117=item B<keys>
118
119Returns the list of keys in the hash.
120
121=item B<values>
122
123Returns the list of values in the hash.
124
125=item B<kv>
126
127Returns the key, value pairs in the hash as array references
128
129=item B<elements>
130
131Returns the key, value pairs in the hash as a flattened list
132
133=back
134
135=head1 BUGS
136
137All complex software has bugs lurking in it, and this module is no
138exception. If you find a bug please either email me, or add the bug
139to cpan-RT.
140
141=head1 AUTHOR
142
143Stevan Little E<lt>stevan@iinteractive.comE<gt>
144
145=head1 COPYRIGHT AND LICENSE
146
147Copyright 2007-2009 by Infinity Interactive, Inc.
148
149L<http://www.iinteractive.com>
150
151This library is free software; you can redistribute it and/or modify
152it under the same terms as Perl itself.
153
154=cut
155