diff --git a/Changes b/Changes
index a755c03..19f8bd8 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,9 @@
Revision history for Business-Mondo
+0.06 2015-08-21
+ - live API test is absorbed into emulated test so can run the same
+ test against both live and emulated endpoints
+
0.05 2015-07-22
- Use Any type for Booleans as some test failures with Bool related
to incorrect coercion (?) of JSON::PP boolean types (GH #4)
diff --git a/MANIFEST b/MANIFEST
index 67073d5..86650c5 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -3,6 +3,7 @@ Makefile.PL
MANIFEST
README.md
end_to_end_emulated.sh
+bin/mondojo
lib/Business/Mondo.pm
lib/Business/Mondo/Account.pm
lib/Business/Mondo/Address.pm
diff --git a/Makefile.PL b/Makefile.PL
index d039d94..6c899a2 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -21,6 +21,7 @@ WriteMakefile(
'Data::Currency' => 0.06000,
'DateTime' => 1.26,
'DateTime::Format::DateParse' => 0.05,
+ 'Locale::Currency::Format' => 1.35,
},
TEST_REQUIRES => {
'Test::Most' => 0.31,
diff --git a/README.md b/README.md
index 420bc41..9f1e2b7 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ Business::Mondo - Perl library for interacting with the Mondo API
# VERSION
-0.05
+0.06
# DESCRIPTION
diff --git a/bin/mondojo b/bin/mondojo
new file mode 100644
index 0000000..4f090a1
--- /dev/null
+++ b/bin/mondojo
@@ -0,0 +1,110 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Mojolicious::Lite;
+use Business::Mondo;
+use Business::Mondo::Transaction;
+use HTML::GoogleMaps::V3;
+use Mojo::JSON qw/ decode_json /;
+use File::Slurper qw/ read_text /;
+
+$ENV{MOJO_LOG_LEVEL} = 'debug';
+
+get '/' => sub {
+ my ( $c ) = @_;
+
+ return $c->render( json => [
+ map { { $_->to_hash } } _get_transactions()
+ ] );
+};
+
+get '/map' => sub {
+ my ( $c ) = @_;
+
+ my $map = HTML::GoogleMaps::V3->new( zoom => 8 );
+ my @transactions = _get_transactions();
+
+ foreach my $t ( @transactions ) {
+ if ( my $m = $t->merchant ) {
+ if ( my $addr = $m->address ) {
+ $map->add_marker(
+ point => [ $addr->longitude,$addr->latitude ]
+ );
+
+ # center around most recent transaction
+ $map->center( [ $addr->longitude,$addr->latitude ] );
+ }
+ }
+ }
+
+ my ( $head,$map_div ) = $map->onload_render;
+
+ $c->render(
+ template => 'map',
+ head => $head,
+ map => $map_div,
+ transactions => [ (reverse(@transactions))[0..7] ],
+ );
+};
+
+app->start;
+
+sub _get_transactions {
+
+ my @transactions;
+
+ if ( $ENV{MONDOJO_TOKEN} && $ENV{MONDOJO_ACCOUNT_ID} ) {
+
+ my $mondo = Business::Mondo->new( token => $ENV{MONDOJO_TOKEN} );
+ @transactions = $mondo->transactions( account_id => $ENV{MONDOJO_ACCOUNT_ID} );
+
+ } elsif ( my $file = $ENV{MONDOJO_TEST_FILE} ) {
+ my $data = decode_json( Encode::encode( 'UTF-8',read_text( $file ) ) );
+
+ foreach my $e ( @{ $data->{transactions} // [] } ) {
+ push( @transactions,Business::Mondo::Transaction->new(
+ %{ $e },
+ client => Business::Mondo->new->client,
+ ) );
+ }
+
+ }
+
+ return @transactions;
+}
+
+__DATA__
+@@ map.css.ep
+
+@@ map.html.ep
+
+
+
+
+
+ <%== $head %>
+
+
+
+ <%== $map %>
+
+ <% foreach my $transaction ( @{ $transactions } ) { %>
+
+ <%= $transaction->merchant->emoji if $transaction->merchant %> /
+ <%= Encode::decode( 'UTF-8',$transaction->currency ) %> /
+ <%= Encode::decode( 'UTF-8',$transaction->local_currency ) %> /
+ <%= $transaction->created %> /
+ <%= $transaction->merchant->name if $transaction->merchant %>
+
+ <% } %>
+
+
+
+
+
+@@ marker.html.ep
+
+ <%== $merchant->name %>
+
diff --git a/lib/Business/Mondo.pm b/lib/Business/Mondo.pm
index 9f9de8d..d47814f 100644
--- a/lib/Business/Mondo.pm
+++ b/lib/Business/Mondo.pm
@@ -11,7 +11,7 @@ Business::Mondo - Perl library for interacting with the Mondo API
=head1 VERSION
-0.05
+0.06
=head1 DESCRIPTION
@@ -214,7 +214,7 @@ sub transactions {
return Business::Mondo::Account->new(
client => $self->client,
id => $params{account_id},
- )->transactions;
+ )->transactions( 'expand[]' => 'merchant' );
}
=head2 balance
diff --git a/lib/Business/Mondo/Currency.pm b/lib/Business/Mondo/Currency.pm
index d83cb85..abb98d2 100644
--- a/lib/Business/Mondo/Currency.pm
+++ b/lib/Business/Mondo/Currency.pm
@@ -26,6 +26,7 @@ has [ qw/ currency local_currency / ] => (
return undef if ! $args;
if ( ! ref( $args ) ) {
+
$args = Data::Currency->new({
code => $args,
});
diff --git a/lib/Business/Mondo/Resource.pm b/lib/Business/Mondo/Resource.pm
index 3c5bbf7..f9d75b6 100644
--- a/lib/Business/Mondo/Resource.pm
+++ b/lib/Business/Mondo/Resource.pm
@@ -80,8 +80,10 @@ sub to_hash {
delete( $hash{client} );
- if ( blessed( $hash{currency} ) ) {
- $hash{currency} = $hash{currency}->code;
+ foreach my $currency_key ( qw/ currency local_currency / ) {
+ if ( blessed( $hash{$currency_key} ) ) {
+ $hash{$currency_key} = $hash{$currency_key}->code;
+ }
}
foreach my $k ( keys %hash ) {
@@ -89,7 +91,7 @@ sub to_hash {
$hash{$k} = $hash{$k}->iso8601;
} elsif ( my $blessed = blessed( $hash{$k} ) ) {
next if $blessed =~ /Boolean/;
- $hash{$k} = $hash{$k}->to_hash;
+ $hash{$k} = { $hash{$k}->to_hash };
}
}
diff --git a/lib/Business/Mondo/Transaction.pm b/lib/Business/Mondo/Transaction.pm
index ba811b6..885df97 100644
--- a/lib/Business/Mondo/Transaction.pm
+++ b/lib/Business/Mondo/Transaction.pm
@@ -22,6 +22,7 @@ use Types::Standard qw/ :all /;
use Business::Mondo::Merchant;
use Business::Mondo::Attachment;
use DateTime::Format::DateParse;
+use Locale::Currency::Format;
=head1 ATTRIBUTES
@@ -186,6 +187,23 @@ sub annotations {
return shift->metadata;
}
+sub BUILD {
+ my ( $self,$args ) = @_;
+
+ foreach my $c ( 'local_','' ) {
+
+ my $amount_accessor = "${c}amount";
+ my $currency_accessor = "${c}currency";
+
+ if ( my $amount = $self->$amount_accessor ) {
+ my $decimal_precision = decimal_precision( $self->$currency_accessor->code );
+ my $value = $amount / ( 10 ** $decimal_precision );
+ $self->$currency_accessor->value( $value );
+ }
+ }
+
+};
+
=head1 SEE ALSO
L
diff --git a/lib/Business/Mondo/Version.pm b/lib/Business/Mondo/Version.pm
index 6723e41..b6faf1a 100644
--- a/lib/Business/Mondo/Version.pm
+++ b/lib/Business/Mondo/Version.pm
@@ -15,7 +15,7 @@ use warnings;
use Moo::Role;
-$Business::Mondo::VERSION = '0.05';
+$Business::Mondo::VERSION = '0.06';
$Business::Mondo::API_VERSION = 'v1';
$Business::Mondo::API_URL = 'https://api.getmondo.co.uk';