Alien-InteractiveBrokers
view release on metacpan or search on metacpan
lib/Alien/InteractiveBrokers.pm view on Meta::CPAN
use File::Spec::Functions qw( catdir catfile );
use Carp qw( croak confess );
use strict;
use warnings;
###
### Variables
###
use vars qw( @ISA @EXPORT_OK $VERSION $TRUE $FALSE );
BEGIN {
require Exporter;
@ISA = qw( Exporter );
@EXPORT_OK = qw( path includes classpath version );
$VERSION = '9.6602';
}
*TRUE = \1;
*FALSE = \0;
my $versions = {
'9.64' => {
desc => 'IB API 9.64',
url => 'http://www.interactivebrokers.com/download/twsapi_unixmac_964.jar',
},
'9.65' => {
desc => 'IB API 9.65',
url => 'http://www.interactivebrokers.com/download/twsapi_unixmac_965.jar',
},
'9.66' => {
desc => 'IB API 9.66',
url => 'http://www.interactivebrokers.com/download/twsapi_unixmac_966.jar',
},
'9.65' => {
desc => 'IB API 9.67 Beta',
url => 'http://www.interactivebrokers.com/download/twsapi_unixmac_967.jar',
},
};
my $DEF_API_VERSION = '9.66';
# Global cache; either points to object ref, or just used as is.
# XXX: This may explode upon multiple Alien::SWIG objects being created,
# but we'll worry about that if anyone ever needs to actually do that.
our $CACHE = {}; # our, for testing
###
### Constructor
###
sub new
{
my $class = shift;
# Set up a default object
my $self = {};
# Instantiate the object. sort of.
bless( $self, $class );
# Direct the global cache to us (see note above)
$CACHE = $self;
return( $self );
}
###
### Methods
###
sub path
{
return( $CACHE->{path} )
if( exists( $CACHE->{path} ) );
my $base = $INC{ join( '/', 'Alien', 'InteractiveBrokers.pm' ) };
$base =~ s{\.pm$}{};
my $path = catfile( $base, 'IBJts' );
croak( "Path $path doesn't appear to contain the IB API installation;" .
" please re-install Alien::InteractiveBrokers." )
unless( -d $path );
$CACHE->{path} = $path;
return( $path );
}
sub includes
{
my @includes;
if( exists( $CACHE->{includes} ) )
{
@includes = @{ $CACHE->{includes} };
}
else
{
my $base = path();
for( qw( Shared PosixSocketClient ) )
{
my $incpath = catfile( $base, 'cpp', $_ );
croak( "Cannot find $_ include directory under $base; please" .
" re-install Alien::InteractiveBrokers" )
unless( -d $incpath );
push( @includes, '-I' . $incpath );
}
$CACHE->{includes} = \@includes;
}
return( wantarray
? @includes
: join( ' ', @includes ) );
}
sub classpath
{
lib/Alien/InteractiveBrokers.pm view on Meta::CPAN
__END__
=pod
=head1 NAME
Alien::InteractiveBrokers - Provides installation and config information for the InteractiveBrokers API
=head1 SYNOPSIS
use Alien::InteractiveBrokers;
my $IBAPI = Alien::InteractiveBrokers->new();
my $path = $IBAPI->path();
my $includes = $IBAPI->includes();
my $classpath = $IBAPI->classpath();
my $version = $IBAPI->version();
=head1 DESCRIPTION
This module automates the installation of the InteractiveBrokers API files
and source code, and provides accessor functions to describe its location,
include paths, etc.
It was developed in conjunction with L<Finance::InteractiveBrokers::SWIG>
and L<POE::Component::Client::InteractiveBrokers>, as a way of simplifying
distribution and installation of these needed files.
Please see L<Alien> for an explanation of the Alien namespace.
=head1 IB API VERSIONS
This module can install (downloading if necessary) and provide an interface for the following InteractiveBrokers API versions:
=over 4
=item B<9.64>
=item B<9.65>
=item B<9.66>
=item B<9.67>
=back
It currently comes bundled with IB API v9.66 (the latest production release).
=head1 CONSTRUCTOR
=head2 new()
my $IBAPI = Alien::InteractiveBrokers->new();
Create a new Alien::InteractiveBrokers object for querying the installed
configuration.
B<ARGUMENTS:> None.
B<RETURNS:> blessed C<$object>, or C<undef> on failure.
=head1 METHODS
=head2 path()
my $path = $IBAPI->path();
Get the base install path of the uncompressed IBJts directory.
B<ARGUMENTS:> None.
B<RETURNS:> Directory C<$name>, with no trailing path separator.
=head2 includes()
# As string
my $includes = $IBAPI->includes();
# As list
my @includes = $IBAPI->includes();
Get the required C<-I> include directives for compiling against this library.
B<ARGUMENTS:> None.
B<RETURNS:> Depending on context, returns a C<$scalar> containing all the paths joined with spaces, as C<-I/path>, or an C<@array> containing all the paths, as C<-I/path>, one-per-element.
=head2 classpath()
my $classpath = $IBAPI->classpath();
Get the Java C<CLASSPATH> value for the F<jtsclient.jar> file containing the
compiled com.ib.client classes.
B<ARGUMENTS:> None.
B<RETURNS:> Full path to F<jtsclient.jar>, ready for the environment.
=head2 version()
my $api_version = $IBAPI->version();
Get the version of the installed IB API.
(Not to be confused with L<Alien::InteractiveBrokers> C<$VERSION>, which is
this Perl wrapper's version number.)
B<ARGUMENTS:> None.
B<RETURNS:> IB API version number, as read from C<$path/API_VersionNum.txt>
=head1 EXPORTS
use Alien::InteractiveBrokers qw( path includes classpath version );
This module OPTIONALLY exports the following subs:
=over 4
=item * L</"path()">
( run in 2.775 seconds using v1.01-cache-2.11-cpan-9581c071862 )