Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / Moose / Autobox / Hash.pm
CommitLineData
3fea05b9 1package Moose::Autobox::Hash;
2use Moose::Role 'with';
3
4our $VERSION = '0.10';
5
6with 'Moose::Autobox::Ref',
7 'Moose::Autobox::Indexed';
8
9sub delete {
10 my ($hash, $key) = @_;
11 CORE::delete $hash->{$key};
12}
13
14sub merge {
15 my ($left, $right) = @_;
16 Carp::confess "You must pass a hashref as argument to merge"
17 unless ref $right eq 'HASH';
18 return { %$left, %$right };
19}
20
21sub hslice {
22 my ($hash, $keys) = @_;
23 return { map { $_ => $hash->{$_} } @$keys };
24}
25
26sub flatten {
27 return %{$_[0]}
28}
29
30# ::Indexed implementation
31
32sub at {
33 my ($hash, $index) = @_;
34 $hash->{$index};
35}
36
37sub put {
38 my ($hash, $index, $value) = @_;
39 $hash->{$index} = $value;
40}
41
42sub exists {
43 my ($hash, $key) = @_;
44 CORE::exists $hash->{$key};
45}
46
47sub keys {
48 my ($hash) = @_;
49 [ CORE::keys %$hash ];
50}
51
52sub values {
53 my ($hash) = @_;
54 [ CORE::values %$hash ];
55}
56
57sub kv {
58 my ($hash) = @_;
59 [ CORE::map { [ $_, $hash->{$_} ] } CORE::keys %$hash ];
60}
61
62sub slice {
63 my ($hash, $keys) = @_;
64 return [ @{$hash}{@$keys} ];
65}
66
67sub each {
68 my ($hash, $sub) = @_;
69 for my $key (CORE::keys %$hash) {
70 $sub->($key, $hash->{$key});
71 }
72}
73
74sub each_key {
75 my ($hash, $sub) = @_;
76 $sub->($_) for CORE::keys %$hash;
77}
78
79sub each_value {
80 my ($hash, $sub) = @_;
81 $sub->($_) for CORE::values %$hash;
82}
83
84
85# End Indexed
86
87sub print { CORE::print %{$_[0]} }
88sub say { CORE::print %{$_[0]}, "\n" }
89
901;
91
92__END__
93
94=pod
95
96=head1 NAME
97
98Moose::Autobox::Hash - the Hash role
99
100=head1 SYNOPOSIS
101
102 use Moose::Autobox;
103
104 print { one => 1, two => 2 }->keys->join(', '); # prints 'one, two'
105
106=head1 DESCRIPTION
107
108This is a role to describes a Hash value.
109
110=head1 METHODS
111
112=over 4
113
114=item B<delete>
115
116=item B<merge>
117
118Takes a hashref and returns a new hashref with right precedence
119shallow merging.
120
121=item B<hslice>
122
123Slices a hash but returns the keys and values as a new hashref.
124
125=item B<flatten>
126
127=back
128
129=head2 Indexed implementation
130
131=over 4
132
133=item B<at>
134
135=item B<put>
136
137=item B<exists>
138
139=item B<keys>
140
141=item B<values>
142
143=item B<kv>
144
145=item B<slice>
146
147=item B<each>
148
149=item B<each_key>
150
151=item B<each_value>
152
153=back
154
155=over 4
156
157=item B<meta>
158
159=item B<print>
160
161=item B<say>
162
163=back
164
165=head1 BUGS
166
167All complex software has bugs lurking in it, and this module is no
168exception. If you find a bug please either email me, or add the bug
169to cpan-RT.
170
171=head1 AUTHOR
172
173Stevan Little E<lt>stevan@iinteractive.comE<gt>
174
175=head1 COPYRIGHT AND LICENSE
176
177Copyright 2006-2008 by Infinity Interactive, Inc.
178
179L<http://www.iinteractive.com>
180
181This library is free software; you can redistribute it and/or modify
182it under the same terms as Perl itself.
183
184=cut
185