The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
#
# This file is part of Config-Model
#
# This software is Copyright (c) 2014 by Dominique Dumont.
#
# This is free software, licensed under:
#
#   The GNU Lesser General Public License, Version 2.1, February 1999
#

#    Copyright (c) 2011-2014 Dominique Dumont.
#
#    This file is part of Config-Model.
#
#    Config-Model is free software; you can redistribute it and/or
#    modify it under the terms of the GNU Lesser Public License as
#    published by the Free Software Foundation; either version 2.1 of
#    the License, or (at your option) any later version.
#
#    Config-Model is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#    Lesser Public License for more details.
#
#    You should have received a copy of the GNU Lesser Public License
#    along with Config-Model; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
#    02110-1301 USA

use lib qw/lib/ ;
use strict;
use Path::Tiny ;
use Config::Model ; # to generate doc

my $model = Config::Model -> new(model_dir => "lib/Config/Model/models") ;

# this extension is run with 'cme gen-classpod'. cme will run 'do gen-class-pod'
# to keep @INC and @ARGV around. Hence @ARGV contains 'gen-class-pod'
shift @ARGV if $ARGV[0] and $ARGV[0] eq 'gen-class-pod' ;

my @models = @ARGV ? @ARGV : 
  map { /model\s*=\s*([\w:-]+)/; $1; }
  grep { /^\s*model/; }
  map  { $_->lines; }
  map  { $_->children; }
  path ("lib/Config/Model/")->children(qr/\.d$/);

map {
    # this test avoid generating doc several times (generate_doc scan docs for
    # classes referenced by the model with config_class_name paremeter)
    if (not $model->model_exists($_)) {
        print "Checking doc for model $_\n";
        $model->load($_) ;
        $model->generate_doc ($_,'lib') ;
    }
  } @models ;