Finance::Wesabe::Utils - Utility methods for Finance::Wesabe


Finance-Wesabe documentation Contained in the Finance-Wesabe distribution.

Index


Code Index:

NAME

Top

Finance::Wesabe::Utils - Utility methods for Finance::Wesabe

DESCRIPTION

Top

This module is a collection of utility methods for accessing particular aspects of the structure returned from an HTTP response.

METHODS

Top

mk_simple_field( @fields )

Acceses a top-level hash element.

mk_deep_field( @fields )

Acceses data stored in a field with a content sub-key.

mk_simple_date_field( @fields )

Acceses a top-level hash element and creates a DateTime object.

mk_deep_date_field( @fields )

Creates a DateTime object from data stored in a content sub key.

mk_field_map( %fields )

Similar to mk_simple_field, but uses a different accessor name.

mk_deep_field_map( %fields )

Similar to mk_deep_field, but uses a different accessor name.

AUTHOR

Top

Brian Cassidy <bricas@cpan.org>

COPYRIGHT AND LICENSE

Top


Finance-Wesabe documentation Contained in the Finance-Wesabe distribution.
package Finance::Wesabe::Utils;

use Moose;

extends 'Exporter';

our @EXPORT = qw( mk_simple_field mk_simple_date_field mk_deep_date_field mk_field_map mk_deep_field_map mk_deep_field );

use DateTime::Format::ISO8601;

sub mk_simple_field {
    my( $package, @fields ) = @_;

    for my $field ( @fields ) {
        ( my $sub = $field ) =~ s{-}{_};

        no strict 'refs';
        *{ "$package\::$sub" } = sub {
            return shift->content->{ $field };
        }
    }
}

sub mk_deep_field {
    my( $package, @fields ) = @_;

    for my $field ( @fields ) {
        ( my $sub = $field ) =~ s{-}{_};

        no strict 'refs';
        *{ "$package\::$sub" } = sub {
            return shift->content->{ $field }->{ content };
        }
    }
}

sub mk_simple_date_field {
    my( $package, @fields ) = @_;

    for my $field ( @fields ) {
        ( my $sub = $field ) =~ s{-}{_};

        no strict 'refs';
        *{ "$package\::$sub" } = sub {
            return DateTime::Format::ISO8601->parse_datetime( shift->content->{ $field } );
        }
    }
}

sub mk_deep_date_field {
    my( $package, @fields ) = @_;

    for my $field ( @fields ) {
        ( my $sub = $field ) =~ s{-}{_};

        no strict 'refs';
        *{ "$package\::$sub" } = sub {
            return DateTime::Format::ISO8601->parse_datetime( shift->content->{ $field }->{ content } );
        }
    }
}

sub mk_field_map {
    my( $package, %fields ) = @_;

    for my $field ( keys %fields ) {
        my $sub = $fields{ $field };

        no strict 'refs';
        *{ "$package\::$sub" } = sub {
            return shift->content->{ $field };
        }
    }
}

sub mk_deep_field_map {
    my( $package, %fields ) = @_;

    for my $field ( keys %fields ) {
        my $sub = $fields{ $field };

        no strict 'refs';
        *{ "$package\::$sub" } = sub {
            return shift->content->{ $field }->{ content };
        }
    }
}

no Moose;

__PACKAGE__->meta->make_immutable;

1;