Alien-InteractiveBrokers

 view release on metacpan or  search on metacpan

lib/Alien/InteractiveBrokers.pm  view on Meta::CPAN

package Alien::InteractiveBrokers;
#
#   Alien::InteractiveBrokers - Provides config info for IB API files
#
#   Copyright (c) 2010-2012 Jason McManus
#
#   Full POD documentation after __END__
#

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} };
    }



( run in 0.539 second using v1.01-cache-2.11-cpan-64ef6c95b5d )