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)