diff --git a/lib/WebGUI/Session/Setting.pm b/lib/WebGUI/Session/Setting.pm index ffb6054c6..06d12d601 100644 --- a/lib/WebGUI/Session/Setting.pm +++ b/lib/WebGUI/Session/Setting.pm @@ -100,6 +100,30 @@ sub get { } +#------------------------------------------------------------------- + +=head2 has ( $param ) + +Returns true if the requested setting exists in this object's cache of the settings. +This works better than using ->get, since it doesn't care about the truthiness of +the value of the setting. + +This method will have little use outside of upgrade and install scripts, to prevent +them from creating and/or overwriting existing settings. + +=head3 $param + +The setting to check. + +=cut + +sub has { + my $self = shift; + my $param = shift; + return exists $self->{_settings}{$param}; +} + + #------------------------------------------------------------------- =head2 new ( session ) diff --git a/t/Session/Setting.t b/t/Session/Setting.t index 29a6a657e..f83a9c4ab 100644 --- a/t/Session/Setting.t +++ b/t/Session/Setting.t @@ -15,7 +15,7 @@ use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 6; # increment this value for each test you create +use Test::More tests => 9; # increment this value for each test you create my $session = WebGUI::Test->session; @@ -27,6 +27,10 @@ $session->setting->set("inmate","37927"); my ($value) = $session->db->quickArray("select value from settings where name='inmate'"); is($value, '37927', "set()"); is($session->setting->get("inmate"), '37927', 'set() also updates object cache'); +is($session->setting->has('inmate'), 1, 'has checks for existance'); +$session->setting->set('inmate', 0); +is($session->setting->get('inmate'), 0, 'get will get 0 values'); +is($session->setting->has('inmate'), 1, 'has checks for existance, regardless of value'); $session->setting->remove("inmate"); my ($value) = $session->db->quickArray("select value from settings where name='inmate'"); is($value, undef, "delete()");