Document.pm.bak 1.3 KB

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