---
name: "Badger::Data::Facet"
section: "3pm"
platform: "linux"
package: "libbadger-perl"
version: "0.16-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Badger::Data::Facet"
---

# Badger::Data::Facet(3pm)

base class validation facet for simple data types

## NAME

Badger::Data::Facet - base class validation facet for simple data types

## SYNOPSIS

TODO

## PLEASE NOTE

This module is a work in progress. The implementation is subject to change and the documentation may be incomplete or incorrect in places.

## DESCRIPTION

This module implements a base class validation facet for data types.

## METHODS

### init($config)

Custom initialisation method for data facets. Subclasses may redefine this method to do something different.  Otherwise the default behaviour is as  follows.

It first looks for any `$ARGS` package variables (in the current and any base classes) which denote the names of mandatory arguments for the data type.

```
    our $ARGS = ['foo', 'bar'];
```

It then asserts that each of these is defined in the `$config` and copies the value into `$self`.

Any optional parameters can be specified using the `$OPTS` package variable.

```
    our $OPTS = 'baz';              # single string is sugar for ['baz']
```

If any of these value(s) are defined in the `$config` then they will be  copied into `$self`.

### validate($value,$type)

This is the main validation method for facets.  Subclasses must redefine this method to implement their own validation routine.

The first argument is a *reference* to the candidate value.  For list and  hash data types, this will be a reference to the list or hash respectively, as you would usually expect.  If the value is a non-reference scalar (e.g. a number or text string) then a *reference* will also be passed.  You may not be expecting this.

```
    $facet->validate(\$text);
    $facet->validate(\@list);
    $facet->validate(\%hash);
```

### invalid($message)

This method is used internally (e.g. by the **validate()** method) to report invalid values.

```
    $self->invalid("The value specified is not valid");
```

### invalid\_msg($format,@args)

This method is used internally (e.g. by the **validate()** method) to report invalid values using a pre-defined **message()**  format.

```
    our $MESSAGES = {
        not_orange => 'The colour specified is not orange: %s',
    };
    sub validate {
        my ($self, $value) = @_;

        return $$value eq 'orange'
            || $self->invalid_msg( not_orange => $$value );
    }
```

## PACKAGE VARIABLES

### $MESSAGES

Subclasses may defined their own message formats (for use with  **invalid\_msg()**) using the `$MESSAGES` package variable.  This should be a reference to a hash array mapping short names to message formats. These formats are expanded using the `"xprintf()|Badger::Utils/xprintf()"` function in Badger::Utils.  This is a wrapper around `"sprintf()"` with some extra syntactic sugar for handling positional arguments.

```
    our $MESSAGES = {
        # messages taking one and two parameters
        not_orange => 'The colour specified is not orange: %s',
        not_colour => 'The colour specified is not %s: %s',
        # message specifying parameters in a different order
        alt_colour => 'You specified the colour <2> but that is not <1>.',
    };
```

## AUTHOR

Andy Wardley \<http://wardley.org/\>

## COPYRIGHT

Copyright (C) 2001-2009 Andy Wardley.  All Rights Reserved.

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

## ACKNOWLEDGEMENTS

This module is derived from the XML::Schema::Facet module, also written  by Andy Wardley under funding from Canon Research Europe Ltd.

## SEE ALSO

Badger::Data::Type::Simple
