6 def self.load(configuration)
7 file = configuration[:config_file] || Configuration.locate_config_file
8 unless File.exist?(file)
9 raise ConfigurationError, "Configuration file '#{file}' not found."
10 end
11
12 begin
13 config = YAML::load(IO.read file)
14 rescue => e
15 message = "Can't load configuration from file '#{file}'."
16 if configuration[:debug]
17 message += "\nMessage: #{e.message}"
18 message += "\nBacktrace:\n\t#{e.backtrace.join("\n\t")}"
19 end
20 raise ConfigurationError, message
21 end
22
23 if env = configuration[:env] || config[:default]
24 unless config = config[env]
25 raise ConfigurationError, "Can't find environment #{env}."
26 end
27 end
28
29 unless config.key?(:url) && config.key?(:api_key) && config.key?(:secret_key)
30 message = "The environment #{env || '\'-\''} does not contain all required keys."
31 raise ConfigurationError, message
32 end
33
34 config.merge(environment: env)
35 end