logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Config::Model::Backend::PlainFile - Read and write config as plain file

Author

       Dominique Dumont

Description

       This module is used directly by Config::Model to read or write the content of a configuration tree
       written in several files.  Each element of the node is written in a plain file.

Element Type And File Mapping

       Element values are written in one or several files depending on their type.

       leaf
           The leaf value is written in one file. This file can have several lines if the leaf type is "string"

       list
           The list content is written in one file. Each line of the file is a value of the list.

       hash
           Not supported

File Mapping

       By default, the configuration file is named after the element name (like in synopsis above).

       The  "file" parameter can also be used to specify a file name that take into account the path in the tree
       using &index() and &element() functions from Config::Model::Role::ComputeFunction.

       For instance, with the following model:

           class_name => "Foo",
           element => [
               string_a => { type => 'leaf', value_type => 'string'}
               string_b => { type => 'leaf', value_type => 'string'}
           ],
           rw_config => {
               backend => 'PlainFile',
               config_dir => 'foo',
               file => '&element(-).&element',
               file_mode => 0644,  # optional
           }

       If the configuration is loaded with  "example  string_a=something  string_b=else",  this  backend  writes
       ""something"" in file "example.string_a" and "else" in file "example.string_b".

       "file_mode"  parameter  can  be used to set the mode of the written file. "file_mode" value can be in any
       form supported by "chmod" in Path::Tiny.

Methods

read_leaf
       Parameters: "(obj, elt, check, file, args)"

       Called by read method to read the file of a leaf element. "args" contains the arguments  passed  to  read
       method.

   read_hash(obj,elt,check,file,args);
       Like read_leaf for hash elements.

   read_list
       Parameters: "(obj, elt, check, file, args)"

       Like read_leaf for list elements.

   write
       "write" writes a file for each element of the calling class. Works only for leaf and list elements. Other
       element type are skipped. Always return 1 (unless it died before).

Name

       Config::Model::Backend::PlainFile - Read and write config as plain file

See Also

       Config::Model, Config::Model::BackendMgr, Config::Model::Backend::Any,

Synopsis

        use Config::Model;

        my $model = Config::Model->new;

        my $inst = $model->create_config_class(
           name => "WithPlainFile",
           element => [
               [qw/source new/] => { qw/type leaf value_type uniline/ },
           ],
           rw_config  => {
             backend => 'plain_file',
             config_dir => '/tmp',
           },
        );

        my $inst = $model->instance(root_class_name => 'WithPlainFile' );
        my $root = $inst->config_root ;

        $root->load('source=foo new=yes' );

        $inst->write_back ;

       Now "/tmp" directory contains 2 files: "source" and "new" with "foo" and "yes" inside.

Version

       version 2.155

See Also