App-Context
view release on metacpan or search on metacpan
lib/App/Reference.pm view on Meta::CPAN
#############################################################################
## $Id: Reference.pm 9683 2007-06-26 15:30:18Z spadkins $
#############################################################################
package App::Reference;
$VERSION = (q$Revision: 9683 $ =~ /(\d[\d\.]*)/)[0]; # VERSION numbers generated by svn
use strict;
use App;
=head1 NAME
App::Reference - a Perl reference, blessed so it can be accessed with methods
=head1 SYNOPSIS
use App::Reference;
$ref = App::Reference->new();
$ref = App::Reference->new("file" => $file);
print $ref->dump(), "\n"; # use Data::Dumper to spit out the Perl representation
# accessors
$property_value = $ref->get($property_name);
$branch = $ref->get_branch($branch_name,$create_flag); # get hashref
$ref->set($property_name, $property_value);
# on-demand loading helper methods (private methods)
$ref->overlay($ref2); # merge the two structures using overlay rules
$ref->overlay($ref1, $ref2); # merge $ref2 onto $ref1
$ref->graft($branch_name, $ref2); # graft new structure onto branch
=head1 DESCRIPTION
App::Reference is a very thin class which wraps a few simple
methods around a perl reference which may contain a multi-level data
structure.
=cut
#############################################################################
# CLASS
#############################################################################
=head1 Class: App::Reference
* Throws: App::Exception
* Since: 0.01
=head2 Requirements
The App::Reference class satisfies the following requirements.
o Minimum performance penalty to access perl data
o Ability to bless any reference into this class
o Ability to handle ARRAY and HASH references
=cut
#############################################################################
# CONSTRUCTOR METHODS
#############################################################################
=head1 Constructor Methods:
=cut
#############################################################################
# new()
#############################################################################
=head2 new()
This constructor is used to create Reference objects.
Customized behavior for a particular type of Reference
is achieved by overriding the _init() method.
* Signature: $ref = App::Reference->new($array_ref)
* Signature: $ref = App::Reference->new($hash_ref)
* Signature: $ref = App::Reference->new("array",@args)
* Signature: $ref = App::Reference->new(%named)
lib/App/Reference.pm view on Meta::CPAN
foreach my $key (keys %$ref2) {
if (!exists $ref1->{$key}) {
$ref1->{$key} = $ref2->{$key};
}
else {
$ref1type = ref($ref1->{$key});
if ($ref1type && $ref1type ne "ARRAY") {
$ref2type = ref($ref2->{$key});
if ($ref2type && $ref2type ne "ARRAY") {
$self->overlay($ref1->{$key}, $ref2->{$key});
}
}
}
}
}
&App::sub_exit() if ($App::trace);
}
#############################################################################
# graft()
#############################################################################
=head2 graft()
* Signature: $ref->graft($branch_name, $ref2);
* Param: $branch_name string
* Param: $ref2 {}
* Return: void
* Throws: App::Exception
* Since: 0.01
Sample Usage:
# graft new config structure onto branch
$ref->graft($branch_name, $ref2);
=cut
sub graft {
}
#############################################################################
# dump()
#############################################################################
=head2 dump()
* Signature: $perl = $ref->dump();
* Param: void
* Return: $perl text
* Throws: App::Exception
* Since: 0.01
Sample Usage:
$ref = $context->config();
print $ref->dump(), "\n";
=cut
use Data::Dumper;
sub dump {
my ($self, $ref) = @_;
$ref = $self if (!$ref);
my $d = Data::Dumper->new([ $ref ], [ "ref" ]);
$d->Indent(1);
return $d->Dump();
}
#############################################################################
# print()
#############################################################################
=head2 print()
* Signature: $ref->print();
* Param: void
* Return: void
* Throws: App::Exception
* Since: 0.01
Sample Usage:
$context->print();
=cut
sub print {
my ($self, $ref) = @_;
$ref = $self if (!$ref);
print $self->dump($ref);
}
#############################################################################
# PROTECTED METHODS
#############################################################################
=head1 Protected Methods:
The following methods are intended to be called by subclasses of the
current class.
=cut
#############################################################################
# create()
#############################################################################
=head2 create()
The create() method is used to create the Perl structure that will
be blessed into the class and returned by the constructor.
It may be overridden by a subclass to provide customized behavior.
* Signature: $ref = App::Reference->create("array", @args)
* Signature: $ref = App::Reference->create($arrayref)
* Signature: $ref = App::Reference->create($hashref)
* Signature: $ref = App::Reference->create($hashref, %named)
* Signature: $ref = App::Reference->create(%named)
* Param: $hashref {}
* Param: $arrayref []
* Return: $ref ref
* Throws: App::Exception
* Since: 0.01
( run in 0.665 second using v1.01-cache-2.11-cpan-39bf76dae61 )