Codebase list libmodule-cpanfile-perl / 71ad350
internal refactoring Tatsuhiko Miyagawa 6 years ago
4 changed file(s) with 27 addition(s) and 34 deletion(s). Raw diff Collapse all Expand all
137137 sub add_prereq {
138138 my($self, $type, $module, @args) = @_;
139139
140 $self->prereqs->add_prereq(
140 $self->prereqs->add(
141141 feature => $self->{feature},
142142 phase => $self->{phase},
143143 type => $type,
1111 sub module { $_[0]->{module} }
1212 sub requirement { $_[0]->{requirement} }
1313
14 sub match_feature {
15 my($self, $identifier) = @_;
16 no warnings 'uninitialized';
17 $self->feature eq $identifier;
18 }
19
2014 1;
1111 for my $phase (keys %$prereqs) {
1212 for my $type (keys %{ $prereqs->{$phase} }) {
1313 while (my($module, $requirement) = each %{ $prereqs->{$phase}{$type} }) {
14 $self->add_prereq(
14 $self->add(
1515 phase => $phase,
1616 type => $type,
1717 module => $module,
2727 sub new {
2828 my $class = shift;
2929 bless {
30 prereqs => [],
30 prereqs => {},
3131 features => {},
3232 }, $class;
3333 }
3737 $self->{features}{$identifier} = { description => $description };
3838 }
3939
40 sub add_prereq {
40 sub add {
4141 my($self, %args) = @_;
42 $self->add( Module::CPANfile::Prereq->new(%args) );
43 }
4442
45 sub add {
46 my($self, $prereq) = @_;
47 push @{$self->{prereqs}}, $prereq;
43 my $feature = $args{feature} || '';
44 push @{$self->{prereqs}{$feature}},
45 Module::CPANfile::Prereq->new(%args);
4846 }
4947
5048 sub as_cpan_meta {
5351 }
5452
5553 sub build_cpan_meta {
56 my($self, $identifier) = @_;
57
58 my $prereq_spec = {};
59 $self->prereq_each($identifier, sub {
60 my $prereq = shift;
61 $prereq_spec->{$prereq->phase}{$prereq->type}{$prereq->module} = $prereq->requirement->version;
62 });
63
64 CPAN::Meta::Prereqs->new($prereq_spec);
54 my($self, $feature) = @_;
55 CPAN::Meta::Prereqs->new($self->specs($feature));
6556 }
6657
67 sub prereq_each {
68 my($self, $identifier, $code) = @_;
58 sub specs {
59 my($self, $feature) = @_;
6960
70 for my $prereq (@{$self->{prereqs}}) {
71 next unless $prereq->match_feature($identifier);
72 $code->($prereq);
61 $feature = ''
62 unless defined $feature;
63
64 my $prereqs = $self->{prereqs}{$feature} || [];
65 my $specs = {};
66
67 for my $prereq (@$prereqs) {
68 $specs->{$prereq->phase}{$prereq->type}{$prereq->module} =
69 $prereq->requirement->version;
7370 }
71
72 return $specs;
7473 }
7574
7675 sub merged_requirements {
8786 sub find {
8887 my($self, $module) = @_;
8988
90 for my $prereq (@{$self->{prereqs}}) {
91 return $prereq if $prereq->module eq $module;
89 for my $feature ('', keys %{$self->{features}}) {
90 for my $prereq (@{$self->{prereqs}{$feature}}) {
91 return $prereq if $prereq->module eq $module;
92 }
9293 }
9394
9495 return;
100100 sub prereqs_with {
101101 my($self, @feature_identifiers) = @_;
102102
103 my $prereqs = $self->prereqs;
104103 my @others = map { $self->feature($_)->prereqs } @feature_identifiers;
105
106 $prereqs->with_merged_prereqs(\@others);
104 $self->prereqs->with_merged_prereqs(\@others);
107105 }
108106
109107 sub prereq_specs {