Config::Setting::Chunk - Representation of a configuration file


Config-Setting documentation Contained in the Config-Setting distribution.

Index


Code Index:

NAME

Top

Config::Setting::Chunk - Representation of a configuration file

SYNOPSIS

Top

  use Config::Setting::Chunk;

  my $chunk = Config::Setting::Chunk->new;
  $chunk->add_section( "login" );
  $chunk->set_item( "login", "username", "fred" );

  my @sections = $chunk->sections;
  my $username = $chunk->get_item( "login", "username" );

DESCRIPTION

Top

This class is a representation of a configuration file. A chunk consists of zero or more sections, each of which consists of zero or more items.

METHODS

Top

new ( )

Class Method. Constructor.

add_section ( SECTION )

Create a new section named SECTION. Has no effect if SECTION is already present in this chunk.

sections ( )

Return a list of all sections in this chunk, in the order in which they were added.

has_section ( SECTION )

Returns true or false if SECTION is present or not in this chunk.

section_keys ( SECTION )

Returns a list of all keys present in SECTION.

set_item ( SECTION, KEY, VALUE )

Set the item KEY to have VALUE in SECTION. if SECTION does not exist, it will be created.

get_item ( SECTION, KEY )

Return the value of KEY in SECTION. Returns undef if KEY or SECTION does not exist.

get ( KEY )

Return the value of KEY in the first section which contains it, or undef if no section contains it.

to_string ( )

Returns the chunk in windows .INI style format. This may be useful for debugging.

AUTHOR

Top

Dominic Mitchell, <cpan (at) happygiraffe.net>

SEE ALSO

Top

Config::Setting.


Config-Setting documentation Contained in the Config-Setting distribution.

# Copyright (C) 2004 by Dominic Mitchell. All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.

package Config::Setting::Chunk;

use strict;
use vars qw($VERSION $rcsid);

use Carp;

$VERSION = ( qw( $Revision: 765 $ ) )[1];
$rcsid   = '@(#) $Id: Chunk.pm 765 2005-08-31 20:05:59Z dom $ ';

sub new {
        my $class = shift;
        return bless {}, $class;
}

sub add_section {
        my $self = shift;
        my ( $sect ) = @_;
        croak "usage: add_section(sect)" unless $sect;
        unless ( exists $self->{ Sections }{ $sect } ) {
                $self->{ Sections }{ $sect } = {};
                $self->{ SectionOrder } ||= [];
                push @{ $self->{ SectionOrder } }, $sect;
        }
        return;
}

sub sections {
        my $self = shift;
        return @{ $self->{ SectionOrder } || [] };
}

sub has_section {
        my $self = shift;
        my ( $sect ) = @_;
        croak "usage: has_section(sect)" unless $sect;
        return exists $self->{ Sections }{ $sect };
}

sub section_keys {
        my $self = shift;
        my ( $sect ) = @_;
        croak "usage: section_keys(sect)"
                unless $sect;
        return sort keys %{ $self->{Sections}{$sect} || {} };
}

sub set_item {
        my $self = shift;
        my ( $sect, $key, $val ) = @_;
        croak "usage: set_item(sect,key,val)"
            unless $sect && $key && $val;
        $self->add_section( $sect );
        $self->{ Sections }{ $sect }{ $key } = $val;
        return;
}

sub get_item {
        my $self = shift;
        my ( $sect, $key ) = @_;
        croak "usage: get_item(sect,key)"
            unless $sect && $key;
        # Avoid autovivification.
        return unless $self->has_section( $sect );
        return $self->{ Sections }{ $sect }{ $key };
}

sub get {
        my $self = shift;
        my ( $key ) = @_;
        foreach my $sect ( $self->sections ) {
                my $val = $self->get_item( $sect, $key );
                return $val if defined $val;
        }
        return;
}

sub to_string {
        my $self = shift;
        my $str  = '';
        foreach my $sect ( $self->sections ) {
                $str .= "[$sect]\n";
                foreach my $key ( $self->section_keys( $sect ) ) {
                        $str .= $key . '=' . $self->get_item( $sect, $key );
                        $str .= "\n";
                }
                $str .= "\n";
        }
        return $str;
}

1;
__END__

# Local Variables:
# mode: cperl
# cperl-indent-level: 8
# indent-tabs-mode: nil
# cperl-continued-statement-offset: 8
# End:
#
# vim: set ai et sw=8 :