|
NAMERose::Class::MakeMethods::Set - Create class methods to manage sets. SYNOPSIS package MyClass;
use Rose::Class::MakeMethods::Set
(
inheritable_set =>
[
required_name =>
{
add_implies => 'add_valid_name',
test_method => 'name_is_required',
},
],
inherited_set =>
[
valid_name =>
{
test_method => 'name_is_valid',
},
],
);
...
package MySubClass;
our @ISA = qw(MyClass);
...
MyClass->add_valid_names('A', 'B', 'C');
MyClass->add_required_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D';
$r1 = join(',', MyClass->required_names); # 'D'
$v2 = join(',', MySubClass->valid_names); # 'A,B,C,D';
$r2 = join(',', MySubClass->required_names); # 'D'
MySubClass->add_required_names('X', 'Y');
$v2 = join(',', MySubClass->valid_names); # 'A,B,C,D,X,Y';
$r2 = join(',', MySubClass->required_names); # 'D,X,Y'
MySubClass->delete_valid_names('B', 'X');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D';
$r1 = join(',', MyClass->required_names); # 'D'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'D,X,Y'
MySubClass->delete_required_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D';
$r1 = join(',', MyClass->required_names); # 'D'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'X,Y'
DESCRIPTIONRose::Class::MakeMethods::Set is a method maker that inherits from Rose::Object::MakeMethods. See the Rose::Object::MakeMethods documentation to learn about the interface. The method types provided by this module are described below. All methods work only with classes, not objects. METHODS TYPES
Example: package MyClass;
use Rose::Class::MakeMethods::Set
(
inheritable_set =>
[
valid_name =>
{
test_method => 'name_is_valid',
delete_implies => 'delete_required_name',
},
required_name =>
{
add_implies => 'add_valid_name',
test_method => 'name_is_required',
},
],
);
package MySubClass;
our @ISA = qw(MyClass);
...
MyClass->add_valid_names('A', 'B', 'C');
MyClass->add_required_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D';
$r1 = join(',', MyClass->required_names); # 'D'
$v2 = join(',', MySubClass->valid_names); # 'A,B,C,D';
$r2 = join(',', MySubClass->required_names); # 'D'
MySubClass->add_required_names('X', 'Y');
$v2 = join(',', MySubClass->valid_names); # 'A,B,C,D,X,Y';
$r2 = join(',', MySubClass->required_names); # 'D,X,Y'
MySubClass->delete_valid_names('B', 'X');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D';
$r1 = join(',', MyClass->required_names); # 'D'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'D,Y'
MySubClass->delete_required_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D';
$r1 = join(',', MyClass->required_names); # 'D'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'Y'
MyClass->name_is_required('D'); # true
MySubClass->name_is_required('D'); # false
$h = MyClass->valid_names_hash;
# Careful! This is the actual hash used for set storage!
# You should use delete_valid_name() instead!
delete $h->{'C'};
MySubClass->required_name_value(Y => 'xval');
print MySubClass->required_name_value('Y'); # 'xval'
%r = MySubClass->required_names_hash;
print $r{'Y'}; # 'xval'
# Okay: %r is a (shallow) copy, not the actual hash
delete $r{'Y'};
Example: package MyClass;
use Rose::Class::MakeMethods::Set
(
inherited_set =>
[
valid_name =>
{
test_method => 'name_is_valid',
delete_implies => 'delete_required_name',
inherit_implies => 'inherit_required_name',
},
required_name =>
{
add_implies => 'add_valid_name',
test_method => 'name_is_required',
},
],
);
...
package MySubClass;
our @ISA = qw(MyClass);
...
MyClass->add_valid_names('A', 'B', 'C');
MyClass->add_required_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D';
$r1 = join(',', MyClass->required_names); # 'D'
$v2 = join(',', MySubClass->valid_names); # 'A,B,C,D';
$r2 = join(',', MySubClass->required_names); # 'D'
MyClass->add_required_names('X', 'Y');
$v2 = join(',', MySubClass->valid_names); # 'A,B,C,D,X,Y';
$r2 = join(',', MySubClass->required_names); # 'D,X,Y'
MySubClass->delete_valid_names('B', 'X');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D,X,Y';
$r1 = join(',', MyClass->required_names); # 'D,X,Y'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'D,Y'
MySubClass->delete_required_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D,X,Y';
$r1 = join(',', MyClass->required_names); # 'D,X,Y'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'Y'
MySubClass->inherit_required_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D,X,Y';
$r1 = join(',', MyClass->required_names); # 'D,X,Y'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'D,Y'
MySubClass->delete_valid_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D,X,Y';
$r1 = join(',', MyClass->required_names); # 'D,X,Y'
$v2 = join(',', MySubClass->valid_names); # 'A,C,Y';
$r2 = join(',', MySubClass->required_names); # 'Y'
MySubClass->inherit_valid_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,D,X,Y';
$r1 = join(',', MyClass->required_names); # 'D,X,Y'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'D,Y'
MyClass->delete_valid_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,X,Y';
$r1 = join(',', MyClass->required_names); # 'X,Y'
$v2 = join(',', MySubClass->valid_names); # 'A,C,Y';
$r2 = join(',', MySubClass->required_names); # 'Y'
MySubClass->add_required_name('D');
$v1 = join(',', MyClass->valid_names); # 'A,B,C,X,Y';
$r1 = join(',', MyClass->required_names); # 'X,Y'
$v2 = join(',', MySubClass->valid_names); # 'A,C,D,Y';
$r2 = join(',', MySubClass->required_names); # 'D,Y'
$h = MyClass->valid_names_hash;
# This has no affect on the set. $h is not a reference to the
# actual hash used for set storage.
delete $h->{'C'};
$v1 = join(',', MyClass->valid_names); # 'A,B,C,X,Y';
$r1 = join(',', MyClass->required_names); # 'X,Y'
AUTHORJohn C. Siracusa (siracusa@gmail.com) LICENSECopyright (c) 2010 by John C. Siracusa. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
|