The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

=pod
=head1 NAME
Perl::Dist::WiX::Fragment::Environment - A <Fragment> tag with environment variable handling.
=head1 VERSION
This document describes Perl::Dist::WiX::Fragment::Environment version 1.500.
=head1 SYNOPSIS
my $fragment = Perl::Dist::WiX::Fragment::Environment->new(
id => 'Environment',
);
# If there is only one parameter, it is considered to be the id.
my $fragment2 = Perl::Dist::WiX::Fragment::Environment->new('Environment');
$fragment->add_entry(
id => "Env_STRAWBERRY",
name => 'STRAWBERRY',
value => '1',
action => 'set',
part => 'all',
);
my $count = $fragment->get_entries_count();
=head1 DESCRIPTION
This module implements the fragment that adds, deletes, and appends
the environment variables required in a distribution.
=cut
use 5.010;
use Moose;
our $VERSION = '1.500';
$VERSION =~ s/_//ms;
=head1 METHODS
This class inherits from L<WiX3::XML::Fragment|WiX3::XML::Fragment>
and shares its API.
=head2 new
The C<new> constructor takes a series of parameters, validates then
and returns a new C<Perl::Dist::WiX::Fragment::Environment> object.
It inherits all the parameters described in the
L<< WiX3::XML::Fragment->new()|WiX3::XML::Fragment/new >>
method documentation.
If C<new> has only one parameter, it is considered the ID to use for
the fragment.
=cut
# _component is the (one) component that this fragment contains.
# It's easiest just to keep track of it as an attribute
# than to have to search for it each time.
has _component => (
is => 'bare',
isa => 'WiX3::XML::Component',
reader => '_get_component',
required => 1,
);
sub BUILDARGS {
my $class = shift;
my %args;
# Process the arguments.
## no critic(CascadingIfElse)
if ( @_ == 1 && !ref $_[0] ) {
$args{'id'} = $_[0];
} elsif ( 0 == @_ ) {
$args{'id'} = 'Environment';
} elsif ( @_ == 1 && 'HASH' eq ref $_[0] ) {
%args = %{ $_[0] };
} elsif ( 0 == @_ % 2 ) {
%args = (@_);
} else {
PDWiX->throw(
'Parameters incorrect (not a hashref, hash, or id) for ::Fragment::Environment'
);
}
# Default the ID to 'Environment'.
my $id;
if ( not exists $args{'id'} ) {
$id = 'Environment';
} else {
$id = $args{'id'};
}
# Create the component and attach it to this fragment.
my $tag1 = WiX3::XML::Component->new( id => $id );
return {
id => $id,
_component => $tag1,
};
} ## end sub BUILDARGS
sub BUILD {
my $self = shift;
# Add the component to a reference to the root directory.
my $tag2 =
WiX3::XML::DirectoryRef->new( directory_object =>
Perl::Dist::WiX::DirectoryTree->instance()->get_root(), );
$tag2->add_child_tag( $self->_get_component() );
# Add the root directory as a child of this fragment.
$self->add_child_tag($tag2);
$self->trace_line( 3, "Creating environment fragment.\n" );
return;
} ## end sub BUILD
=head2 add_entry
$fragment_tag = $fragment_tag->add_entry(...);
The C<add_entry> method creates an <Environment> tag (a
L<WiX3::XML::Environment|WiX3::XML::Environment> object) and adds it
as a child of the component this fragment contains.
It takes all parameters that
L<< WiX3::XML::Environment->new()|WiX3::XML::Environment/new >>
takes.
=cut
sub add_entry {
my $self = shift;
$self->_get_component()
->add_child_tag( WiX3::XML::Environment->new(@_) );
return $self;
}
=head2 get_entries_count
$count = $fragment_tag->get_entries_count();
The C<get_entries_count> method returns the number of <Environment> tags
that this fragment contains.
=cut
sub get_entries_count {
my $self = shift;
return $self->_get_component()->count_child_tags();
}
# The fragment is already generated. No need to regenerate.
sub _regenerate { ## no critic(ProhibitUnusedPrivateSubroutines)
return;
}
# No duplicates will be here to check.
sub _check_duplicates { ## no critic(ProhibitUnusedPrivateSubroutines)
return;
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
__END__
=head1 SUPPORT
Bugs should be reported via the CPAN bug tracker at
For other issues, contact the author.
=head1 AUTHOR
Curtis Jewell E<lt>csjewell@cpan.orgE<gt>
=head1 SEE ALSO
L<Perl::Dist::WiX|Perl::Dist::WiX>
=head1 COPYRIGHT
Copyright 2009 - 2010 Curtis Jewell.
This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the
LICENSE file included with this module.
=cut