=pod

=head1 NAME

Bot::Cobalt::Manual::Plugins::Config - Cobalt config file primer

=head1 DESCRIPTION

This document is a very brief overview aimed at plugin authors in need 
of a quick reference to plugin configuration files loaded via Config 
directives.

L<Bot::Cobalt> configuration files are written in YAML. 
L<http://yaml.org/spec/1.1/>

Mostly, you will see hash structures like this:

  $ cat etc/plugins/mine/myplugin.conf
  ---
  ## config for MyPlugin
  ## RequiredLevels: hash specifying access levels for commands:
  RequiredLevels:
    cmd_ensnackulate: 2
    cmd_refrobulate: 1

...which would be converted, upon load, into a 
L<Bot::Cobalt::Conf::File::PerPlugin> object.

(These structures would normally be accessed by plugins via the Core's 
L<Bot::Cobalt::Core::Role::EasyAccessors/"get_plugin_cfg"> method or 
L<Bot::Cobalt::Core::Sugar/"plugin_cfg"> -- see 
L<Bot::Cobalt::Manual::Plugins> for details.)

See L<Bot::Cobalt::Manual::Plugins::Dist> for details on embedding 
configuration files installable via L<cobalt2-plugin-installcf>.

=head2 Indentation

Indentation builds nested structures; 2 spaces is the standard for 
L<Bot::Cobalt> configuration files:

  Opts:
    SomeOpt: 1
    OtherOpts:
      ThisElement: "Some string"

=head2 Boolean values

Many configuration options, especially in the core plugin set, are 
simple boolean true/false:

  ## Example of a boolean true or false
  ## if UseSSL is commented out, 0, or ~ (undef), it is "false"
  ## true if 1 or some other positive value like a string ("Yes")
  UseSSL: 1
  
  ## ...just as valid for a simple boolean check:
  UseSSL: "Yes please!"

=head2 Strings

  SomeString: A string

Strings can be quoted:

  SomeString: "A string"

For example:

  SomeNum: 176.100    ## Numeric 176.1
  SomeNum: "176.100"  ## String "176.100"

Within double-quotes, special characters can be escaped C-style.

=head2 Block literals

A block literal might look something like this:

  ## newlines preserved:
  ThisDoc: |
    Some text here.
    And even more text here.
    Perhaps some more!

  ## newlines folded:
  ThisDoc: >
    <p>Some literal html</p>
    <p>More of it</p>

=head2 Hashes

  MyHash:
    Scalar_item: "a scalar"
    Another_Hash:
      Item_one: 1
      Item_two: "String"

Item_two would be available via MyHash->{Another_Hash}->{Item_two}.


=head2 Lists

A list/array looks something like this:

  MyList:
    - An item
    - Another item

  ## a deeply nested structure:
  MyUsers:
    - JoeUser
    - Bobby
    - Another list
    - SomeHash:
        One_Item: 1
        Another_item: "Some string"

(In this example, Another_item would be available via 
MyUsers[3]->{Another_item})

=head1 SEE ALSO

L<http://yaml.org/spec/1.1/>

L<YAML::XS>

=head1 AUTHOR

Jon Portnoy <avenj@cobaltirc.org>

=cut
