Bivio::Cache::SEOPrefix
# Copyright (c) 2010 bivio Software, Inc. All Rights Reserved. # $Id$ package Bivio::Cache::SEOPrefix; use strict; use Bivio::Base 'Cache.RealmFileBase'; my($_C) = b_use('FacadeComponent.Constant'); my($_RSL) = b_use('Model.RealmSettingList'); my($_BASE) = 'SEOPrefix'; b_use('Biz.PropertyModel')->register_handler(__PACKAGE__); sub FILE_PATH_REGEX { return qr{\Q@{[lc(b_use('Type.FilePath')->delete_suffix($_RSL->get_file_path($_BASE)))]}\E}is; } sub find_prefix_by_uri { my($proto, $uri, $req) = @_; my($map) = $proto->internal_retrieve($req); $uri = _clean($uri); while ($uri) { if (my $prefix = $map->{$uri}) { return $prefix; } $uri =~ s{/[^/]*$}{}; } return undef; } sub internal_compute { my($proto, $req) = @_; my($res) = $_RSL->new($req) ->set_ephemeral ->unauth_get_all_settings( $proto->internal_realm_id($req), $_BASE => [ [qw(uri Text)], [qw(prefix Text)], ], ); return {map( (_clean($_->{uri}) => $_->{prefix}), values(%$res), )}; } sub internal_realm_id { my($proto, $req) = @_; return ref($proto) ? $proto->get('realm_id') : $_C->get_value('site_realm_id', $req) || shift->SUPER::internal_realm_id(@_); } sub _clean { my($uri) = @_; $uri = join('/', split(m{/+}, lc($uri))); $uri =~ s{^(?=[^/])}{/}; return $uri; } 1;