| File | /usr/local/lib/perl5/site_perl/5.10.1/MooseX/ClassAttribute.pm |
| Statements Executed | 29 |
| Statement Execution Time | 476µs |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 1.08ms | 202ms | MooseX::ClassAttribute::BEGIN@11 |
| 2 | 2 | 2 | 32µs | 22.5ms | MooseX::ClassAttribute::class_has |
| 1 | 1 | 1 | 18µs | 24.2ms | MooseX::ClassAttribute::init_meta |
| 1 | 1 | 1 | 16µs | 19µs | MooseX::ClassAttribute::BEGIN@3 |
| 1 | 1 | 1 | 12µs | 57µs | MooseX::ClassAttribute::BEGIN@9 |
| 1 | 1 | 1 | 7µs | 29µs | MooseX::ClassAttribute::BEGIN@10 |
| 1 | 1 | 1 | 7µs | 17µs | MooseX::ClassAttribute::BEGIN@4 |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | package MooseX::ClassAttribute; | ||||
| 2 | |||||
| 3 | 3 | 21µs | 2 | 22µs | # spent 19µs (16+3) within MooseX::ClassAttribute::BEGIN@3 which was called
# once (16µs+3µs) by SimpleDB::Class::BEGIN@138 at line 3 # spent 19µs making 1 call to MooseX::ClassAttribute::BEGIN@3
# spent 3µs making 1 call to strict::import |
| 4 | 3 | 46µs | 2 | 27µs | # spent 17µs (7+10) within MooseX::ClassAttribute::BEGIN@4 which was called
# once (7µs+10µs) by SimpleDB::Class::BEGIN@138 at line 4 # spent 17µs making 1 call to MooseX::ClassAttribute::BEGIN@4
# spent 10µs making 1 call to warnings::import |
| 5 | |||||
| 6 | 1 | 800ns | our $VERSION = '0.10'; | ||
| 7 | 1 | 500ns | our $AUTHORITY = 'cpan:DROLSKY'; | ||
| 8 | |||||
| 9 | 3 | 76µs | 2 | 103µs | # spent 57µs (12+45) within MooseX::ClassAttribute::BEGIN@9 which was called
# once (12µs+45µs) by SimpleDB::Class::BEGIN@138 at line 9 # spent 57µs making 1 call to MooseX::ClassAttribute::BEGIN@9
# spent 45µs making 1 call to UNIVERSAL::VERSION |
| 10 | 3 | 22µs | 2 | 50µs | # spent 29µs (7+21) within MooseX::ClassAttribute::BEGIN@10 which was called
# once (7µs+21µs) by SimpleDB::Class::BEGIN@138 at line 10 # spent 29µs making 1 call to MooseX::ClassAttribute::BEGIN@10
# spent 21µs making 1 call to Moose::Exporter::import |
| 11 | 3 | 252µs | 1 | 202ms | # spent 202ms (1.08+201) within MooseX::ClassAttribute::BEGIN@11 which was called
# once (1.08ms+201ms) by SimpleDB::Class::BEGIN@138 at line 11 # spent 202ms making 1 call to MooseX::ClassAttribute::BEGIN@11 |
| 12 | |||||
| 13 | 1 | 5µs | 1 | 395µs | Moose::Exporter->setup_import_methods # spent 395µs making 1 call to Moose::Exporter::setup_import_methods |
| 14 | ( with_caller => [ 'class_has' ] ); | ||||
| 15 | |||||
| 16 | |||||
| 17 | sub init_meta | ||||
| 18 | # spent 24.2ms (18µs+24.2) within MooseX::ClassAttribute::init_meta which was called
# once (18µs+24.2ms) by Moose::Exporter::__ANON__[/usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Moose/Exporter.pm:389] at line 354 of Moose/Exporter.pm | ||||
| 19 | 1 | 200ns | shift; | ||
| 20 | 1 | 1µs | my %p = @_; | ||
| 21 | |||||
| 22 | 1 | 3µs | 1 | 292µs | Moose->init_meta(%p); # spent 292µs making 1 call to Moose::init_meta |
| 23 | |||||
| 24 | return | ||||
| 25 | 1 | 21µs | 2 | 50µs | Moose::Util::MetaRole::apply_metaclass_roles # spent 46µs making 1 call to Class::MOP::Class::DESTROY
# spent 4µs making 1 call to Moose::Util::MetaRole::apply_metaclass_roles |
| 26 | ( for_class => $p{for_class}, | ||||
| 27 | metaclass_roles => [ 'MooseX::ClassAttribute::Role::Meta::Class' ], | ||||
| 28 | ); | ||||
| 29 | } | ||||
| 30 | |||||
| 31 | sub class_has | ||||
| 32 | # spent 22.5ms (32µs+22.5) within MooseX::ClassAttribute::class_has which was called 2 times, avg 11.3ms/call:
# once (8µs+11.3ms) by Class::MOP::__ANON__[/usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/Class/MOP.pm:103] at line 342 of ../lib/SimpleDB/Class.pm
# once (24µs+11.2ms) by MooseX::ClassAttribute::class_has at line 272 of Moose/Exporter.pm | ||||
| 33 | 1 | 900ns | my $caller = shift; | ||
| 34 | 1 | 700ns | my $name = shift; | ||
| 35 | 1 | 2µs | my %options = @_; | ||
| 36 | |||||
| 37 | 1 | 2µs | my $attrs = ref $name eq 'ARRAY' ? $name : [$name]; | ||
| 38 | |||||
| 39 | Class::MOP::class_of($caller) | ||||
| 40 | ->add_class_attribute( $_, %options ) | ||||
| 41 | 2 | 15µs | 2 | 11.2ms | for @{ $attrs }; # spent 11.2ms making 1 call to MooseX::ClassAttribute::Role::Meta::Class::add_class_attribute
# spent 5µs making 1 call to Class::MOP::class_of |
| 42 | } | ||||
| 43 | |||||
| 44 | 1 | 7µs | 1; | ||
| 45 | |||||
| 46 | __END__ | ||||
| 47 | |||||
| 48 | =pod | ||||
| 49 | |||||
| 50 | =head1 NAME | ||||
| 51 | |||||
| 52 | MooseX::ClassAttribute - Declare class attributes Moose-style | ||||
| 53 | |||||
| 54 | =head1 SYNOPSIS | ||||
| 55 | |||||
| 56 | package My::Class; | ||||
| 57 | |||||
| 58 | use Moose; | ||||
| 59 | use MooseX::ClassAttribute; | ||||
| 60 | |||||
| 61 | class_has 'Cache' => | ||||
| 62 | ( is => 'rw', | ||||
| 63 | isa => 'HashRef', | ||||
| 64 | default => sub { {} }, | ||||
| 65 | ); | ||||
| 66 | |||||
| 67 | __PACKAGE__->meta()->make_immutable(); | ||||
| 68 | |||||
| 69 | no Moose; | ||||
| 70 | no MooseX::ClassAttribute; | ||||
| 71 | |||||
| 72 | # then later ... | ||||
| 73 | |||||
| 74 | My::Class->Cache()->{thing} = ...; | ||||
| 75 | |||||
| 76 | |||||
| 77 | =head1 DESCRIPTION | ||||
| 78 | |||||
| 79 | This module allows you to declare class attributes in exactly the same | ||||
| 80 | way as object attributes, using C<class_has()> instead of C<has()>. | ||||
| 81 | |||||
| 82 | You can use any feature of Moose's attribute declarations, including | ||||
| 83 | overriding a parent's attributes, delegation (C<handles>), and | ||||
| 84 | attribute metaclasses, and it should just work. The one exception is | ||||
| 85 | the "required" flag, which is not allowed for class attributes. | ||||
| 86 | |||||
| 87 | The accessor methods for class attribute may be called on the class | ||||
| 88 | directly, or on objects of that class. Passing a class attribute to | ||||
| 89 | the constructor will not set it. | ||||
| 90 | |||||
| 91 | =head1 FUNCTIONS | ||||
| 92 | |||||
| 93 | This class exports one function when you use it, C<class_has()>. This | ||||
| 94 | works exactly like Moose's C<has()>, but it declares class attributes. | ||||
| 95 | |||||
| 96 | One little nit is that if you include C<no Moose> in your class, you | ||||
| 97 | won't remove the C<class_has()> function. To do that you must include | ||||
| 98 | C<no MooseX::ClassAttribute> as well. | ||||
| 99 | |||||
| 100 | =head2 Implementation and Immutability | ||||
| 101 | |||||
| 102 | This module will add a role to your class's metaclass, See | ||||
| 103 | L<MooseX::ClassAttribute::Role::Meta::Class> for details. This role | ||||
| 104 | provides introspection methods for class attributes. | ||||
| 105 | |||||
| 106 | Class attributes themselves do the | ||||
| 107 | L<MooseX::ClassAttribute::Role::Meta::Attribute> role. | ||||
| 108 | |||||
| 109 | There is also a L<MooseX::ClassAttribute::Meta::Method::Accessor> | ||||
| 110 | which provides part of the inlining implementation for class | ||||
| 111 | attributes. | ||||
| 112 | |||||
| 113 | =head2 Cooperation with Metaclasses and Traits | ||||
| 114 | |||||
| 115 | This module should work with most attribute metaclasses and traits, | ||||
| 116 | but it's possible that conflicts could occur. This module has been | ||||
| 117 | tested to work with C<MooseX::AttributeHelpers>. | ||||
| 118 | |||||
| 119 | =head1 DONATIONS | ||||
| 120 | |||||
| 121 | If you'd like to thank me for the work I've done on this module, | ||||
| 122 | please consider making a "donation" to me via PayPal. I spend a lot of | ||||
| 123 | free time creating free software, and would appreciate any support | ||||
| 124 | you'd care to offer. | ||||
| 125 | |||||
| 126 | Please note that B<I am not suggesting that you must do this> in order | ||||
| 127 | for me to continue working on this particular software. I will | ||||
| 128 | continue to do so, inasmuch as I have in the past, for as long as it | ||||
| 129 | interests me. | ||||
| 130 | |||||
| 131 | Similarly, a donation made in this way will probably not make me work | ||||
| 132 | on this software much more, unless I get so many donations that I can | ||||
| 133 | consider working on free software full time, which seems unlikely at | ||||
| 134 | best. | ||||
| 135 | |||||
| 136 | To donate, log into PayPal and send money to autarch@urth.org or use | ||||
| 137 | the button on this page: | ||||
| 138 | L<http://www.urth.org/~autarch/fs-donation.html> | ||||
| 139 | |||||
| 140 | =head1 AUTHOR | ||||
| 141 | |||||
| 142 | Dave Rolsky, C<< <autarch@urth.org> >> | ||||
| 143 | |||||
| 144 | =head1 BUGS | ||||
| 145 | |||||
| 146 | Please report any bugs or feature requests to | ||||
| 147 | C<bug-moosex-classattribute@rt.cpan.org>, or through the web interface | ||||
| 148 | at L<http://rt.cpan.org>. I will be notified, and then you'll | ||||
| 149 | automatically be notified of progress on your bug as I make changes. | ||||
| 150 | |||||
| 151 | =head1 COPYRIGHT & LICENSE | ||||
| 152 | |||||
| 153 | Copyright 2007-2008 Dave Rolsky, All Rights Reserved. | ||||
| 154 | |||||
| 155 | This program is free software; you can redistribute it and/or modify | ||||
| 156 | it under the same terms as Perl itself. | ||||
| 157 | |||||
| 158 | =cut |