package Any::Renderer::JavaScript::Anon; # $Id: Anon.pm,v 1.9 2006/08/21 08:30:24 johna Exp $ use strict; use vars qw($VERSION %Formats); use Data::JavaScript::Anon; $VERSION = sprintf"%d.%03d", q$Revision: 1.9 $ =~ /: (\d+)\.(\d+)/; %Formats = map {$_ => 1} @{available_formats()}; sub new { my ( $class, $format, $options ) = @_; die("The format '$format' isn't supported") unless($Formats{$format}); my $self = { 'format' => $format, 'options' => $options, }; bless $self, $class; return $self; } sub render { my ( $self, $data ) = @_; if ($self->{'format'} eq 'JSON') { TRACE ( "Rendering to JSON" ); DUMP ( $data ); return Data::JavaScript::Anon->anon_dump ( $data ); } else { TRACE ( "Rendering to Data::JavaScript::Anon" ); DUMP ( $data ); my $variable_name = $self->{ 'options' }->{ 'VariableName' } || 'script_output'; return Data::JavaScript::Anon->var_dump ( $variable_name, $data ); } } sub requires_template { return 0; } sub available_formats { return [ "JavaScript::Anon", "Javascript::Anon", "JSON" ]; } sub TRACE {} sub DUMP {} 1; =head1 NAME Any::Renderer::JavaScript::Anon - renders anonymous JavaScript data structure =head1 SYNOPSIS use Any::Renderer; my %options = ( 'VariableName' => 'myvariable' ); my $format = "JavaScript::Anon"; my $r = new Any::Renderer ( $format, \%options ); my $data_structure = [...]; # arbitrary structure code my $string = $r->render ( $data_structure ); You can get a list of all formats that this module handles using the following syntax: my $list_ref = Any::Renderer::JavaScript::Anon::available_formats (); Also, determine whether or not a format requires a template with requires_template: my $bool = Any::Renderer::JavaScript::Anon::requires_template ( $format ); =head1 DESCRIPTION Any::Renderer::JavaScript::Anon renders any Perl data structure passed to it as a JavaScript anonymous data structure. =head1 FORMATS =over 4 =item JavaScript::Anon (aka Javascript::Anon) A more compact equivalent to the JavaScript format, using anonymous structures in the assignment. perl -MAny::Renderer -e "print Any::Renderer->new('Javascript::Anon')->render({a => 1, b => [2,3]})" results in: var script_output = { a: 1, b: [ 2, 3 ] }; =item JSON Use the format 'JSON' to return completely anonymous data structures - i.e. with no leading "var script_output = " and no trailing ";" perl -MAny::Renderer -e "print Any::Renderer->new('JSON')->render({a => 1, b => [2,3]})" results in: { a: 1, b: [ 2, 3 ] } =back =head1 METHODS =over 4 =item $r = new Any::Renderer::JavaScript::Anon($format,\%options) See L for a description of valid values for C<$format>. See L for a description of valid C<%options>. =item $scalar = $r->render($data_structure) The main method. =item $bool = Any::Renderer::JavaScript::Anon::requires_template($format) False in this case. =item $list_ref = Any::Renderer::JavaScript::Anon::available_formats() See L for a list. =back =head1 OPTIONS =over 4 =item VariableName Name of the javascript variable that the new data structure is to be assigned to. Defaults to C. Does not apply when using C format. =back =head1 SEE ALSO L, L =head1 VERSION $Revision: 1.9 $ on $Date: 2006/08/21 08:30:24 $ by $Author: johna $ =head1 AUTHOR Matt Wilson Ematthew.wilson@bbc.co.ukE =head1 COPYRIGHT (c) BBC 2006. This program is free software; you can redistribute it and/or modify it under the GNU GPL. See the file COPYING in this distribution, or http://www.gnu.org/licenses/gpl.txt =cut