Commit 872a103261b827d5d363ea6ba35f70cca4f191c3

Authored by Nate Wiger
Committed by Ben Johnson
1 parent 77825ec0
Exists in master

slight reorg and added spec demonstrating remaining edge case

lib/settingslogic.rb
... ... @@ -73,10 +73,15 @@ class Settingslogic < Hash
73 73 # of the singleton pattern. Basically this proxies Setting.foo to Setting.instance.foo
74 74 def create_accessors!
75 75 instance.each do |key,val|
76   - next unless key.to_s =~ /^\w+$/ # could have "some-setting:" which blows up eval
77   - instance_eval "def #{key}; instance.send(:#{key}); end"
  76 + create_accessor_for(key)
78 77 end
79 78 end
  79 +
  80 + def create_accessor_for(key)
  81 + return unless key.to_s =~ /^\w+$/ # could have "some-setting:" which blows up eval
  82 + instance_eval "def #{key}; instance.send(:#{key}); end"
  83 + end
  84 +
80 85 end
81 86  
82 87 # Initializes a new settings object. You can initialize an object in any of the following ways:
... ...
spec/settingslogic_spec.rb
... ... @@ -91,8 +91,21 @@ describe "Settingslogic" do
91 91 Settings.language[:erlang] = {}
92 92 Settings.language[:erlang][:paradigm] = 'functional'
93 93 Settings.language.erlang.paradigm.should == 'functional'
  94 +
  95 + Settings[:toplevel] = '42'
  96 + Settings.toplevel.should == '42'
94 97 end
95 98  
  99 + # This one edge case currently does not pass, because it requires very
  100 + # esoteric code in order to make it pass. It was judged not worth fixing,
  101 + # as it introduces significant complexity for minor gain.
  102 + # it "should handle reloading top-level settings"
  103 + # Settings[:inspect] = 'yeah baby'
  104 + # Settings.inspect.should == 'yeah baby'
  105 + # Settings.reload!
  106 + # Settings.inspect.should == 'Settings'
  107 + # end
  108 +
96 109 it "should handle oddly-named settings" do
97 110 Settings.language['some-dash-setting#'] = 'dashtastic'
98 111 Settings.language['some-dash-setting#'].should == 'dashtastic'
... ...