NAME

Data::JavaScript::LiteObject - lightweight data dumping to JavaScript

SYNOPSIS

use Data::JavaScript:LiteObject;

%A = (protein      => 'bacon',
      condiments   => 'mayonaise',
      produce      => [qw(lettuce tomato)]);
%B = (protein      => 'peanut butter',
      condiments   => 'jelly');
@lunch             = (\%A, \%B);
%lunch             = (BLT=>\%A, PBnJ=>\%B);

jsodump(protoName  => "sandwich",
        dataRef    => \%lunch
        attributes => [qw(condiments protein produce)]);

DESCRIPTION

This module was inspired by Data::JavaScript, which while incredibly versatile, seems rather brute force and inelegant for certain forms of data. Specifically a series of objects of the same class, which it seems is a likely use for this kind of feature. So this module was created to provide a lightweight means of producing configurable, clean and compact output.

LiteObject is used to format and output loh, hoh, lohol, and hohol. One function, jsodump, is exported. jsodump accepts a list of named parameters; two of these are required and the rest are optional.

Required parameters

protoName

The name to be used for the prototype object function.

dataRef

A reference to an array of hashes(loh) or hash of hashes(hoh) to dump.

Optional parameters

attributes

A reference to an array containing a list of the object attributes (hash keys). This is useful if every object is not guaranteed to posses a value for each attribute. It could also be used to exclude data from being dumped.

explode

A scalar, if true output is one attribute per line. The default; false; is one object per line.

lineIN

A scalar, if true output is numbered every 5 lines. The value provided should be the number of lines printed before this output. For example if a CGI script included:

    print q(<html>
	    <head>
	    <title>Pthbb!!</title>
	    <script language=javascript>);>
    jsodump(protoName  => "sandwich",
            dataRef    => \@lunch,
            lineIN     => 4);

The client would see:

<html>
<head>
<title>Pthbb!!</title>
<script language=javascript>
// 5
function sandwich (condiment, produce, protein) {
        this.condiment = condiment; this.produce = produce; this.protein = protein; }
BLT = new sandwich('mayonaise', new Array('lettuce','tomato'), 'bacon' );
PBnJ = new sandwich('jelly', '', 'peanut butter' );
// 10

making it easier to read and/or debug.

lineOUT

A reference to a scalar. jsodump will set the scalar's value to the number of the last line of numbered output produced when lineIN is specified. Thus you may pass the scalar to a subsequent call to jsodump as the value of lineIn for continuous numbering. For example:

jsodump(protoName  => "sandwich",
          dataRef  => \@lunch,
          lineIN   => 4,
          lineOUT  => \$.);
jsodump(protoName  => "sandwich",
          dataRef  => \%lunch,
          lineIN   => $.);
listObjects

A scalar, if true the parameters value is used as the name of an array to be output which will contain a list of all the dumped object. This allows data-ignorant client side code which need only traverse the named array.

jsodump(protoName  => "sandwich",
        dataRef    => \@lunch,
        listObjects=> "sandwiches");

would append the following to the output

sandwiches = new Array('BLT', 'PBnJ');

BUGS

Nothing that am I aware of.

SEE ALSO

Data::JavaScript, Data::Dumper

AUTHOR

Jerrad Pierce jpierce@cpan.org, webmaster@pthbb.org. http://pthbb.org/