Commit | Line | Data |
51a3b106 |
1 | package Method::Generate::Accessor; |
2 | |
3 | use strictures 1; |
4 | use Class::Tiny::_Utils; |
5 | use base qw(Class::Tiny::Object); |
6 | use Sub::Quote; |
7 | use B 'perlstring'; |
8 | |
9 | sub generate_methods { |
10 | my ($self, $into, $name, $spec) = @_; |
11 | die "Must have an is" unless my $is = $spec->{is}; |
12 | my $name_str = perlstring $name; |
13 | my $body = do { |
14 | if ($is eq 'ro') { |
15 | ' '.$self->_generate_get($name_str) |
16 | } elsif ($is eq 'rw') { |
17 | ' '.$self->_generate_getset($name_str) |
18 | } else { |
19 | die "Unknown is ${is}"; |
20 | } |
21 | }; |
22 | quote_sub "${into}::${name}" => $body; |
23 | } |
24 | |
25 | sub _generate_get { |
26 | my ($self, $name_str) = @_; |
27 | "\$_[0]->{${name_str}}"; |
28 | } |
29 | |
30 | sub _generate_set { |
31 | my ($self, $name_str, $value) = @_; |
32 | "\$_[0]->{${name_str}} = ${value}"; |
33 | } |
34 | |
35 | sub _generate_getset { |
36 | my ($self, $name_str) = @_; |
37 | q{(@_ > 1 ? }.$self->_generate_set($name_str, q{$_[1]}) |
38 | .' : '.$self->_generate_get($name_str).')'; |
39 | } |
40 | |
41 | 1; |