install OPsudo perl -MCPAN -e 'install OP' This installs the latest stable version of OP. You will also need DBD::mysql. create a databaseOP will create any necessary tables, but a DBA must create the initial database, as well as run any required GRANT statements. mysql -u root -p create database yourapp; grant all on yourapp.* to op@localhost; create an object classIn file YourApp/Example.pm: use strict; use warnings; use OP; create "YourApp::Example" => { }; assert variable typesAsserted types map to same-named database table columns. create "YourApp::Example" => { favoriteNumber => OP::Int->assert( subtype( optional => true ) ), favoriteColor => OP::Str->assert( qw| red green blue |, subtype( optional => true ) ), }; By default, instances have attributes: id, name, ctime, and mtime. |
make a new objectuse YourApp::Example; my $class = "YourApp::Example"; my $example = $class->new( name => "HelloWorld" ); save an object$example->save; load an objectLoad by GUID: my $example = $class->load($id); Load by Name: my $example = $class->loadByName("HelloWorld"); remove an object$example->remove query the databaseUse DBI statement handles: my $sth = $class->query( sprintf q| select id, name from %s |, $class->tableName ); while ( my @row = $sth->fetchrow_array ) { print join ",", @row; print "\n"; }; |
set, get, and delete an attributeExplicit: $example->setFavoriteColor("blue"); my $color = $example->favoriteColor; $example->deleteFavoriteColor; Iterative: $example->set("favoriteColor", "blue"); my $color = $example->get("favoriteColor"); $example->delete("favoriteColor"); dump object to json or yamlmy $json = $object->toJson; my $yaml = $object->toYaml; # # Prints YAML # $object->print; load json or yaml as objectmy $examp1 = $class->loadJson($json); my $examp2 = $class->loadYaml($yaml); assert a foreign id constraintUse OP::ExtID: create "YourApp::ThisClass" => { relatedId => OP::ExtID->assert( "YourApp::OtherClass" ), }; |
class methodInline: create "YourApp::Example" => { someMethod => sub { my $class = shift; # ... }, }; instance methodInline: create "YourApp::Example" => { someMethod => sub { my $self = shift; # ... }, }; collect array elementsmy $collected = $array->collect( sub { my $item = shift; print "Working with element $item\n" return if $item == $foo; # Yield nothing break if $item == $bar; # Stop collecting # Upstream $things, continue curr iteration: emit $thing1, [$thing2, ...]; # Upstream $things, skip to next iteration: yield $thing1, [$thing2, ...]; } ); |
OP classes may be instantiated ($class->new(...)), or declared as inline attributes ($class->assert(...)). |