diff --git a/lib/browse_everything.rb b/lib/browse_everything.rb index 24168488..b0fbda27 100644 --- a/lib/browse_everything.rb +++ b/lib/browse_everything.rb @@ -40,6 +40,7 @@ module Google end class InitializationError < RuntimeError; end + class ConfigurationError < StandardError; end class NotImplementedError < StandardError; end class NotAuthorizedError < StandardError; end @@ -51,11 +52,15 @@ def configure(value) if value.is_a?(Hash) @config = ActiveSupport::HashWithIndifferentAccess.new value elsif value.is_a?(String) - config_file_content = File.read(value) - config_file_template = ERB.new(config_file_content) - config_values = YAML.safe_load(config_file_template.result, [Symbol]) - @config = ActiveSupport::HashWithIndifferentAccess.new config_values - @config.deep_symbolize_keys + begin + config_file_content = File.read(value) + config_file_template = ERB.new(config_file_content) + config_values = YAML.safe_load(config_file_template.result, [Symbol]) + @config = ActiveSupport::HashWithIndifferentAccess.new config_values + @config.deep_symbolize_keys + rescue Errno::ENOENT + raise ConfigurationError, 'Missing browse_everything_providers.yml configuration file' + end else raise InitializationError, "Unrecognized configuration: #{value.inspect}" end diff --git a/spec/lib/browse_everything_spec.rb b/spec/lib/browse_everything_spec.rb index 0be005c0..5963a686 100644 --- a/spec/lib/browse_everything_spec.rb +++ b/spec/lib/browse_everything_spec.rb @@ -72,6 +72,13 @@ it_behaves_like 'a configured BrowseEverything module' end + + context 'without a YAML file' do + let(:config) { '' } + it 'raises a configuration error' do + expect { described_class.configure(:config).to raise_error(BrowseEverything::ConfigurationError, 'Missing browse_everything_providers.yml configuration file') } + end + end end context 'with an unsupported or invalid configuration' do