1package Scrappy::Project::Document;
2
3BEGIN {
4    $Scrappy::Project::Document::VERSION = '0.94112090';
5}
6
7use Moose::Role;
8
9has fields => (
10    is      => 'ro',
11    isa     => 'ArrayRef',
12    default => sub {
13        my $self = shift;
14
15        #die Data::Dumper::Dumper((shift->meta->get_all_methods)[1]);
16
17        my @fields = ();
18        for ($self->meta->get_all_methods) {
19            push @fields, $_->name
20              if $_->package_name eq ref $self
21                  && $_->name ne 'meta'
22                  && $_->name ne 'scraper'
23                  && $_->name ne 'fields'
24                  && $_->name ne 'parse'
25                  && $_->name ne 'records'
26                  && $_->name ne 'url';
27
28            ##### NOTE !!!!!! The list above must always contain a list
29            ##### of all attributes and function in this role
30        }
31
32        return [@fields];
33    }
34);
35
36has records => (
37    is      => 'rw',
38    isa     => 'ArrayRef',
39    default => sub { [] }
40);
41
42has scraper => (
43    is  => 'rw',
44    isa => 'Scrappy'
45);
46
47sub parse {
48    my ($self, $vars) = @_;
49
50    my $record = {};
51    map { $record->{$_} = $self->$_($self->scraper, $vars) } @{$self->fields};
52
53    # $record->{url} = $self->scraper->url->as_string;
54    push @{$self->records}, $record;
55
56    return $record;
57}
58
591;
60