Provided by: libconfig-model-perl_2.047-1_all bug

NAME

       Config::Model::TermUI - Provides Config::Model UI with Term::ReadLine

VERSION

       version 2.047

SYNOPSIS

        use Config::Model;
        use Config::Model::TermUI ;
        use Log::Log4perl qw(:easy);
        Log::Log4perl->easy_init($WARN);

        # define configuration tree object
        my $model = Config::Model->new;
         $model->create_config_class(
           name    => "Foo",
           element => [
               [qw/foo bar/] => {
                   type       => 'leaf',
                   value_type => 'string'
               },
           ]
        );
        $model ->create_config_class (
           name => "MyClass",

           element => [

               [qw/foo bar/] => {
                   type       => 'leaf',
                   value_type => 'string'
               },
               hash_of_nodes => {
                   type       => 'hash',     # hash id
                   index_type => 'string',
                   cargo      => {
                       type              => 'node',
                       config_class_name => 'Foo'
                   },
               },
           ],
        ) ;

        my $inst = $model->instance(root_class_name => 'MyClass' );

        my $root = $inst->config_root ;

        # put data
        my $step = 'foo=FOO hash_of_nodes:fr foo=bonjour -
          hash_of_nodes:en foo=hello ';
        $root->load( step => $step );

        my $ui = Config::Model::TermUI->new( root => $root ,
                                             title => 'My class ui',
                                             prompt => 'class ui',
                                             );

        # engage in user interaction
        $ui -> run_loop ;

        print $root->dump_tree ;

       Once the synopsis above has been saved in "my_test.pl", you can achieve the same
       interactions as with "Config::Model::SimpleUI". Except that you can use TAB completion:

        class ui:$ ls
        foo  bar  hash_of_nodes
        class ui:$ ll hash_of_nodes
        name         value        type         comment
        hash_of_nodes <Foo>        node hash    keys: "en" "fr"

        class ui:$ cd hash_of_nodes:en
        class ui: hash_of_nodes:en $ ll
        name         value        type         comment
        foo          hello        string
        bar          [undef]      string

        class ui: hash_of_nodes:en $ set bar=bonjour
        class ui: hash_of_nodes:en $ ll
        name         value        type         comment
        foo          hello        string
        bar          bonjour      string

        class ui: hash_of_nodes:en $ ^D

       At the end, the test script will dump the configuration tree. The modified "bar" value can
       be found in there:

        foo=FOO
        hash_of_nodes:en
          foo=hello
          bar=bonjour -
        hash_of_nodes:fr
          foo=bonjour - -

DESCRIPTION

       This module provides a helper to construct pure ASCII user interface on top of
       Term::ReadLine. To get better interaction you must install either Term::ReadLine::Gnu or
       Term::ReadLine::Perl.

       Depending on your installation, either Term::ReadLine::Gnu or Term::ReadLine::Perl. See
       Term::ReadLine to override default choice.

USER COMMAND SYNTAX

       See "USER COMMAND SYNTAX" in Config::Model::SimpleUI.

CONSTRUCTOR

   parameters
       root
           Root node of the configuration tree

       title
           UI title

       prompt
           UI prompt. The prompt will be completed with the location of the current node.

Methods

   run_loop()
       Engage in user interaction until user enters '^D' (CTRL-D).

BUGS

       •   Auto-completion is not complete.

       •   Auto-completion provides wrong choice when you try to "cd" in a hash where the index
           contains a white space. I.e. the correct command is "cd foo:"a b"" instead of "cd foo:
           "a b"" as proposed by auto completion.

       •   UI should take into account experience.

AUTHOR

       Dominique Dumont, (ddumont at cpan dot org)

SEE ALSO

       Config::Model, Config::Model::Instance, Config::Model::Node,

AUTHOR

       Dominique Dumont

COPYRIGHT AND LICENSE

       This software is Copyright (c) 2013 by Dominique Dumont.

       This is free software, licensed under:

         The GNU Lesser General Public License, Version 2.1, February 1999