From dfb85e82c094cc8a7ccbff8b0e2817c473a8122d Mon Sep 17 00:00:00 2001 From: toXXIc Date: Thu, 21 Feb 2013 10:37:11 +0300 Subject: [PATCH 1/2] Exceptions were thrown when trying to access nested property via 'get' method while suppress_errors is enabled. --- README.rdoc | 3 +++ lib/settingslogic.rb | 4 ++++ spec/settingslogic_spec.rb | 14 ++++++++++++++ 3 files changed, 21 insertions(+) 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..3ff5880 100644 --- a/spec/settingslogic_spec.rb +++ b/spec/settingslogic_spec.rb @@ -1,5 +1,7 @@ require File.expand_path(File.dirname(__FILE__) + "/spec_helper") +puts "Value: #{Settings.get('setting1.deep.child.value')}" + describe "Settingslogic" do it "should access settings" do Settings.setting2.should == 5 @@ -115,6 +117,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. From 7e6f7ffed9b127f6a69d8eb2d7df426f8a465e30 Mon Sep 17 00:00:00 2001 From: toXXIc Date: Thu, 21 Feb 2013 10:40:56 +0300 Subject: [PATCH 2/2] removed debug line. --- spec/settingslogic_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/settingslogic_spec.rb b/spec/settingslogic_spec.rb index 3ff5880..45a9eae 100644 --- a/spec/settingslogic_spec.rb +++ b/spec/settingslogic_spec.rb @@ -1,7 +1,5 @@ require File.expand_path(File.dirname(__FILE__) + "/spec_helper") -puts "Value: #{Settings.get('setting1.deep.child.value')}" - describe "Settingslogic" do it "should access settings" do Settings.setting2.should == 5