diff --git a/README.rdoc b/README.rdoc index 7bcd4ae..36cd8a4 100644 --- a/README.rdoc +++ b/README.rdoc @@ -72,6 +72,9 @@ If your default settings seem to be overwriting your environment-specific settin >> Settings.cool.saweet => "nested settings" + >> Settings.get('cool.saweet') + => "nested settings" + >> Settings.neat_setting => 800 diff --git a/lib/settingslogic.rb b/lib/settingslogic.rb index a99acaf..c189bd7 100644 --- a/lib/settingslogic.rb +++ b/lib/settingslogic.rb @@ -19,6 +19,10 @@ def get(key) curs = curs.send(p) end curs + rescue + return nil if suppress_errors + + raise end def source(value = nil) diff --git a/spec/settingslogic_spec.rb b/spec/settingslogic_spec.rb index 34e4798..45a9eae 100644 --- a/spec/settingslogic_spec.rb +++ b/spec/settingslogic_spec.rb @@ -115,6 +115,18 @@ class NoSource < Settingslogic; end Settings4.non_existent_key.should be_nil end + + context "#get" do + it "should suppress errors for nonexistent nested parameters" do + expect { Settings4.get('non.existent.key') }.not_to raise_exception + end + + it "should throw an exception for nonexistent nested parameters when suppress_errors=false" do + expect { Settings.get('non.existent.key') }.to raise_exception + end + end + + # This one edge case currently does not pass, because it requires very # esoteric code in order to make it pass. It was judged not worth fixing, # as it introduces significant complexity for minor gain.