Kwiki

 view release on metacpan or  search on metacpan

lib/Kwiki/Preferences.pm  view on Meta::CPAN

package Kwiki::Preferences;
use Kwiki::Base -Base;

field class_id => 'preferences';
const preference_class => 'Kwiki::Preference';
field objects_by_class => {};

sub load {
    my $values = shift;
    my $prefs = $self->hub->registry->lookup->preference;
    for (sort keys %$prefs) {
        my $array = $prefs->{$_};
        my $class_id = $array->[0];
        my $hash = {@{$array}[1..$#{$array}]}
          or next;
        next unless $hash->{object};
        my $object = $hash->{object}->clone;
        $object->value($values->{$_});
        push @{$self->objects_by_class->{$class_id}}, $object;
        field($_);
        $self->$_($object);
    }
    return $self;
}

sub new_preferences {
    my $values = shift;
    my $new = bless {}, ref $self;
    $new->load($values);
    return $new;
}

sub new_preference {
    $self->preference_class->new(@_);
}

#------------------------------------------------------------------------------#
package Kwiki::Preference;
use Kwiki::Base '-base';

field 'id';
field 'name';
field 'description';
field 'query';
field 'type';
field 'choices';
field 'default';
field 'handler';
field 'owner_id';
field 'size' => 20;
field 'edit';
field 'new_value';
field 'error';

sub new() {
    my $class = shift;
    my $owner = shift;
    my $self = bless {}, $class;
    my $id = shift || '';
    $self->id($id);
    my $name = $id;
    $name =~ s/_/ /g;
    $name =~ s/\b(.)/\u$1/g;
    $self->name($name);
    $self->query("$name?");
    $self->type('boolean');
    $self->default(0);
    $self->handler("${id}_handler");
    $self->owner_id($owner->class_id);
    return $self;
}



( run in 1.571 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )