| 1 | package Class::Scaffold::Accessor; |
|---|
| 2 | |
|---|
| 3 | use warnings; |
|---|
| 4 | use strict; |
|---|
| 5 | use Error::Hierarchy::Util 'assert_read_only'; |
|---|
| 6 | use Class::Scaffold::Factory::Type; |
|---|
| 7 | |
|---|
| 8 | |
|---|
| 9 | our $VERSION = '0.06'; |
|---|
| 10 | |
|---|
| 11 | |
|---|
| 12 | use base qw( |
|---|
| 13 | Class::Accessor::Complex |
|---|
| 14 | Class::Accessor::Constructor |
|---|
| 15 | Class::Accessor::FactoryTyped |
|---|
| 16 | ); |
|---|
| 17 | |
|---|
| 18 | |
|---|
| 19 | sub mk_framework_object_accessors { |
|---|
| 20 | my ($self, @args) = @_; |
|---|
| 21 | $self->mk_factory_typed_accessors( |
|---|
| 22 | 'Class::Scaffold::Factory::Type', @args); |
|---|
| 23 | } |
|---|
| 24 | |
|---|
| 25 | |
|---|
| 26 | sub mk_framework_object_array_accessors { |
|---|
| 27 | my ($self, @args) = @_; |
|---|
| 28 | $self->mk_factory_typed_array_accessors( |
|---|
| 29 | 'Class::Scaffold::Factory::Type', @args); |
|---|
| 30 | } |
|---|
| 31 | |
|---|
| 32 | |
|---|
| 33 | sub mk_readonly_accessors { |
|---|
| 34 | my ($self, @fields) = @_; |
|---|
| 35 | my $class = ref $self || $self; |
|---|
| 36 | |
|---|
| 37 | for my $field (@fields) { |
|---|
| 38 | no strict 'refs'; |
|---|
| 39 | |
|---|
| 40 | *{"${class}::${field}"} = sub { |
|---|
| 41 | local $DB::sub = local *__ANON__ = "${class}::${field}" |
|---|
| 42 | if defined &DB::DB && !$Devel::DProf::VERSION; |
|---|
| 43 | my $self = shift; |
|---|
| 44 | assert_read_only(@_); |
|---|
| 45 | $self->{$field}; |
|---|
| 46 | }; |
|---|
| 47 | |
|---|
| 48 | *{"${class}::set_${field}"} = |
|---|
| 49 | *{"${class}::${field}_set"} = sub { |
|---|
| 50 | local $DB::sub = local *__ANON__ = "${class}::${field}_set" |
|---|
| 51 | if defined &DB::DB && !$Devel::DProf::VERSION; |
|---|
| 52 | $_[0]->{$field} = $_[1]; |
|---|
| 53 | }; |
|---|
| 54 | } |
|---|
| 55 | |
|---|
| 56 | $self; # for chaining |
|---|
| 57 | } |
|---|
| 58 | |
|---|
| 59 | |
|---|
| 60 | 1; |
|---|
| 61 | |
|---|
| 62 | |
|---|
| 63 | __END__ |
|---|
| 64 | |
|---|
| 65 | |
|---|
| 66 | |
|---|
| 67 | =head1 NAME |
|---|
| 68 | |
|---|
| 69 | Class::Scaffold::Accessor - large-scale OOP application support |
|---|
| 70 | |
|---|
| 71 | =head1 SYNOPSIS |
|---|
| 72 | |
|---|
| 73 | Class::Scaffold::Accessor->new; |
|---|
| 74 | |
|---|
| 75 | =head1 DESCRIPTION |
|---|
| 76 | |
|---|
| 77 | =head1 METHODS |
|---|
| 78 | |
|---|
| 79 | =over 4 |
|---|
| 80 | |
|---|
| 81 | |
|---|
| 82 | |
|---|
| 83 | =back |
|---|
| 84 | |
|---|
| 85 | Class::Scaffold::Accessor inherits from L<Class::Accessor::Complex>, |
|---|
| 86 | L<Class::Accessor::Constructor>, and L<Class::Accessor::FactoryTyped>. |
|---|
| 87 | |
|---|
| 88 | The superclass L<Class::Accessor::Complex> defines these methods and |
|---|
| 89 | functions: |
|---|
| 90 | |
|---|
| 91 | mk_abstract_accessors(), mk_array_accessors(), mk_boolean_accessors(), |
|---|
| 92 | mk_class_array_accessors(), mk_class_hash_accessors(), |
|---|
| 93 | mk_class_scalar_accessors(), mk_concat_accessors(), |
|---|
| 94 | mk_forward_accessors(), mk_hash_accessors(), mk_integer_accessors(), |
|---|
| 95 | mk_new(), mk_object_accessors(), mk_scalar_accessors(), |
|---|
| 96 | mk_set_accessors(), mk_singleton() |
|---|
| 97 | |
|---|
| 98 | The superclass L<Class::Accessor> defines these methods and functions: |
|---|
| 99 | |
|---|
| 100 | new(), _carp(), _croak(), _mk_accessors(), accessor_name_for(), |
|---|
| 101 | best_practice_accessor_name_for(), best_practice_mutator_name_for(), |
|---|
| 102 | follow_best_practice(), get(), make_accessor(), make_ro_accessor(), |
|---|
| 103 | make_wo_accessor(), mk_accessors(), mk_ro_accessors(), |
|---|
| 104 | mk_wo_accessors(), mutator_name_for(), set() |
|---|
| 105 | |
|---|
| 106 | The superclass L<Class::Accessor::Installer> defines these methods and |
|---|
| 107 | functions: |
|---|
| 108 | |
|---|
| 109 | install_accessor() |
|---|
| 110 | |
|---|
| 111 | The superclass L<Class::Accessor::Constructor> defines these methods and |
|---|
| 112 | functions: |
|---|
| 113 | |
|---|
| 114 | _make_constructor(), mk_constructor(), mk_constructor_with_dirty(), |
|---|
| 115 | mk_singleton_constructor() |
|---|
| 116 | |
|---|
| 117 | The superclass L<Data::Inherited> defines these methods and functions: |
|---|
| 118 | |
|---|
| 119 | every_hash(), every_list(), flush_every_cache_by_key() |
|---|
| 120 | |
|---|
| 121 | The superclass L<Class::Accessor::FactoryTyped> defines these methods and |
|---|
| 122 | functions: |
|---|
| 123 | |
|---|
| 124 | clear_factory_typed_accessors(), clear_factory_typed_array_accessors(), |
|---|
| 125 | count_factory_typed_accessors(), count_factory_typed_array_accessors(), |
|---|
| 126 | factory_typed_accessors(), factory_typed_accessors_clear(), |
|---|
| 127 | factory_typed_accessors_count(), factory_typed_accessors_index(), |
|---|
| 128 | factory_typed_accessors_pop(), factory_typed_accessors_push(), |
|---|
| 129 | factory_typed_accessors_set(), factory_typed_accessors_shift(), |
|---|
| 130 | factory_typed_accessors_splice(), factory_typed_accessors_unshift(), |
|---|
| 131 | factory_typed_array_accessors(), factory_typed_array_accessors_clear(), |
|---|
| 132 | factory_typed_array_accessors_count(), |
|---|
| 133 | factory_typed_array_accessors_index(), |
|---|
| 134 | factory_typed_array_accessors_pop(), |
|---|
| 135 | factory_typed_array_accessors_push(), |
|---|
| 136 | factory_typed_array_accessors_set(), |
|---|
| 137 | factory_typed_array_accessors_shift(), |
|---|
| 138 | factory_typed_array_accessors_splice(), |
|---|
| 139 | factory_typed_array_accessors_unshift(), |
|---|
| 140 | index_factory_typed_accessors(), index_factory_typed_array_accessors(), |
|---|
| 141 | mk_factory_typed_accessors(), mk_factory_typed_array_accessors(), |
|---|
| 142 | pop_factory_typed_accessors(), pop_factory_typed_array_accessors(), |
|---|
| 143 | push_factory_typed_accessors(), push_factory_typed_array_accessors(), |
|---|
| 144 | set_factory_typed_accessors(), set_factory_typed_array_accessors(), |
|---|
| 145 | shift_factory_typed_accessors(), shift_factory_typed_array_accessors(), |
|---|
| 146 | splice_factory_typed_accessors(), |
|---|
| 147 | splice_factory_typed_array_accessors(), |
|---|
| 148 | unshift_factory_typed_accessors(), |
|---|
| 149 | unshift_factory_typed_array_accessors() |
|---|
| 150 | |
|---|
| 151 | =head1 BUGS AND LIMITATIONS |
|---|
| 152 | |
|---|
| 153 | No bugs have been reported. |
|---|
| 154 | |
|---|
| 155 | Please report any bugs or feature requests through the web interface at |
|---|
| 156 | L<http://rt.cpan.org>. |
|---|
| 157 | |
|---|
| 158 | =head1 INSTALLATION |
|---|
| 159 | |
|---|
| 160 | See perlmodinstall for information and options on installing Perl modules. |
|---|
| 161 | |
|---|
| 162 | =head1 AVAILABILITY |
|---|
| 163 | |
|---|
| 164 | The latest version of this module is available from the Comprehensive Perl |
|---|
| 165 | Archive Network (CPAN). Visit <http://www.perl.com/CPAN/> to find a CPAN |
|---|
| 166 | site near you. Or see <http://www.perl.com/CPAN/authors/id/M/MA/MARCEL/>. |
|---|
| 167 | |
|---|
| 168 | =head1 AUTHORS |
|---|
| 169 | |
|---|
| 170 | Florian Helmberger C<< <fh@univie.ac.at> >> |
|---|
| 171 | |
|---|
| 172 | Achim Adam C<< <ac@univie.ac.at> >> |
|---|
| 173 | |
|---|
| 174 | Mark Hofstetter C<< <mh@univie.ac.at> >> |
|---|
| 175 | |
|---|
| 176 | Heinz Ekker C<< <ek@univie.ac.at> >> |
|---|
| 177 | |
|---|
| 178 | Marcel GrE<uuml>nauer, C<< <marcel@cpan.org> >> |
|---|
| 179 | |
|---|
| 180 | =head1 COPYRIGHT AND LICENSE |
|---|
| 181 | |
|---|
| 182 | Copyright 2004-2008 by the authors. |
|---|
| 183 | |
|---|
| 184 | This library is free software; you can redistribute it and/or modify |
|---|
| 185 | it under the same terms as Perl itself. |
|---|
| 186 | |
|---|
| 187 | |
|---|
| 188 | =cut |
|---|
| 189 | |
|---|