package File::Assets::Kind; use strict; use warnings; use Object::Tiny qw/kind type head tail/; use Carp; sub new { my $self = bless {}, shift; confess "Uhh, whut?" unless $self->{kind} = my $kind = shift; my @kind = split m/-/, $kind, 2; my $type = shift; unless ($type) { $type = $kind[0]; $type = File::Assets::Util->parse_type($type); } $self->{type} = $type; $kind[1] = "" unless defined $kind[1]; $self->{tail} = my $tail = $kind[1]; $self->{head} = ($type->extensions)[0]; return $self; } sub extension { my $self = shift; return ($self->type->extensions)[0]; } sub is_better_than_or_equal { my $self = shift; my $other = shift; return 1 if $self->kind eq $other->kind; return $self->is_better_than($other); } sub is_better_than { my $self = shift; my $other = shift; return 0 unless File::Assets::Util->same_type($self->type, $other->type); my $self_tail = $self->tail; my $other_tail = $other->tail; if (length $self_tail && length $other_tail) { return 0 unless 0 == index($self->tail, $other->tail) || 0 == index($other->tail, $self->tail); } return length $self->tail > length $other->tail; } 1;