root/tags/release-0.7.17/plagger/lib/Plagger/Thing.pm

Revision 1741 (checked in by miyagawa, 5 years ago)

merge from hackathon-summary

  • Property svn:keywords set to Id Revision
Line 
1 package Plagger::Thing;
2 use strict;
3 use base qw( Class::Accessor::Fast );
4
5 use Plagger::Text;
6 use Scalar::Util qw(blessed);
7
8 sub has_tag {
9     my($self, $want_tag) = @_;
10     for my $tag (@{$self->tags}) {
11         return 1 if $tag eq $want_tag;
12     }
13     return 0;
14 }
15
16 sub add_tag {
17     my($self, $tag) = @_;
18     push @{$self->tags}, $tag
19         unless $self->has_tag($tag);
20 }
21
22 sub clone {
23     my $self = shift;
24     my $clone = Storable::dclone($self);
25     $clone;
26 }
27
28 sub mk_date_accessors {
29     my $class = shift;
30
31     for my $key (@_) {
32         no strict 'refs';
33         *{"$class\::$key"} = sub {
34             my $obj = shift;
35             if (@_) {
36                 my $date = $_[0];
37                 unless (ref($date)) {
38                     $date = Plagger::Date->parse_dwim($date);
39                 }
40                 $obj->{$key} = $date;
41             } else {
42                 return $obj->{$key};
43             }
44         };
45     }
46 }
47
48 sub mk_text_accessors {
49     my $class = shift;
50     for my $key (@_) {
51         no strict 'refs';
52         *{"$class\::$key"} = sub {
53             my $obj = shift;
54             if (@_) {
55                 my $text = $_[0];
56                 unless ( blessed($text) && $text->isa('Plagger::Text') ) {
57                     $text = Plagger::Text->new_from_text($text);
58                 }
59                 $obj->{$key} = $text;
60             } else {
61                 return $obj->{$key};
62             }
63         };
64     }
65 }
66
67 1;
Note: See TracBrowser for help on using the browser.