From eeadde31f7995f4a2fffa14364a0de5deb37d512 Mon Sep 17 00:00:00 2001 From: Nate Wiger Date: Fri, 12 Feb 2010 07:44:38 +0800 Subject: [PATCH] handling of nil (missing) file specified as source --- lib/settingslogic.rb | 4 +++- spec/settingslogic_spec.rb | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/settingslogic.rb b/lib/settingslogic.rb index e5c12fd..fa53098 100644 --- a/lib/settingslogic.rb +++ b/lib/settingslogic.rb @@ -9,7 +9,7 @@ class Settingslogic < Hash def name # :nodoc: instance.key?("name") ? instance.name : super end - + # Enables Settings.get('nested.key.name') for dynamic access def get(key) parts = key.split('.') @@ -97,6 +97,8 @@ class Settingslogic < Hash def initialize(hash_or_file = self.class.source, section = nil) #puts "new! #{hash_or_file}" case hash_or_file + when nil + raise Errno::ENOENT, "No file specified as Settingslogic source" when Hash self.replace hash_or_file else diff --git a/spec/settingslogic_spec.rb b/spec/settingslogic_spec.rb index 24ed978..e95a0e6 100644 --- a/spec/settingslogic_spec.rb +++ b/spec/settingslogic_spec.rb @@ -96,6 +96,17 @@ describe "Settingslogic" do Settings.toplevel.should == '42' end + it "should raise an error on a nil source argument" do + class NoSource < Settingslogic; end + e = nil + begin + NoSource.foo.bar + rescue => e + e.should be_kind_of Errno::ENOENT + end + e.should_not be_nil + 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. -- libgit2 0.21.0