Release v0.7.0
[Fedora-Rebuild.git] / lib / Fedora / Rebuild / Set / Package.pm
blobcdd1909c2f9a99712ee0ccbe7a537149037b6223
1 package Fedora::Rebuild::Set::Package;
2 use strict;
3 use warnings;
4 use version 0.77; our $VERSION = version->declare("v0.7.0");
6 use Moose;
7 use Scalar::Util qw( blessed );
8 use namespace::clean;
11 has 'set' => (
12 is => 'ro',
13 isa => 'HashRef[Fedora::Rebuild::Package]',
14 default => sub { {} },
17 # Usage: $set->insert(F::R::Package)
18 sub insert {
19 my ($self, $package) = @_;
20 ${$self->set}{$package->name} = $package;
21 return $self;
24 # Accepts F::R::Package or name string
25 sub contains {
26 my ($self, $name) = @_;
27 if (!(defined $name)) { return 0; }
28 if (blessed $name) {
29 $name = $name->name;
31 return exists ${$self->set}{$name};
34 # Return number of packages in the set
35 sub size {
36 my $self = shift;
37 return scalar(keys %{$self->set});
40 # Return list of package names in the set
41 sub names {
42 my $self = shift;
43 return keys %{$self->set};
46 # Return list of packages in the set
47 sub packages {
48 my $self = shift;
49 return values %{$self->set};
52 # Stringify sorted list of package names as one string (separate by separator)
53 # Usage: $set->string(' ');
54 # or: $set->string; # Default separotor is a space
55 sub string {
56 my ($self, $separator) = @_;
57 if (!defined $separator) { $separator = ' '; }
58 return join($separator, sort($self->names));
61 # Return a package by F::R::Package or name string
62 # Return undef if it does not exist.
63 sub get {
64 my ($self, $name) = @_;
65 if (!(defined $name)) { return 0; }
66 if (blessed $name) {
67 $name = $name->name;
69 if (exists ${$self->set}{$name}) {
70 return ${$self->set}{$name}; }
71 else {
72 return undef;
77 # Remove a package by F::R::Package or name string
78 sub delete {
79 my ($self, $name) = @_;
80 if (!(defined $name)) { return 0; }
81 if (blessed $name) {
82 $name = $name->name;
84 if (exists ${$self->set}{$name}) {
85 delete ${$self->set}{$name};
87 return $self;