diff --git a/app.psgi b/app.psgi index f420741..1182243 100755 --- a/app.psgi +++ b/app.psgi @@ -11,10 +11,10 @@ my $router = router { to { controller => 'ParlAPI::Parliaments', action => 'show' }; # Members - match '/parliaments/{parliament}-{session}/members' => - to { controller => 'ParlAPI::Members', action => 'pretty_list' }; match '/parliaments/{parliament}-{session}/members.{format}' => to { controller => 'ParlAPI::Members', action => 'pretty_list' }; + match '/parliaments/{parliament}-{session}/members' => + to { controller => 'ParlAPI::Members', action => 'pretty_list' }; match '/parliaments/{parliament}-{session}/members/{member}.{format}' => to { controller => 'ParlAPI::Members', action => 'show_member' }; match '/parliaments/{parliament}-{session}/members/{member}' => @@ -25,6 +25,8 @@ my $router = router { to { controller => 'ParlAPI::Members', action => 'show_member' }; # Bills + match '/parliaments/{parliament}-{session}/bills.{format}' => + to { controller => 'ParlAPI::Bills', action => 'pretty_list' }; match '/parliaments/{parliament}-{session}/bills' => to { controller => 'ParlAPI::Bills', action => 'pretty_list' }; match '/parliaments/{parliament}-{session}/bills/{billname}' => diff --git a/lib/ParlAPI/Bills.pm b/lib/ParlAPI/Bills.pm index e27acbb..bf3287f 100644 --- a/lib/ParlAPI/Bills.pm +++ b/lib/ParlAPI/Bills.pm @@ -13,6 +13,17 @@ sub pretty_list { return $self->render('unknown_parliament.html', $params) unless $parl; my $bills = $self->model->bills($parl); + if (my $format = $params->{format} || '') { + if ($format eq 'json') { + return $self->render_json( [ map { $_->to_hash } @$bills ] ); + } + elsif ($format =~ m/^te?xt$/) { + return $self->render_text(join "\n", map { $_->name } @$bills); + } + else { + return $self->unknown_format($format); + } + } return $self->render('bills.html', { diff --git a/lib/ParlAPI/Model/Bill.pm b/lib/ParlAPI/Model/Bill.pm index fdce6a7..c489441 100644 --- a/lib/ParlAPI/Model/Bill.pm +++ b/lib/ParlAPI/Model/Bill.pm @@ -23,6 +23,15 @@ around 'All' => sub { return $orig->(@_, order_by => 'bill_id'); }; +sub to_hash { + my $self = shift; + return { + parliament => $self->parliament->to_hash, + links => $self->links, + map { $_ => $self->$_ } qw/name sponsor_id sponsor_title summary official_url/ + }; +} + sub _build_sponsor { my $self = shift; return ParlAPI::Model->get_member($self->sponsor_id); diff --git a/lib/ParlAPI/Model/Parliament.pm b/lib/ParlAPI/Model/Parliament.pm index 4532c16..1f90b7a 100644 --- a/lib/ParlAPI/Model/Parliament.pm +++ b/lib/ParlAPI/Model/Parliament.pm @@ -24,6 +24,8 @@ sub BUILDARGS { return $args; } +sub to_hash { shift->hash_repr } + sub _build_name { my $self = shift; return _add_postfix($self->parliament) . " Parliament, " @@ -44,7 +46,7 @@ sub _build_hash_repr { my $self = shift; return { map { $_ => $self->$_ } - qw/id name parliament session start_date end_date/ + qw/parl_id name parliament session start_date end_date url short_name/ }; }