Bivio::Type::DocletFileName
# Copyright (c) 2006-2010 bivio Software, Inc. All Rights Reserved.
# $Id$
package Bivio::Type::DocletFileName;
use strict;
use Bivio::Base 'Type.FilePath';
sub ABSOLUTE_REGEX {
my($proto) = @_;
return qr{^@{[$proto->join(
'(?:' . join('|', map($proto->to_absolute(undef, $_), 0, 1)) . ')',
$proto->PATH_REGEX,
)]}$}is;
}
sub SQL_LIKE_BASE {
return '%';
}
sub from_absolute {
my($proto, $path) = @_;
b_die($path, ': not an absolute path')
unless my(@x) = ($path || '') =~ m{@{[$proto->ABSOLUTE_REGEX]}};
return join('', @x);
}
sub from_literal {
my($proto, $value) = @_;
return (undef, undef)
unless defined($value) && length($value);
$value = $proto->from_literal_stripper($value);
return (undef, $proto->ERROR)
unless length($value);
my($v, $e) = $proto->SUPER::from_literal($value);
return ($v, $e)
unless defined($v);
$v =~ s{^/}{};
return $v =~ m{^@{[$proto->REGEX]}$}s ? $v : (undef, $proto->ERROR);
}
sub from_literal_stripper {
return $_[1];
}
sub is_ignored_value {
my($proto, $value) = @_;
return defined($value) && $value =~ qr{(?:^|/)\.|(?:\.bak|\~)$}si ? 1 : 0;
}
sub is_valid {
my($proto, $value) = @_;
return defined($value) && $value =~ qr{^@{[$proto->REGEX]}$} ? 1 : 0;
}
sub public_path_info {
my($proto, $value) = @_;
return $value
unless $value;
$value =~ s{^\Q@{[$proto->PUBLIC_FOLDER_ROOT]}\E}{}i;
return $value;
}
sub to_sql_like_path {
my($proto, $is_public) = @_;
return lc($proto->to_absolute($proto->SQL_LIKE_BASE, $is_public));
}
sub uri_hash_for_realm_and_path {
my($self, $realm_name, $realm_file_path) = @_;
return {
task_id => b_use('UI.Facade')
->get_from_source($self->req)
->is_site_realm_name($realm_name)
? 'SITE_WIKI_VIEW'
: 'FORUM_WIKI_VIEW',
realm => $realm_name,
query => undef,
path_info => $self->from_absolute($realm_file_path),
};
}
1;