Provided by: tcllib_1.19-dfsg-2_all bug

NAME

       oometa - oo::meta A data registry for classess

SYNOPSIS

       oo::meta::info

       oo::meta::info branchget ?key? ?...?

       oo::meta::info branchset ?key...? key value

       oo::meta::info dump class

       oo::meta::info class is type ?args?

       oo::meta::info class merge ?dict? ?dict? ?...?

       oo::meta::info class rebuild

       oo::meta::metadata class

       oo::define meta

       oo::class method meta

       oo::object method meta

       oo::object method meta cget ?field? ?...? field

_________________________________________________________________________________________________

DESCRIPTION

       The oo::meta package provides a data registry service for TclOO classes.

USAGE

              oo::class create animal {
                meta set biodata animal: 1
              }
              oo::class create mammal {
                superclass animal
                meta set biodata mammal: 1
              }
              oo::class create cat {
                superclass mammal
                meta set biodata diet: carnivore
              }

              cat create felix
              puts [felix meta dump biodata]
              > animal: 1 mammal: 1 diet: carnivore

              felix meta set biodata likes: {birds mice}
              puts [felix meta get biodata]
              > animal: 1 mammal: 1 diet: carnivore likes: {bird mice}

              # Modify a class
              mammal meta set biodata metabolism: warm-blooded
              puts [felix meta get biodata]
              > animal: 1 mammal: 1 metabolism: warm-blooded diet: carnivore likes: {birds mice}

              # Overwrite class info
              felix meta set biodata mammal: yes
              puts [felix meta get biodata]
              > animal: 1 mammal: yes metabolism: warm-blooded diet: carnivore likes: {birds mice}

CONCEPT

       The  concept behind oo::meta is that each class contributes a snippet of local data.  When
       oo::meta::metadata is called, the system walks through the  linear  ancestry  produced  by
       oo::meta::ancestors,  and  recursively combines all of that local data for all of a class'
       ancestors into a single dict.  Instances of oo::object can also combine class data with  a
       local dict stored in the meta variable.

COMMANDS

       oo::meta::info
              oo::meta::info  is  intended to work on the metadata of a class in a manner similar
              to if the aggregate pieces where assembled into a single dict.  The  system  mimics
              all of the standard dict commands, and addes the following:

       oo::meta::info branchget ?key? ?...?
              Returns  a  dict  representation  of  the  element at args, but with any trailing :
              removed from field names.

              ::oo::meta::info $myclass set option color {default: green widget: colorselect}
              puts [::oo::meta::info $myclass get option color]
              > {default: green widget: color}
              puts [::oo::meta::info $myclass branchget option color]
              > {default green widget color}

       oo::meta::info branchset ?key...? key value
              Merges dict with any other information contaned at  node  ?key...?,  and  adding  a
              trailing : to all field names.

              ::oo::meta::info $myclass branchset option color {default green widget colorselect}
              puts [::oo::meta::info $myclass get option color]
              > {default: green widget: color}

       oo::meta::info dump class
              Returns   the   complete   snapshot   of   a   class   metadata,  as  producted  by
              oo::meta::metadata

       oo::meta::info class is type ?args?
              Returns a boolean true or false if the element ?args? would match  string  is  type
              value

              ::oo::meta::info $myclass set constant mammal 1
              puts [::oo::meta::info $myclass is true constant mammal]
              > 1

       oo::meta::info class merge ?dict? ?dict? ?...?
              Combines  all  of the arguments into a single dict, which is then stored as the new
              local representation for this class.

       oo::meta::info class rebuild
              Forces the meta system to destroy any cached representation of  a  class'  metadata
              before the next access to oo::meta::metadata

       oo::meta::metadata class
              Returns  an  aggregate  picture of the metadata for class, combining its local data
              with the local data from its ancestors.

       oo::define meta
              The package injects a command oo::define::meta which works to provide  a  class  in
              the  process of definition access to oo::meta::info, but without having to look the
              name up.

              oo::define myclass {
                meta set foo bar: baz
              }

       oo::class method meta
              The package injects a new method meta into oo::class which works to provide a class
              instance access to oo::meta::info.

       oo::object method meta
              The package injects a new method meta into oo::object. oo::object combines the data
              for its class (as provided by oo::meta::metadata), with a local  variable  meta  to
              produce a local picture of metadata.  This method provides the following additional
              commands:

       oo::object method meta cget ?field? ?...? field
              Attempts to locate a singlar leaf, and return its value. For single option lookups,
              this  is  faster  than  my meta getnull ?field? ?...? field], because it performs a
              search instead directly instead of producing the recursive  merge  product  between
              the class metadata, the local meta variable, and THEN performing the search.

BUGS, IDEAS, FEEDBACK

       This  document,  and  the  package  it  describes, will undoubtedly contain bugs and other
       problems.   Please  report  such  in  the  category   tcloo   of   the   Tcllib   Trackers
       [http://core.tcl.tk/tcllib/reportlist].  Please also report any ideas for enhancements you
       may have for either package and/or documentation.

       When proposing code changes, please provide unified diffs, i.e the output of diff -u.

       Note further that attachments are strongly preferred over inlined patches. Attachments can
       be  made  by going to the Edit form of the ticket immediately after its creation, and then
       using the left-most button in the secondary navigation bar.

KEYWORDS

       TOOL, TclOO

CATEGORY

       TclOO

COPYRIGHT

       Copyright (c) 2015 Sean Woods <yoda@etoyoc.com>