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::SearchElement - Search an element in a configuration model

Author

       Dominique Dumont

Constructor

       The constructor should be used only by Config::Model::Node.

Description

       This modules provides a way to search for a configuration element in a configuration tree by exploring
       the configuration model.

       For instance, suppose that you have a xorg.conf model and you know that you need to tune the
       "MergedXinerama" parameter, but you don't remember where is this parameter in the configuration tree.
       This module guides you through the tree to the(s) node(s) that contain this parameter.

       This class should be invaluable to construct interactive user interfaces.

       This module provides 2 search modes:

       •   A  manual  search  where you are guided step by step to the element you're looking for. At each step,
           the module returns you the possible paths to choose from. The user has to  choose  the  correct  path
           from  the  available  paths.  Most  of the time, only one possibility is returned, so the user choice
           should be straightforward. In other case (more that one choice), the user  has  to  decide  the  next
           step.

       •   An  automatic  search  where  you provide call-back that resolves the ambiguities in case of multiple
           paths.

Methods

get_searchable_elements
       Return the list of elements found in model that can be searched in the configuration tree.

   prepare
       Parameters: "(element => ...)"

       Prepare the searcher to look for the element passed in the argument.  Returns the searcher  object  (i.e.
       $self).

   reset
       Re-initialize the search engine to redo the search from start

   searched
       Returns the searched element name.

Name

       Config::Model::SearchElement - Search an element in a configuration model

See Also

       Config::Model, Config::Model::Node, Config::Model::AnyId,  Config::Model::ListId,  Config::Model::HashId,
       Config::Model::Value,

Synopsis

        use Config::Model;

        # 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 );

        # create searcher for manual search
        my $searcher = $root->searcher();

        # looking for foo element in the tree
        $searcher -> prepare (element => 'foo') ;
        my @next = $searcher->next_step() ;

        print "next possible steps: @next\n";
        # next possible steps: foo hash_of_nodes

        # Looking for foo below hash_of_nodes
        $searcher->choose('hash_of_nodes') ;
        @next = $searcher->next_step() ;

        print "next possible steps: @next\n";
        # next possible steps: en fr

        # Looking for foo below fr
        $searcher->choose('fr') ;
        @next = $searcher->next_step() ;

        print "next possible steps: @next\n";
        # next possible steps: foo

        # last step
        $searcher->choose('foo') ;
        my $target = $searcher->current_object;

        print "Found '",$target->location,"'\n";
        # Found 'hash_of_nodes:fr foo'

        # automatic search setup
        my $element_call_back = sub { return 'hash_of_nodes' ;} ;
        my $id_call_back      = sub { return 'en' ;} ;

        $searcher->reset ;
        $target = $searcher->auto_choose($element_call_back, $id_call_back) ;
         print "Automatic search found '",$target->location,"'\n";
        # Automatic search found 'hash_of_nodes:en foo'

Version

       version 2.155

See Also