package Padre::Command;

# Padre launches commands on the local operating system in a wide
# variety of different ways, and via different execution channels.
# This class provides a generic abstraction of a command, so that
# commands can be built up in a similar way across all channels, and
# the same command can be run in a variety of different ways if needed.

use 5.008005;
use strict;
use warnings;

our $VERSION = '1.00';

use Class::XSAccessor {
	getters => {

		# The fully resolved path to the program to execute
		program => 'program',

		# Parameters to the command as an ARRAY reference
		parameters => 'parameters',

		# Where to set the directory when starting the command
		directory => 'directory',

		# Differences to the environment while running the command
		environment => 'environment',

		# Should the command be run in a visible shell
		visible => 'visible',
	},
};





######################################################################
# Constructor and Accessors

# NOTE: Currently, this does no validation
sub new {
	my $class = shift;
	my $self = bless {@_}, $class;

	# Defaults
	unless ( defined $self->{parameters} ) {
		$self->{parameters} = [];
	}
	unless ( defined $self->{directory} ) {
		require File::HomeDir;
		$self->{directory} = File::HomeDir->my_home;
	}
	unless ( defined $self->{environment} ) {
		$self->{environment} = {};
	}
	unless ( defined $self->{visible} ) {
		$self->{visible} = 0;
	}

	return $self;
}

1;

# Copyright 2008-2013 The Padre development team as listed in Padre.pm.
# LICENSE
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl 5 itself.