Commit eeadde31f7995f4a2fffa14364a0de5deb37d512
Committed by
Ben Johnson
1 parent
872a1032
Exists in
master
handling of nil (missing) file specified as source
Showing
2 changed files
with
14 additions
and
1 deletions
Show diff stats
lib/settingslogic.rb
... | ... | @@ -9,7 +9,7 @@ class Settingslogic < Hash |
9 | 9 | def name # :nodoc: |
10 | 10 | instance.key?("name") ? instance.name : super |
11 | 11 | end |
12 | - | |
12 | + | |
13 | 13 | # Enables Settings.get('nested.key.name') for dynamic access |
14 | 14 | def get(key) |
15 | 15 | parts = key.split('.') |
... | ... | @@ -97,6 +97,8 @@ class Settingslogic < Hash |
97 | 97 | def initialize(hash_or_file = self.class.source, section = nil) |
98 | 98 | #puts "new! #{hash_or_file}" |
99 | 99 | case hash_or_file |
100 | + when nil | |
101 | + raise Errno::ENOENT, "No file specified as Settingslogic source" | |
100 | 102 | when Hash |
101 | 103 | self.replace hash_or_file |
102 | 104 | else | ... | ... |
spec/settingslogic_spec.rb
... | ... | @@ -96,6 +96,17 @@ describe "Settingslogic" do |
96 | 96 | Settings.toplevel.should == '42' |
97 | 97 | end |
98 | 98 | |
99 | + it "should raise an error on a nil source argument" do | |
100 | + class NoSource < Settingslogic; end | |
101 | + e = nil | |
102 | + begin | |
103 | + NoSource.foo.bar | |
104 | + rescue => e | |
105 | + e.should be_kind_of Errno::ENOENT | |
106 | + end | |
107 | + e.should_not be_nil | |
108 | + end | |
109 | + | |
99 | 110 | # This one edge case currently does not pass, because it requires very |
100 | 111 | # esoteric code in order to make it pass. It was judged not worth fixing, |
101 | 112 | # as it introduces significant complexity for minor gain. | ... | ... |