root/lang/perl/Class-Scaffold/trunk/lib/Class/Scaffold/Accessor.pm @ 16548

Revision 16548, 5.3 kB (checked in by hanekomu, 5 years ago)

set module versions to latest Changes version

Line 
1package Class::Scaffold::Accessor;
2
3use warnings;
4use strict;
5use Error::Hierarchy::Util 'assert_read_only';
6use Class::Scaffold::Factory::Type;
7
8
9our $VERSION = '0.06';
10
11
12use base qw(
13    Class::Accessor::Complex
14    Class::Accessor::Constructor
15    Class::Accessor::FactoryTyped
16);
17
18
19sub mk_framework_object_accessors {
20    my ($self, @args) = @_;
21    $self->mk_factory_typed_accessors(
22        'Class::Scaffold::Factory::Type', @args);
23}
24
25
26sub 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
33sub 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
601;
61
62
63__END__
64
65
66
67=head1 NAME
68
69Class::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
85Class::Scaffold::Accessor inherits from L<Class::Accessor::Complex>,
86L<Class::Accessor::Constructor>, and L<Class::Accessor::FactoryTyped>.
87
88The superclass L<Class::Accessor::Complex> defines these methods and
89functions:
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
98The 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
106The superclass L<Class::Accessor::Installer> defines these methods and
107functions:
108
109    install_accessor()
110
111The superclass L<Class::Accessor::Constructor> defines these methods and
112functions:
113
114    _make_constructor(), mk_constructor(), mk_constructor_with_dirty(),
115    mk_singleton_constructor()
116
117The superclass L<Data::Inherited> defines these methods and functions:
118
119    every_hash(), every_list(), flush_every_cache_by_key()
120
121The superclass L<Class::Accessor::FactoryTyped> defines these methods and
122functions:
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
153No bugs have been reported.
154
155Please report any bugs or feature requests through the web interface at
156L<http://rt.cpan.org>.
157
158=head1 INSTALLATION
159
160See perlmodinstall for information and options on installing Perl modules.
161
162=head1 AVAILABILITY
163
164The latest version of this module is available from the Comprehensive Perl
165Archive Network (CPAN). Visit <http://www.perl.com/CPAN/> to find a CPAN
166site near you. Or see <http://www.perl.com/CPAN/authors/id/M/MA/MARCEL/>.
167
168=head1 AUTHORS
169
170Florian Helmberger C<< <fh@univie.ac.at> >>
171
172Achim Adam C<< <ac@univie.ac.at> >>
173
174Mark Hofstetter C<< <mh@univie.ac.at> >>
175
176Heinz Ekker C<< <ek@univie.ac.at> >>
177
178Marcel GrE<uuml>nauer, C<< <marcel@cpan.org> >>
179
180=head1 COPYRIGHT AND LICENSE
181
182Copyright 2004-2008 by the authors.
183
184This library is free software; you can redistribute it and/or modify
185it under the same terms as Perl itself.
186
187
188=cut
189
Note: See TracBrowser for help on using the browser.