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::TermUI - Interactive command line interface for cme

Author

       Dominique Dumont

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.

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.

Dependencies

       This module is optional and depends on Term::ReadLine to work. To reduce the dependency list of
       Config::Model, "Term::ReadLine" is only recommended. cme gracefully degrades to Config::Model::SimpleUI
       when necessary.

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 is used. See
       Term::ReadLine to override default choice.

Methods

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

Name

       Config::Model::TermUI - Interactive command line interface for cme

See Also

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

Synopsis

        use Config::Model;
        use Config::Model::TermUI ;

        # 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 $steps = 'foo=FOO hash_of_nodes:fr foo=bonjour -
          hash_of_nodes:en foo=hello ';
        $root->load( steps => $steps );

        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 dumps 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 - -

User Command Syntax

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

Version

       version 2.155

See Also