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

# Badger::Workspace(3pm)

an object representing a project workspace

## NAME

Badger::Workspace - an object representing a project workspace

## DESCRIPTION

This module implements an object for representing a workspace, for example the directory containing the source, configuration, resources and other files for a web site or some other project.  It is a subclass of Badger::Workplace which implements the base functionality.

The root directory for a workspace is expected to contain a configuration directory, called *config* by default, containing configuration files for the workspace.  This is managed by delegation to a Badger::Config::Filesystem object.

## CLASS METHODS

### new(\\%config)

This is the constructor method to create a new `"Badger::Workspace"` object.

```
    use Badger::Workspace;
    my $space = Badger::Workspace->new(
        directory => '/path/to/workspace',
    );
```

*CONFIGURATION OPTIONS*

root / dir / directory

This mandatory parameter must be provided to indicate the filesystem path to the project directory.  It can be also specified using any of the names `"root"`, `"dir"` or `"directory"`, as per Badger::Workplace

config\_module

The name of the delegate module for managing the files in the configuration directory.  This defaults to Badger::Config::Filesystem.

config\_dir / config\_directory

This optional parameter can be used to specify the name of the configuration direction under the root project directory.  The default configuration directory name is `"config"`.

config\_file

This optional parameter can be used to specify the name of the main configuration file (without file extension) that should reside in the config\_dir directory under the `"root"` project directory.  The default configuration file name is `"workspace"`.

## PUBLIC METHODS

### config($item)

When called without any arguments this returns a Badger::Config::Filesystem object which manages the configuration directory for the project.

```
    my $cfg = $workspace->config;
```

When called with a named item it returns the configuration data associated with that item.  This will typically be defined in a master configuration file, or in a file of the same name as the item, with an appropriate file extension added.

```
    my $name = $workspace->config('name');
```

### inherit\_config($item)

Attempts to fetch an inherited configuration from a parent namespace. The workspace must have a parent defined and must have the `"inherit"` option set to any true value.

### parent\_config($item)

Attempts to fetch the configuration for a named item from a parent workspace. Obviously this requires the workspace to be attached to a parent.  Note that this method is not bound by the `"inherit"` flag and will delegate to any parent regardless.

### dir($name)

### dirs(\\%dirmap)

### resolve\_dir($name)

### file($path)

### attach($parent)

Attaches the workspace to a parent workspace.

### detach()

Detaches the workspace from any parent workspace.

### parent($n)

Returns the parent workspace if there is one.  If a numerical argument is passed then it indicates a number of parents to skip.  e.g. if `$n` is `1` then it bypasses the parent and returns the grandparent instead.  Thus, passing an argument of `0` is the same as passing no argument at all.

### ancestors($list)

Returns a list of the parent, grandparent, great-grandparent and so on, all the way up as far as it can go.  A target list reference can be passed as an argument.

### heritage()

This returns the same items in the `"ancestors()"` list but in reverse order, from most senior parent to most junior.

## PRIVATE METHODS

### init(\\%config)

This method redefines the default initialisation method.  It calls the **init\_workplace()** method inherited from Badger::Workplace and then calls the **init\_workspace()** method to perform any workspace-specific initialisation.

### init\_workspace(\\%config)

This method performs workspace-specific initialisation.  In this module it simply calls **init\_config()**.  Subclasses may redefine it to do something different.

### init\_config(\\%config)

This initialised the Badger::Config::Filesystem object which manages the *config* configuration directory.

### init\_dirs(\\%config)

### init\_parent(\\%config)

### write\_config\_file($uri, $data)

Delegates to the method of the same name provided by the filesystem config object - see Badger::Config::Filesystem.

## TODO

Inheritance of configuration data between parent and child workspaces.

## AUTHOR

Andy Wardley \<abw@wardley.org\>.

## COPYRIGHT

Copyright (C) 2008-2014 Andy Wardley.  All Rights Reserved.
