oometa(3)



oometa(3tcl)          Data registry for TclOO frameworks          oometa(3tcl)

______________________________________________________________________________

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 recur-
       sively  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 com-
              mands, 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,  combin-
              ing 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::ob-
              ject   combines   the   data  for  its  class  (as  provided  by
              oo::meta::metadata), with a local variable meta to produce a lo-
              cal picture of metadata.  This method provides the following ad-
              ditional 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  di-
              rectly  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 out-
       put 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>

tcllib                               0.7.1                        oometa(3tcl)

Man(1) output converted with man2html
list of all man pages