From 592fc6caed18f0eda9a372089c3b350d4dfd9f40 Mon Sep 17 00:00:00 2001 From: Magnus Holm Date: Fri, 19 Aug 2011 13:26:25 +0200 Subject: [PATCH] Implement terms response --- lib/SolarBeam/Response.pm | 16 ++++++++++++++-- t/fixtures/terms.json | 1 + t/response.t | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 t/fixtures/terms.json diff --git a/lib/SolarBeam/Response.pm b/lib/SolarBeam/Response.pm index 76128e2..8ff1456 100644 --- a/lib/SolarBeam/Response.pm +++ b/lib/SolarBeam/Response.pm @@ -16,6 +16,8 @@ has 'facet_fields'; has 'facet_dates'; has 'facet_ranges'; +has 'terms'; + has 'pager' => sub { Data::Page->new }; sub new { @@ -24,9 +26,10 @@ sub new { my $header = $data->{responseHeader}; my $res = $data->{response}; my $facets = $data->{facet_counts}; + my $terms = $data->{terms}; my $field; - if (!$header and !$res) { + if (!$header) { $self->status = 1; return $self; } @@ -42,8 +45,17 @@ sub new { for $field (keys %{$facets}) { $self->$field($facets->{$field}); } + + if ($terms) { + my $sane_terms = {}; + for $field (keys %{$terms}) { + my %values = @{$terms->{$field}}; + $sane_terms->{$field} = \%values; + } + $self->terms($sane_terms); + } - if ($self->ok) { + if ($self->ok && $res) { $self->pager->total_entries($self->numFound); } diff --git a/t/fixtures/terms.json b/t/fixtures/terms.json new file mode 100644 index 0000000..75aea62 --- /dev/null +++ b/t/fixtures/terms.json @@ -0,0 +1 @@ +{"responseHeader":{"status":0,"QTime":243},"terms":{"artifact.name":["oslo",2535,"oscar",846,"ostkar",485,"ostform",451,"ostformar",375,"oslobilder",251,"ostämplade",232,"osteform",178,"ost",158,"osram",148],"artifact.event.production.place":["oslo",169788,"oslo,",139952,"oslofjorden",1288,"oslofjorden,",884,"os",332,"osen",265,"osby",209,"oscarshall",201,"oscars",186,"osby,",143]}} \ No newline at end of file diff --git a/t/response.t b/t/response.t index 2cab12a..10326bb 100644 --- a/t/response.t +++ b/t/response.t @@ -29,4 +29,8 @@ ok($res->ok); ok($res->facet_fields); is(scalar @{$res->facet_fields->{'identifier.owner'}}, 168); +$res = SolarBeam::Response->new(fixture('terms')); +ok($res->ok); +ok($res->terms); +is(scalar keys %{$res->terms->{'artifact.name'}}, 10);