diff options
author | Julian Blake Kongslie <jblake@omgwallhack.org> | 2010-03-18 13:06:24 -0700 |
---|---|---|
committer | Julian Blake Kongslie <jblake@omgwallhack.org> | 2010-03-18 13:06:24 -0700 |
commit | 0df6b8d376c6cbac0ed3df910cdcc10c06bd3e18 (patch) | |
tree | b868e49eaba3592a9a26fd51aaa11c78ea127cb9 /usr/src/libpiny/lib/Piny/Repo.pm | |
parent | 46f08c97433ed083bb479b00637c6aa5cb7b24d3 (diff) | |
download | piny-code-0df6b8d376c6cbac0ed3df910cdcc10c06bd3e18.tar.gz piny-code-0df6b8d376c6cbac0ed3df910cdcc10c06bd3e18.zip |
Add methods for managing group membership, and some more constraints.
Diffstat (limited to 'usr/src/libpiny/lib/Piny/Repo.pm')
-rw-r--r-- | usr/src/libpiny/lib/Piny/Repo.pm | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/usr/src/libpiny/lib/Piny/Repo.pm b/usr/src/libpiny/lib/Piny/Repo.pm index 4783960..6dcabca 100644 --- a/usr/src/libpiny/lib/Piny/Repo.pm +++ b/usr/src/libpiny/lib/Piny/Repo.pm @@ -4,20 +4,43 @@ package Piny::Repo; use Moose; +use Moose::Util::TypeConstraints; use File::Find qw( find ); +use Piny::Group; use Piny::User; +# Types + +subtype 'Reponame' + => as 'Str' + => where { $_ =~ /^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/ } + => message { 'That name is not in the correct format for a piny repo.' } + ; + +subtype 'SimpleText' + => as 'Str' + => where { $_ =~ /^[\x{0020}-\x{FDCF}\x{FDF0}-\x{FFFD}]{1,80}$/ } + => message { 'That description is not in the correct format for a piny repo.' } + ; + # Attributes has 'name' => ( is => 'rw' - , isa => 'Str' + , isa => 'Reponame' , trigger => \&_rename_repo , required => 1 ); +has 'group' => + ( is => 'ro' + , isa => 'Piny::Group' + , lazy_build => 1 + , init_arg => undef + ); + has 'path' => ( is => 'ro' , isa => 'Str' @@ -27,7 +50,7 @@ has 'path' => has 'description' => ( is => 'rw' - , isa => 'Str' + , isa => 'SimpleText' , trigger => \&_set_description , lazy_build => 1 , init_arg => undef @@ -62,6 +85,20 @@ has 'globally_writable' => , init_arg => undef ); +# Public methods + +sub add_access { + my ( $s, @users ) = @_; + + $s->group( )->add_member( @users ); +}; + +sub remove_access { + my ( $s, @users ) = @_; + + $s->group( )->remove_member( @users ); +}; + # Triggers sub _rename_repo { @@ -108,6 +145,12 @@ around BUILDARGS => sub { }; }; +sub _build_group { + my ( $s ) = @_; + + return Piny::Group->new( groupname => "git-" . $s->name( ) ); +}; + sub _build_path { my ( $s ) = @_; |