use utf8; package Pinto::Schema::Result::Registration; # Created by DBIx::Class::Schema::Loader # DO NOT MODIFY THE FIRST PART OF THIS FILE use strict; use warnings; use Moose; use MooseX::NonMoose; use MooseX::MarkAsMethods autoclean => 1; extends 'DBIx::Class::Core'; __PACKAGE__->table("registration"); __PACKAGE__->add_columns( "id", { data_type => "integer", is_auto_increment => 1, is_nullable => 0 }, "revision", { data_type => "integer", is_foreign_key => 1, is_nullable => 0 }, "package_name", { data_type => "text", is_nullable => 0 }, "package", { data_type => "integer", is_foreign_key => 1, is_nullable => 0 }, "distribution", { data_type => "integer", is_foreign_key => 1, is_nullable => 0 }, "is_pinned", { data_type => "boolean", is_nullable => 0 }, ); __PACKAGE__->set_primary_key("id"); __PACKAGE__->add_unique_constraint( "revision_package_name_unique", [ "revision", "package_name" ] ); __PACKAGE__->belongs_to( "distribution", "Pinto::Schema::Result::Distribution", { id => "distribution" }, { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, ); __PACKAGE__->belongs_to( "package", "Pinto::Schema::Result::Package", { id => "package" }, { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, ); __PACKAGE__->belongs_to( "revision", "Pinto::Schema::Result::Revision", { id => "revision" }, { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, ); with 'Pinto::Role::Schema::Result'; # Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-03-04 12:39:54 # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:AkBHZ7hQ0BdZdv0DoCJufA #------------------------------------------------------------------------------ # ABSTRACT: Represents the relationship between a Package and a Stack #------------------------------------------------------------------------------ our $VERSION = '0.097_03'; # VERSION #------------------------------------------------------------------------------ use String::Format; use Pinto::Util qw(itis throw); use overload ( '""' => 'to_string', 'cmp' => 'string_compare', '<=>' => 'numeric_compare', fallback => undef ); #------------------------------------------------------------------------------- sub FOREIGNBUILDARGS { my ( $class, $args ) = @_; # Should we default these here or in the database? $args ||= {}; $args->{is_pinned} ||= 0; return $args; } #------------------------------------------------------------------------------- sub update { throw 'PANIC: Update to registrations are not allowed' } #------------------------------------------------------------------------------- sub pin { my ($self) = @_; throw "$self is already pinned" if $self->is_pinned; $self->delete; my $copy = $self->copy( { is_pinned => 1 } ); return $copy; } #------------------------------------------------------------------------------- sub unpin { my ($self) = @_; throw "$self is not pinned" if not $self->is_pinned; $self->delete; my $copy = $self->copy( { is_pinned => 0 } ); return $copy; } #------------------------------------------------------------------------------- sub numeric_compare { my ( $reg_a, $reg_b ) = @_; my $pkg = __PACKAGE__; throw "Can only compare $pkg objects" if not( itis( $reg_a, $pkg ) && itis( $reg_b, $pkg ) ); return 0 if $reg_a->id == $reg_b->id; return $reg_a->package <=> $reg_b->package; } #------------------------------------------------------------------------------ sub string_compare { my ( $reg_a, $reg_b ) = @_; my $class = __PACKAGE__; throw "Can only compare $class objects" if not( itis( $reg_a, $class ) && itis( $reg_b, $class ) ); return 0 if $reg_a->id == $reg_b->id; return ( $reg_a->package->distribution->author cmp $reg_b->package->distribution->author ) || ( $reg_a->package->distribution->vname cmp $reg_b->package->distribution->vname ) || ( $reg_a->package->vname cmp $reg_b->package->vname ); } #------------------------------------------------------------------------------ sub flags { my ($self) = @_; my $format = '%m%s%y'; return $self->to_string($format); } #------------------------------------------------------------------------------ sub to_string { my ( $self, $format ) = @_; # my ($pkg, $file, $line) = caller; # warn __PACKAGE__ . " stringified from $file at line $line"; my %fspec = ( p => sub { $self->package->name }, P => sub { $self->package->vname }, v => sub { $self->package->version }, y => sub { $self->is_pinned ? '!' : '-' }, m => sub { $self->distribution->is_devel ? 'd' : 'r' }, h => sub { $self->distribution->path }, H => sub { $self->distribution->native_path }, f => sub { $self->distribution->archive }, s => sub { $self->distribution->is_local ? 'l' : 'f' }, S => sub { $self->distribution->source }, a => sub { $self->distribution->author }, d => sub { $self->distribution->name }, D => sub { $self->distribution->vname }, V => sub { $self->distribution->version }, u => sub { $self->distribution->uri }, i => sub { $self->revision->uuid_prefix }, F => sub { $self->flags }, ); # Some attributes are just undefined, usually because of # oddly named distributions and other old stuff on CPAN. no warnings 'uninitialized'; ## no critic qw(NoWarnings); $format ||= $self->default_format(); return String::Format::stringf( $format, %fspec ); } #------------------------------------------------------------------------------- sub default_format { return '%a/%D/%P/%y'; # AUTHOR/DIST_VNAME/PKG_VNAME/PIN_STATUS } #------------------------------------------------------------------------------ __PACKAGE__->meta->make_immutable; #------------------------------------------------------------------------------ 1; __END__ =pod =encoding UTF-8 =for :stopwords Jeffrey Ryan Thalhammer BenRifkah Fowler Jakob Voss Karen Etheridge Michael G. Bergsten-Buret Schwern Oleg Gashev Steffen Schwigon Tommy Stanton Wolfgang Kinkeldei Yanick Boris Champoux brian d foy hesco popl Däppen Cory G Watson David Steinbrunner Glenn =head1 NAME Pinto::Schema::Result::Registration - Represents the relationship between a Package and a Stack =head1 VERSION version 0.097_03 =head1 NAME Pinto::Schema::Result::Registration =head1 TABLE: C =head1 ACCESSORS =head2 id data_type: 'integer' is_auto_increment: 1 is_nullable: 0 =head2 revision data_type: 'integer' is_foreign_key: 1 is_nullable: 0 =head2 package_name data_type: 'text' is_nullable: 0 =head2 package data_type: 'integer' is_foreign_key: 1 is_nullable: 0 =head2 distribution data_type: 'integer' is_foreign_key: 1 is_nullable: 0 =head2 is_pinned data_type: 'boolean' is_nullable: 0 =head1 PRIMARY KEY =over 4 =item * L =back =head1 UNIQUE CONSTRAINTS =head2 C =over 4 =item * L =item * L =back =head1 RELATIONS =head2 distribution Type: belongs_to Related object: L =head2 package Type: belongs_to Related object: L =head2 revision Type: belongs_to Related object: L =head1 L ROLES APPLIED =over 4 =item * L =back =head1 AUTHOR Jeffrey Ryan Thalhammer =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2013 by Jeffrey Ryan Thalhammer. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut