Skip to content

Commit 4bb7ab9

Browse files
committed
Make configuration a singleton and add new settings.
1 parent 78e1cb7 commit 4bb7ab9

File tree

3 files changed

+40
-26
lines changed

3 files changed

+40
-26
lines changed

hatterrc

+6
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,9 @@ maildir = /path/to/maildir
88

99
# The format of the maildir, e.g maildir or mbox
1010
maildir_format = maildir
11+
12+
# Hatter relies on Termbox for the terminal UI
13+
termbox_library_path = /usr/lib/libtermbox.so
14+
15+
# All the colors i Hatter can be customized:
16+
colors = {foreground => green, background => black}

lib/configuration.rb

+14-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
require 'configtoolkit'
22
require 'configtoolkit/keyvaluereader'
3+
require 'relative'
34

45
class Configuration < ConfigToolkit::BaseConfig
56

6-
# Reads a configuration from file.
7-
#
8-
# @param [String] configPath the path to a configuration file.
9-
#
10-
# @return [Configuration] with values loaded from file.
11-
def self.from_file configPath
12-
reader = ConfigToolkit::KeyValueReader.new configPath
7+
include Singleton
8+
9+
CONFIG_FILE = File.expand_path_relative_to_caller("../hatterrc")
10+
11+
def initialize config_file = CONFIG_FILE
12+
reader = ConfigToolkit::KeyValueReader.new config_file
1313
load reader
1414
end
1515

16+
class Colors < ConfigToolkit::BaseConfig
17+
add_required_param(:foreground, String)
18+
add_required_param(:background, String)
19+
end
20+
1621
add_required_param(:maildir, String)
1722
add_required_param(:maildir_format, String)
23+
add_required_param(:termbox_library_path, String)
24+
add_required_param(:colors, Colors)
1825
end

spec/configuration_spec.rb

+20-19
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,37 @@
55
describe 'Configuration' do
66

77
before :all do
8+
CONFIG_FILE = File.expand_path_relative_to_caller("../hatterrc")
89
@maildir_path = "/path/to/maildir"
9-
CONFIG_FILE = File.expand_path_relative_to_caller("../.hatterrc")
1010
@maildir_format = "maildir"
11-
@config = Configuration.new() do |config|
12-
config.maildir = @maildir_path
13-
config.maildir_format = @maildir_format
14-
end
11+
@termbox_library_path = "/usr/lib/libtermbox.so"
1512
end
1613

17-
it "contains all the required configuration settings" do
18-
@config.maildir?.should be_true
19-
@config.maildir_format?.should be_true
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")
2020
end
2121

22-
it "the settings have the correct values" do
23-
@config.maildir.should eq @maildir_path
24-
@config.maildir_format.should eq @maildir_format
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
2526
end
2627

27-
it "reads the configuration values from file" do
28-
config = Configuration.from_file CONFIG_FILE
28+
it "the settings have the correct values" do
29+
config = Configuration.instance
2930
config.maildir.should eq @maildir_path
3031
config.maildir_format.should eq @maildir_format
32+
config.termbox_library_path.should eq @termbox_library_path
3133
end
3234

33-
it "barfs when required values are missing" do
34-
config = File.read CONFIG_FILE
35-
config.gsub!(/maildir/, 'asdf')
36-
File.open("invalid_config", "w") {|file| file.write config}
37-
expect {Configuration.from_file("invalid_config")}.to raise_error
38-
FileUtils::rm("invalid_config")
35+
it "contains a nested config with colors" do
36+
config = Configuration.instance
37+
config.colors.foreground.should eq "green"
38+
config.colors.foreground.should eq "green"
3939
end
40+
4041
end

0 commit comments

Comments
 (0)