App-Requirement-Arch
view release on metacpan or search on metacpan
split load_and_filter_requirements
explain why this module
add output section in the application documentation
master template and master categories when requirements come from different project
shall we merge or verify each requirement to its own masters?
show all the files (and structure) needed to run the applications
can we have commands that can be piped into each other?
ra select r1 | ra select directory/ | ra check --templates | ra check --script | ra filter- something | ra merge | ra filter- something | ra show --dhtml
can we keep a server instance up to avoid reloading or re-evalauating requirements?
we could also implement the pipes ourselves
lib/App/Requirement/Arch.pm view on Meta::CPAN
- Each requirements are gathered in a text file
- The Requirement must match a specified format
- The format is Perl
- The format requires the presence of specific fields
- The requirements can be gathered from multiple places
=head3 Consequences:
- gathering requirement is simple (except if your product manager has problems opening files with unix line ending (no this is not a joke))
- tools to verify the format of the requirements are easilly written
=head3 Positive side effects:
- requirements can be shared between projects, simply gather them from multiple projects
- the physical organisation of the file is left to user, have any directory structure you deem good
- requirements can be under version control and you can choose whatever system you like
- you can use the tools you are used to (this was listed above as a goal)
- your favorit text editor
- your favorit version control system
- your favorit explorer (konqueror, lynx, mc, tree, ...)
lib/App/Requirement/Arch.pm view on Meta::CPAN
CATEGORIES => {TYPE =>$ARRAY, DEFAULT => []},
NAME => {TYPE =>$SCALAR, DEFAULT =>''} ,
...
},
Each field has a
TYPE: $SCALAR or $ARRAY
DEFAULT: a default value
ACCEPTED_VALUES: values that are used to verify the contents of the fiels
OPTIONAL: wether the field is optional or not. I prefer always having all the fields but other user may prefer not seeing them. Unecessary fields
are ugly (but the whole buisiness is rather unxxx). the disadvantages of not seing all the fields is that the user has to know what she can
write or not which, IMO, makes it more difficult
TODO: add a comment entry in each field so it can be displayed as help to the user
=head3 Verification
Once you have created your requirement you can check it's validity with tthe B<ra_check> application. You can check multiple requirement
simulteanously.
lib/App/Requirement/Arch.pm view on Meta::CPAN
'Runtime build options' =>
{
'_DEFINITION' => 'User selectable runtime options for the build tool and expected system'
},
...
},
}
=head3 Verification
Running the B<ra_*> application will verify the categories you have assigned to requirements. Categories that are declared in
I<master_categories.pl> will be reported.
=head3 Physical sorting of the requirements
The file system layout doesn't have to match the requirement categorization, although that is sound.
Filesystem layout example:
$> tree -d
.
lib/App/Requirement/Arch.pm view on Meta::CPAN
return get_template_files_from_directory(home() . '/.ra/templates', $master_template_file, $master_categories_file, $free_form_template) ;
}
#--------------------------------------------------------------------------------------------------------------
sub load_master_template
{
=head2 load_master_template($master_template_file)
Load and verify the master template.
I<Arguments>
=over 2
=item * $master_template_file - Name to a file containing the master template.
=back
I<Returns>
lib/App/Requirement/Arch.pm view on Meta::CPAN
return $requirement_template ;
}
#--------------------------------------------------------------------------------------------------------------
sub load_master_categories
{
=head2 load_master_categories($master_categories_file)
Load and verify the master template.
I<Arguments>
=over 2
=item * $master_categories_file - Name to a file containing the master categories.
=back
I<Returns>
( run in 0.327 second using v1.01-cache-2.11-cpan-73692580452 )