Skip to content

Commit 678ab5c

Browse files
committed
Use ~/.hatterrc if found
1 parent 0c8bc2b commit 678ab5c

File tree

3 files changed

+47
-36
lines changed

3 files changed

+47
-36
lines changed

lib/command_factory.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def command(key)
1616
private
1717

1818
def require_commands
19-
commands = File.join(File.dirname(__FILE__), "commands") + "/*"
19+
commands = File.join(File.dirname(__FILE__), "commands", "*")
2020
Dir[commands].each { |file| eval "require '#{file}'" }
2121
end
2222

@@ -34,7 +34,7 @@ def create_command name
3434
def command_name(key)
3535
begin
3636
keys = "Configuration.instance.keys"
37-
cmd = eval "#{keys}.#{key.to_s}"
37+
cmd = eval "#{keys}.#{key}"
3838
rescue SyntaxError
3939
"NoOp"
4040
end

lib/configuration.rb

+7-2
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@ class Configuration < ConfigToolkit::BaseConfig
66

77
include Singleton
88

9-
CONFIG_FILE = File.expand_path_relative_to_caller("../hatterrc")
9+
CONFIG_FILE = File.expand_path_relative_to_caller('../hatterrc')
1010

1111
def initialize(config_file = CONFIG_FILE)
12-
reader = ConfigToolkit::KeyValueReader.new config_file
12+
reader = ConfigToolkit::KeyValueReader.new(user_config || config_file)
1313
load reader
1414
end
1515

16+
def user_config
17+
path = File.join(Dir.home, '.hatterrc')
18+
return path if File.exists?(path)
19+
end
20+
1621
class Colors < ConfigToolkit::BaseConfig
1722
add_required_param(:foreground, String)
1823
add_required_param(:background, String)

spec/configuration_spec.rb

+38-32
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,51 @@
22
require 'relative'
33
require 'configtoolkit/keyvaluereader'
44

5-
describe 'Configuration' do
5+
describe Configuration do
6+
let(:maildir_path) { '/path/to/maildir' }
7+
let(:maildir_format) { 'maildir' }
8+
let(:termbox_library_path) { '/usr/lib/libtermbox.so' }
69

7-
before :all do
8-
CONFIG_FILE = File.expand_path_relative_to_caller("../hatterrc")
9-
@maildir_path = "/path/to/maildir"
10-
@maildir_format = "maildir"
11-
@termbox_library_path = "/usr/lib/libtermbox.so"
12-
end
10+
subject(:config) { Configuration.instance }
1311

14-
it "barfs when required values are missing" do
15-
config = File.read CONFIG_FILE
16-
config.gsub!(/maildir/, 'asdf')
17-
File.open("invalid_config", "w") {|file| file.write config}
18-
expect {Configuration.instance "invalid_config"}.to raise_error
19-
FileUtils::rm("invalid_config")
20-
end
12+
context 'with a user config file should override defaults' do
13+
let(:user_file_exists) { File.exists?(File.join(Dir.home, '.hatterrc')) }
2114

22-
it "reads the configuration values from file" do
23-
config = Configuration.instance
24-
config.maildir.should eq @maildir_path
25-
config.maildir_format.should eq @maildir_format
15+
its(:maildir) { should_not eq maildir_path if user_file_exists }
16+
its(:maildir_format) { should_not eq maildir_format if user_file_exists }
2617
end
2718

28-
it "the settings have the correct values" do
29-
config = Configuration.instance
30-
config.maildir.should eq @maildir_path
31-
config.maildir_format.should eq @maildir_format
32-
config.termbox_library_path.should eq @termbox_library_path
33-
end
19+
context 'with an invalid config file' do
20+
let(:config_file) { File.read(Configuration::CONFIG_FILE) }
3421

35-
it "contains a nested config with colors" do
36-
config = Configuration.instance
37-
config.colors.foreground.should eq "green"
38-
config.colors.background.should eq "black"
22+
it 'barfs when required values are missing' do
23+
config_file.gsub!(/maildir/, 'asdf')
24+
File.open('invalid_config', 'w') { |file| file.write config_file }
25+
expect { Configuration.send(:new, 'invalid_config') }.to raise_error
26+
FileUtils::rm('invalid_config')
27+
end
3928
end
4029

41-
it "contains a nested config with keys" do
42-
config = Configuration.instance
43-
config.keys.c.should eq "compose"
44-
config.keys.q.should eq "quit"
30+
context 'with a valid config file' do
31+
subject(:config) { Configuration.send(:new, Configuration::CONFIG_FILE) }
32+
33+
its(:maildir) { should eq maildir_path }
34+
its(:maildir_format) { should eq maildir_format }
35+
36+
its(:termbox_library_path) { should eq termbox_library_path }
37+
38+
describe 'colors settings' do
39+
subject { config.colors }
40+
41+
its(:foreground) { should eq 'green' }
42+
its(:background) { should eq 'black' }
43+
end
44+
45+
describe 'nested config keys' do
46+
subject { config.keys }
47+
48+
its(:c) { should eq 'compose' }
49+
its(:q) { should eq 'quit' }
50+
end
4551
end
4652
end

0 commit comments

Comments
 (0)