
david at kineticode
Jan 16, 2009, 3:52 PM
Post #3 of 5
(3815 views)
Permalink
|
On Jan 16, 2009, at 2:22 AM, Scott Lanning wrote: > Here's an unsolicited explanation of how Bricolage objects work. > (I was shaving a yak last night. But not Moose?) > > lib/Bric.pm is an interface class. The interface consists of > the following class methods (note: methods returning lists > return arefs in scalar context) > > # construct an object > $obj = Bric->new($init) > # lookup an object by ID > $obj = Bric->lookup({ id => $id }) > # (lookup calls a cache_lookup method) > # lookup objects by parameters > @objs = Bric->list($params); > # lookup object IDs by parameters > @ids = Bric->list_ids($params); > # get class introspection info > $meths = Bric->my_meths; > > and of these instance methods: > > # lookup group IDs > @grp_ids = $obj->get_grp_ids; > # add/remove object from cache (when getting/deleting obj from > database) > $obj->cache_me(); > $obj->uncache_me(); > # add/remove object from "All" group (when inserting obj into > database) > $obj->register_instance(); > $obj->unregister_instance(); > # save object to database > $obj->save(); Yeah, and some of these don't apply to classes that inherit from Bric.pm. It's stupid, really. > In addition, an AUTOLOAD method generates get_*/set_* accessor methods > for all fields. The fields are specified through the register_fields > function of the class. register_fields is passed a hashref mapping > field names to these access constants: > > FIELD_NONE (private) > FIELD_READ (get_ only) > FIELD_RDWR (get_ and set_) We should get rid of autoload, just have register_fields() create accessors. Dunno why I never thought of that before. > Now we look at classes that implement the Bric.pm interface. > The following shows the inheritance hierarchy. According to > the interface, the lookup, list, and list_ids methods must be > implemented by subclasses of Bric.pm; the methods actually implemented > (some do not implement them all) are shown in square brackets, > with XXX marking missing methods. > > Bric.pm > - Bric::App::MediaFunc [XXX/XXX/XXX (maybe shouldn't subclass > Bric.pm)] +1 > - Bric::Biz::Asset [lookup/list/list_ids] > - Bric::Biz::Asset::Business > - Bric::Biz::Asset::Business::Media > - Bric::Biz::Asset::Business::Media::Audio > - Bric::Biz::Asset::Business::Media::Image > - Bric::Biz::Asset::Business::Media::Video > - Bric::Biz::Asset::Business::Story > - Bric::Biz::Asset::Template > - (Bric::Biz::Asset::Formatting) > - Bric::Biz::ATType [lookup/list/list_ids] > - Bric::Biz::Category [lookup/list/list_ids] > - Bric::Biz::Contact [lookup/list/list_ids] > - Bric::Biz::Element [XXX/list/list_ids] > - Bric::Biz::Element::Container [lookup/list/list_ids] > - (Bric::Biz::Asset::Business::Parts::Tile::Container) > - Bric::Biz::Element::Field [lookup/list/list_ids] > - (Bric::Biz::Asset::Business::Parts::Tile::Data) > - Bric::Biz::ElementType [lookup/list/list_ids] > - Bric::Biz::ElementType::Subelement > - (Bric::Biz::AssetType) > - (Bric::Biz::Asset::Business::Parts::Tile) > - Bric::Biz::ElementType::Parts::FieldType [lookup/list/list_ids] > - (Bric::Biz::AssetType::Parts::Data) > - Bric::Biz::Keyword [lookup/list/list_ids] > - Bric::Biz::Org [lookup/list/list_ids] > - Bric::Biz::Org::Person [lookup/list/list_ids] > - Bric::Biz::Org::Source [lookup/list/list_ids] > - Bric::Biz::Org::Parts::Addr [lookup/list/list_ids] > - Bric::Biz::OutputChannel [lookup/list/list_ids] > - Bric::Biz::OutputChannel::Element > - Bric::Biz::Person [lookup/list/list_ids] > - Bric::Biz::Person::User [lookup/list/list_ids] > - Bric::Biz::Site [lookup/list/list_ids] > - Bric::Biz::Workflow [lookup/list/list_ids] > - Bric::Biz::Workflow::Parts::Desk [lookup/list/list_ids] > - Bric::Dist::Action [lookup/list/list_ids] > - Bric::Dist::Action::Akamaize > - Bric::Dist::Action::DTDValidate > - Bric::Dist::Action::Email > - Bric::Dist::Action::HTMLClean > - Bric::Dist::Action::Mover > - Bric::Dist::ActionType [lookup/list/list_ids] > - Bric::Dist::Client [XXX/XXX/XXX (maybe shouldn't subclass Bric.pm)] +1 > - Bric::Dist::Resource [lookup/list/list_ids] > - Bric::Dist::Server [lookup/list/list_ids] > - Bric::Dist::ServerType [lookup/list/list_ids] > - Bric::Util::Alert [lookup/list/list_ids] > - Bric::Util::Alerted [lookup/list/list_ids] > - Bric::Util::Alerted::Parts::Sent [XXX/XXX/XXX] > - Bric::Util::AlertType [lookup/list/list_ids] > - Bric::Util::AlertType::Parts::Rule [lookup/list/list_ids] > - Bric::Util::Attribute [lookup/list/XXX] > - Bric::Util::Attribute::Action > - Bric::Util::Attribute::Category > - Bric::Util::Attribute::ElementType > - Bric::Util::Attribute::FieldType > - Bric::Util::Attribute::Grp > - Bric::Util::Attribute::Member > - Bric::Util::Burner [XXX/XXX/XXX (maybe shouldn't subclass Bric.pm)] +1 > - Bric::Util::Burner::Mason > - Bric::Util::Burner::PHP > - Bric::Util::Burner::Template > - Bric::Util::Burner::TemplateToolkit > - Bric::Util::Class [lookup/list/XXX] > - Bric::Util::Coll [lookup/list/list_ids] > - Bric::Util::Coll::Action > - Bric::Util::Coll::Addr > - Bric::Util::Coll::Addr::Person > - Bric::Util::Coll::Contact > - Bric::Util::Coll::Keyword > - Bric::Util::Coll::Member > - Bric::Util::Coll::OCElement > - Bric::Util::Coll::OCInclude > - Bric::Util::Coll::OutputChannel > - Bric::Util::Coll::Priv > - Bric::Util::Coll::Resource > - Bric::Util::Coll::Rule > - Bric::Util::Coll::Server > - Bric::Util::Coll::ServerType > - Bric::Util::Coll::Site > - Bric::Util::Coll::Subelement > - Bric::Util::Event [lookup/list/list_ids] > - Bric::Util::EventType [lookup/list/list_ids] > - Bric::Util::Grp [lookup/list/list_ids] > - Bric::Util::Grp::AlertType > - Bric::Util::Grp::Asset > - Bric::Util::Grp::AssetVersion > - Bric::Util::Grp::ATType > - Bric::Util::Grp::CategorySet > - Bric::Util::Grp::ContribType > - Bric::Util::Grp::Desk > - Bric::Util::Grp::Dest > - Bric::Util::Grp::Event > - Bric::Util::Grp::Grp > - Bric::Util::Grp::Job > - Bric::Util::Grp::Keyword > - Bric::Util::Grp::Org > - Bric::Util::Grp::OutputChannel > - Bric::Util::Grp::Media > - Bric::Util::Grp::MediaType > - Bric::Util::Grp::Person > - Bric::Util::Grp::Pref > - Bric::Util::Grp::Source > - Bric::Util::Grp::Site > - Bric::Util::Grp::Story > - Bric::Util::Grp::SubelementType > - Bric::Util::Grp::ElementType > - Bric::Util::Grp::Template > - Bric::Util::Grp::User > - Bric::Util::Grp::Workflow > - Bric::Util::Grp::Parts::Member [lookup/list/list_ids] > - Bric::Util::Grp::Parts::Member::Contrib [lookup/(inherits)/ > (inherits)] > - Bric::Util::Job [lookup/list/list_ids] > - Bric::Util::Job::Dist > - Bric::Util::Job::Pub > - Bric::Util::MediaType [lookup/list/list_ids] > - Bric::Util::Pref [lookup/list/list_ids] > - Bric::Util::Priv [lookup/list/list_ids] > - Bric::Util::Trans::FS [XXX/XXX/XXX (maybe shouldn't subclass > Bric.pm)] > - Bric::Util::Trans::FTP [XXX/XXX/XXX (maybe shouldn't subclass > Bric.pm)] > - Bric::Util::Trans::Jabber [XXX/XXX/XXX (maybe shouldn't subclass > Bric.pm)] > - Bric::Util::Trans::Mail [XXX/XXX/XXX (maybe shouldn't subclass > Bric.pm)] > - Bric::Util::Trans::SFTP [XXX/XXX/XXX (maybe shouldn't subclass > Bric.pm)] > - Bric::Util::Trans::WebDAV [XXX/XXX/XXX (maybe shouldn't subclass > Bric.pm)] +6 > - Bric::Util::UserPref [lookup/list/XXX] > > Probably the only "important" omissions are: > * no lookup: Bric::Biz::Element > * no list_ids: Bric::Util::Attribute, Bric::Util::Class, > Bric::Util::UserPref Is Attribute still used? I guess these methods were never needed. > The following classes don't use the Bric interface: > Bric::*::Handler > Bric::App::Auth*, Apache*, Cache, Callback*, Event, > Session, Util > Bric::Config > Bric::SOAP* > Bric::Util::Auth*, Apache*, Cookie, CharTrans, DB*, > FTP::*, Fault*, Grp::AssetLanguage, Language*, > Priv::Parts::Const, Time Thanks! David
|