NAME Catalyst::View::Vega - A Catalyst view for pre-processing Vega specs SYNOPSIS # In YourApplication.pm # YourApplication->inject_component( 'View::Vega' => { from_component => 'Catalyst::View::Vega' } ); YourApplication->config( 'View::Vega' => { path => YourApplication->path_to("root/vega")->stringify, } ); # In a controller action # my $vega = $c->view('Vega'); $vega->specfile('patient-chart.json'); $vega->bind_data({ "patient" => [{ id => $patient->id, name => $patient->name, }], "medications" => [ $meds->all ], "samples" => [ $samples->all ], }); $c->detach($vega); DESCRIPTION This class lets you bind data to the datasets declared in a Vega spec and output the spec with the bound data inlined. This is useful for inlining data dynamically without using a templating library. Inlining data reduces request overhead and creates standalone Vega specs which can be rendered as easily offline as they are online. A new instance of this view is created for each request, so it is safe to set attributes and use the view's API in multiple controllers or actions. Each new view instance is based on the application's global instance of the view so that initial attribute values are from your application config. ATTRIBUTES json Read-only. Object with encode and decode methods for reading and writing JSON. Defaults to: JSON::MaybeXS->new->utf8->convert_blessed->canonical->pretty You can either set this at application start time via "config" in Catalyst: YourApplication->config( 'View::Vega' => { json => ... } ); or pass it in during the request-specific object construction: my $vega = $c->view("Vega", json => ...); path Read-only. Filesystem path under which "specfile"s are located. Usually set by your application's config file or via "config" in Catalyst, e.g.: YourApplication->config( 'View::Vega' => { path => YourApplication->path_to("root/vega")->stringify, } ); specfile Read-write. A file relative to "path" which contains the Vega spec to process. Usually set in your controller's actions. METHODS bind_data Takes a hashref or list of key-value pairs and merges them into the view object's dataset bindings. Keys should be dataset names which match those in the Vega "specfile". Any existing binding in this view for a given dataset name is overwritten. Values may be either references or strings. References are serialized and inlined as the values dataset property. Strings are serialized as the url property, which allows you to dynamically reference external datasets. See Vega's documentation on dataset properties for more details on the properties themselves. Note that Vega expects the values property to be an array, although this view does not enforce that. Make sure your references are arrayrefs or objects that serialize to an arrayref. Returns nothing. unbind_data Takes a dataset name as the sole argument and deletes any data bound in the view object for that dataset. Returns the now unbound data, if any. process_spec Returns the Vega specification as a Perl data structure, with bound data inlined into the spec. process Sets up up a JSON response using the results of "process_spec". You should usually call this implicitly via "detach" in Catalyst using the idiom: my $vega = $c->view("Vega"); ... $c->detach($vega); This is the most "viewish" part of this class. AUTHOR Thomas Sibley THANKS Thanks to Evan Silberman for suggesting dynamic inlining of datasets. COPYRIGHT Copyright 2016- by the University of Washington LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. SEE ALSO Vega data specs Vega documentation Vega