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

oometa - oo::meta A data registry for classess

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 TcllibTrackers [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 unifieddiffs, 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.

Category

       TclOO

Commands

oo::meta::infooo::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::infobranchget ?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::infobranchset ?key...? keyvalue
              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::infodumpclass
              Returns the complete snapshot of a class metadata, as producted by oo::meta::metadataoo::meta::infoclassistype ?args?
              Returns a boolean true or false if the element ?args? would match stringistypevalue

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

       oo::meta::infoclassmerge ?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::infoclassrebuild
              Forces  the  meta system to destroy any cached representation of a class' metadata before the next
              access to oo::meta::metadataoo::meta::metadataclass
              Returns an aggregate picture of the metadata for class, combining its local data  with  the  local
              data from its ancestors.

       oo::definemeta
              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::classmethodmeta
              The package injects a new method meta into oo::class which  works  to  provide  a  class  instance
              access to oo::meta::info.

       oo::objectmethodmeta
              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::objectmethodmetacget ?field? ?...? field
              Attempts to locate a singlar leaf, and return its value. For single option lookups, this is faster
              than  mymetagetnull ?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.

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.

Description

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

Keywords

       TOOL, TclOO

Name

       oometa - oo::meta A data registry for classess

Synopsis

oo::meta::infooo::meta::infobranchget ?key? ?...?

       oo::meta::infobranchset ?key...? keyvalueoo::meta::infodumpclassoo::meta::infoclassistype ?args?

       oo::meta::infoclassmerge ?dict? ?dict? ?...?

       oo::meta::infoclassrebuildoo::meta::metadataclassoo::definemetaoo::classmethodmetaoo::objectmethodmetaoo::objectmethodmetacget ?field? ?...? field

________________________________________________________________________________________________________________

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}

See Also