| Squatting documentation | Contained in the Squatting distribution. |
Squatting::With::PerHostConfig - vary %CONFIG based on $c->env->{HTTP_HOST}
First, define a lookup_config_for_host method.
use Rhetoric 'With::PerHostConfig';
{
package Rhetoric;
our %HOST_CONFIG = (
'localhost' => {
theme => 'default',
},
'test1.local' => {
theme => 'scary',
},
m.local => {
theme => 'mobile',
},
);
# How you choose to implement this method is completely up to you.
# Feel free to pull data from a database if you so desire.
sub lookup_config_for_host {
my ($class, $host) = @_;
return $HOST_CONFIG{$host};
}
}
This plugin lets you vary a Squatting app's %CONFIG based on the host name used to make the HTTP request.
| Squatting documentation | Contained in the Squatting distribution. |
package Squatting::With::PerHostConfig; use common::sense; # # It's up to you to define a custom class method called lookup_config_for_host! # # Given a host, return a config hashref. sub config_for_host { my ($class, $host) = @_; if ($class->can('lookup_config_for_host')) { return $class->lookup_config_for_host($host); } else { return undef; } } # If a custom config is found, merge %CONFIG with the contents of the custom config. sub service { no strict 'refs'; my ($class, $c, @args) = @_; my $host_config = $class->config_for_host($c->env->{HTTP_HOST}); if ($host_config) { my $config = \%{$class . "::CONFIG"}; local %{$class . "::CONFIG"} = %$config; for (keys %$host_config) { ${$class . "::CONFIG"}{$_} = $host_config->{$_}; } $class->next::method($c, @args); } else { $class->next::method($c, @args); } } 1; __END__
# Local Variables: *** # mode: cperl *** # indent-tabs-mode: nil *** # cperl-close-paren-offset: -2 *** # cperl-continued-statement-offset: 2 *** # cperl-indent-level: 2 *** # cperl-indent-parens-as-block: t *** # cperl-tab-always-indent: nil *** # End: *** # vim:tabstop=2 softtabstop=2 shiftwidth=2 shiftround expandtab =cut