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 )