From 2e1a1cd2e6d1d803350fc0e6799387848658df4c Mon Sep 17 00:00:00 2001 From: Craig Smith Date: Tue, 23 Oct 2012 20:59:13 +1100 Subject: [PATCH] Handle empty yaml files. --- lib/settingslogic.rb | 3 ++- spec/settings_empty.rb | 3 +++ spec/settings_empty.yml | 0 spec/settingslogic_spec.rb | 4 ++++ spec/spec_helper.rb | 1 + 5 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 spec/settings_empty.rb create mode 100644 spec/settings_empty.yml diff --git a/lib/settingslogic.rb b/lib/settingslogic.rb index 227eeea..ce9adff 100644 --- a/lib/settingslogic.rb +++ b/lib/settingslogic.rb @@ -111,7 +111,8 @@ class Settingslogic < Hash when Hash self.replace hash_or_file else - hash = YAML.load(ERB.new(open(hash_or_file).read).result).to_hash + file_contents = open(hash_or_file).read + hash = file_contents.empty? ? {} : YAML.load(ERB.new(file_contents).result).to_hash if self.class.namespace hash = hash[self.class.namespace] or return missing_key("Missing setting '#{self.class.namespace}' in #{hash_or_file}") end diff --git a/spec/settings_empty.rb b/spec/settings_empty.rb new file mode 100644 index 0000000..115e3b4 --- /dev/null +++ b/spec/settings_empty.rb @@ -0,0 +1,3 @@ +class SettingsEmpty < Settingslogic + source "#{File.dirname(__FILE__)}/settings_empty.yml" +end diff --git a/spec/settings_empty.yml b/spec/settings_empty.yml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/spec/settings_empty.yml diff --git a/spec/settingslogic_spec.rb b/spec/settingslogic_spec.rb index b5ec729..e37ce29 100644 --- a/spec/settingslogic_spec.rb +++ b/spec/settingslogic_spec.rb @@ -153,6 +153,10 @@ describe "Settingslogic" do Settings.name.should == 'test' end + it "should handle empty file" do + SettingsEmpty.keys.should eql([]) + end + # Put this test last or else call to .instance will load @instance, # masking bugs. it "should be a hash" do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index caf8f9e..cc2cc9a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,6 +6,7 @@ require 'settings' require 'settings2' require 'settings3' require 'settings4' +require 'settings_empty' # Needed to test Settings3 Object.send :define_method, 'collides' do -- libgit2 0.21.0