bump version to 0.23
[gitmo/MooseX-AttributeHelpers.git] / lib / MooseX / AttributeHelpers / MethodProvider / ImmutableHash.pm
1 package MooseX::AttributeHelpers::MethodProvider::ImmutableHash;
2 use Moose::Role;
3
4 our $VERSION   = '0.23';
5 $VERSION = eval $VERSION;
6 our $AUTHORITY = 'cpan:STEVAN';
7
8 sub exists : method {
9     my ($attr, $reader, $writer) = @_;
10     return sub { CORE::exists $reader->($_[0])->{$_[1]} ? 1 : 0 };
11 }
12
13 sub defined : method {
14     my ($attr, $reader, $writer) = @_;
15     return sub { CORE::defined $reader->($_[0])->{$_[1]} ? 1 : 0 };
16 }
17
18 sub 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
30 sub keys : method {
31     my ($attr, $reader, $writer) = @_;
32     return sub { CORE::keys %{$reader->($_[0])} };
33 }
34
35 sub values : method {
36     my ($attr, $reader, $writer) = @_;
37     return sub { CORE::values %{$reader->($_[0])} };
38 }
39
40 sub 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
50 sub 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
60 sub count : method {
61     my ($attr, $reader, $writer) = @_;
62     return sub { scalar CORE::keys %{$reader->($_[0])} };
63 }
64
65 sub empty : method {
66     my ($attr, $reader, $writer) = @_;
67     return sub { scalar CORE::keys %{$reader->($_[0])} ? 1 : 0 };
68 }
69
70 1;
71
72 __END__
73
74 =pod
75
76 =head1 NAME
77
78 MooseX::AttributeHelpers::MethodProvider::ImmutableHash
79
80 =head1 DESCRIPTION
81
82 This is a role which provides the method generators for
83 L<MooseX::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
99 Returns the number of elements in the list.
100
101 =item B<empty>
102
103 If the list is populated, returns true. Otherwise, returns false.
104
105 =item B<exists>
106
107 Returns true if the given key is present in the hash
108
109 =item B<defined>
110
111 Returns true if the value of a given key is defined
112
113 =item B<get>
114
115 Returns an element of the hash by its key.
116
117 =item B<keys>
118
119 Returns the list of keys in the hash.
120
121 =item B<values>
122
123 Returns the list of values in the hash.
124
125 =item B<kv>
126
127 Returns the key, value pairs in the hash as array references
128
129 =item B<elements>
130
131 Returns the key, value pairs in the hash as a flattened list
132
133 =back
134
135 =head1 BUGS
136
137 All complex software has bugs lurking in it, and this module is no
138 exception. If you find a bug please either email me, or add the bug
139 to cpan-RT.
140
141 =head1 AUTHOR
142
143 Stevan Little E<lt>stevan@iinteractive.comE<gt>
144
145 =head1 COPYRIGHT AND LICENSE
146
147 Copyright 2007-2009 by Infinity Interactive, Inc.
148
149 L<http://www.iinteractive.com>
150
151 This library is free software; you can redistribute it and/or modify
152 it under the same terms as Perl itself.
153
154 =cut
155