Looking for the latest version? Download EVDB.zip (13.1 kB)
Home
Name Modified Size Downloads / Week Status
Totals: 18 Items   99.3 kB 12
plugins 2010-10-24
EVDB.tar.gz 2010-11-13 10.3 kB 11 weekly downloads
EVDB.zip 2010-11-13 13.1 kB 11 weekly downloads
EVDB.class.php 2010-11-12 13.5 kB 11 weekly downloads
EVDBObject.class.php 2010-11-12 10.1 kB 11 weekly downloads
sfYamlParser.class.php 2010-10-24 16.1 kB 22 weekly downloads
sfYamlInline.class.php 2010-10-24 11.5 kB 11 weekly downloads
sfYamlDumper.class.php 2010-10-24 1.6 kB 11 weekly downloads
sfYaml.class.php 2010-10-24 3.2 kB 11 weekly downloads
schema.evdb.lat69m.php 2010-10-24 1.7 kB 11 weekly downloads
schema.evdb 2010-10-24 394 Bytes 11 weekly downloads
README 2010-10-24 4.0 kB 11 weekly downloads
LICENSE.SF 2010-10-24 1.1 kB 0
LICENSE 2010-10-24 1.1 kB 0
index.php 2010-10-24 415 Bytes 0
EVDBYaml.class.php 2010-10-24 9.1 kB 0
EVDBPlugin.class.php 2010-10-24 1.7 kB 0
EVDBException.class.php 2010-10-24 461 Bytes 0
Key features of EVDB: ***** You can define "classes" or "types" of objects which determine: - a collection where the object of a given class is stored in MongoDB (like a table in MySQL) - a default set of properties [Example]: Person: name: string(Default Name) age: integer(18) [/Example] ***** A property can be either of a built-in type (boolean, string, integer, float; with or without the default value) or any other previously defined type (as an embedded property or a reference pointer) [Example] Address: city: string street: string house_number: string Place: name: string address: *Address User: login: string password: string address: *Address # stored inside the User object, independent from any other Address objects favourite_place: &Place # reference pointer to the actual Place object [/Example] ***** Arrays can be of defined or undefined length [Example] Actor: movies: string[] top_3_awards: string[3] [/Example] ***** A type can inherit from 0 or more previously defined types [Example] %Person: # "%" defines a class as abstract, see below name: string(Default Name) Actor < Person: movies: string[] Bodybuilder < Person: lift_weight: float(123.4) Politician < Person: party: string elected_on: integer # The fun part ArnoldSchwarzenegger < [Actor, Bodybuilder, Politician]: name: string(!!Arnold Schwarzenegger) # "!!" defines the casting rule, see below [/Example] So, an object of ArnoldSchwarzenegger type will have the following default properties: - name (string, "Arnold Schwarzenegger" value by default) - movies (array) - lift_weight (float, 123.4 value by default) - party (string) - elected_on (integer) and will be stored in the "ArnoldSchwarzenegger" collection. Creating a new object is really simple: $actor = EVDB::create('Actor'); ***** Objects casting into another type can be done by writing something like: $actor = EVDB::create('Actor'); // see Actor type in the example above $politican = $actor->cast('Politician'); // it will have all default Politician properties added (and overwritten, if defined in the casting rules, see the name property of ArnoldSchwarzenegger type above for an example of the overwriting casting rule) Object after casting will be saved in the collection of its new type. ***** A class can be defined as abstract, meaning that it only acts as a property set definition. An object of the abstract type cannot be created nor can an object be cast into the abstract type. ***** Plugins for specific EVDB object actions can be added [Example] (EVDBUserPlugin <- customizes the "User" type) // example of an event listener public static function onBeforeSave(EVDBObject $obj) { self::ensureUnique($obj, 'login'); // doesn't allow storing the User object with the same value of "login" property $obj->password = self::encode($obj->password); // to prevent storing the open-text passwords in the database return TRUE; // if omitted, the object will not be saved! } // example of a "magic" function public static function getName($obj) { return $obj->first_name.' '.$obj->last_name; } [/Example] Collection/type plugins are automatically loaded by the EVDB, so to extend the functionality of a specific type defined in the EVDB schema, you just add a new file into the specific plugin directory (lib/DB/plugins) and the magic kicks in ;) ***** Queries may be performed using some more "magic" methods [Example] $politicians = EVDB::find5PoliticiansByParty('Democrats'); // returns an array of up to 5 "Politician" objects with the property party equals to "Democrats"; [/Example] Note: None of the "magic" methods is specified in the code, but if there's a "Politician" type with a "party" property, the methods like EVDB::findPoliticianByParty(), EVDB::findAllPoliticiansByParty(), EVDB::find123PoliticiansByParty(), etc. all can be used in the code.
Source: README, updated 2010-10-24