Socialtext::WikiObject::Factory - Create an approprate WikiObject from Magic Tags


Socialtext-Resting-Utils documentation Contained in the Socialtext-Resting-Utils distribution.

Index


Code Index:

NAME

Top

Socialtext::WikiObject::Factory - Create an approprate WikiObject from Magic Tags

SYNOPSIS

Top

  # Set a magic tag to define WikiObject subclass
  $rester->put_page($page_name, $page_text);
  $rester->put_pagetag($page_name, '.wikiobject=YAML');

  # Use the factory to create the appropriate class
  my $wo = Socialtext::WikiObject::Factory->new(
               rester => $rester,
               page => $page_name,
           );
  isa_ok $wo, 'Socialtext::WikiObject::YAML';

DESCRIPTION

Top

Socialtext::WikiObject::Factory reads magic tags on a page, and then creates a WikiObject of the appropriate class, as defined in the magic tag.

FUNCTIONS

Top

new( %opts )

Create a new wiki object. Options:

rester

Users must provide a Socialtext::Resting object setup to use the desired workspace and server.

page

The page to load. Mandatory.

AUTHOR

Top

Luke Closs, <luke.closs at socialtext.com>

BUGS

Top

Please report any bugs or feature requests to http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Socialtext-Resting-Utils. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

COPYRIGHT & LICENSE

Top


Socialtext-Resting-Utils documentation Contained in the Socialtext-Resting-Utils distribution.
package Socialtext::WikiObject::Factory;
use strict;
use warnings;
use Carp qw/croak/;

our $VERSION = '0.01';

sub new {
   my (undef, %opts) = @_;
   croak "rester is mandatory!" unless $opts{rester};
   croak "page is mandatory!" unless $opts{page};

   my $class = 'Socialtext::WikiObject';

   my $rester = $opts{rester};
   my @tags = $rester->get_pagetags($opts{page});
   for my $t (@tags) {
       if ($t =~ m/^\.wikiobject=(.+)$/) {
           $class .= '::' . ucfirst($1);
           last;
       }
   }

   eval "require $class";
   die if $@;
   return $class->new(%opts);
}

1;