GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
DBIx::Class::Helper::Row::ToJSON(3) User Contributed Perl Documentation DBIx::Class::Helper::Row::ToJSON(3)

DBIx::Class::Helper::Row::ToJSON - Remove the boilerplate from your TO_JSON functions

 package MyApp::Schema::Result::KittenRobot;

 use parent 'DBIx::Class::Core';

 __PACKAGE__->load_components(qw{Helper::Row::ToJSON});

 __PACKAGE__->table('KittenRobot');
 __PACKAGE__->add_columns(
    id => {
       data_type         => 'integer',
       is_auto_increment => 1,
    },
    kitten => {
       data_type         => 'integer',
    },
    robot => {
       data_type         => 'text',
       is_nullable       => 1,
    },
    your_mom => {
       data_type         => 'blob',
       is_nullable       => 1,
       is_serializable   => 1,
    },
 );

 1;

This helper adds a JSON method like the following:

 sub TO_JSON {
    return {
       id       => $self->id,
       kitten   => $self->kitten,
       # robot  => $self->robot,    # <-- doesn't serialize text columns
       your_mom => $self->your_mom, # <-- normally wouldn't but explicitly
                                    #     asked for in the column spec above
    }
 }

 $self->_is_column_serializable('kitten')

returns true if a column should be serializable or not. Currently this marks everything as serializable unless "is_serializable" is set to false, or "data_type" is a "blob", "text", or "ntext" columns. If you wanted to only have explicit serialization you might override this method to look like this:

 sub _is_column_serializable {
    my ( $self, $column ) = @_;

    my $info = $self->column_info($column);

    return defined $info->{is_serializable} && $info->{is_serializable};
 }

 $self->serializable_columns

simply returns a list of columns that TO_JSON should serialize.

 $self->TO_JSON

returns a hashref representing your object. Override this method to add data to the returned hashref:

 sub TO_JSON {
    my $self = shift;

    return {
       customer_name => $self->customer->name,
       %{ $self->next::method },
    }
 }

 $self->unserializable_data_types

Simply returns a hashref of data types that TO_JSON should not serialize. Defaults to "blob", "text", or "ntext".

If you wanted to allow serialization of text data types, you might override this method to look like this:

 sub unserializable_data_types {
    return {
       blob  => 1,
       ntext => 1,
    };
 }

Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

This software is copyright (c) 2020 by Arthur Axel "fREW" Schmidt.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

2020-03-28 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.