diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/config.rb | 21 | ||||
| -rw-r--r-- | lib/dsl.rb | 7 |
2 files changed, 20 insertions, 8 deletions
diff --git a/lib/config.rb b/lib/config.rb index 2a13ae0..fa43c4f 100644 --- a/lib/config.rb +++ b/lib/config.rb @@ -8,12 +8,23 @@ end module RCM # Configuration — config.toml is optional. If the toml gem is not installed # or no config.toml exists, config() will raise a helpful error when called. + # + # Config is not loaded at module load time. Call Config.load! once at the + # application entry point (e.g. from configure) before calling config(). + # Tests that don't use config() don't need config.toml at all. module Config - @@config = if TOML_AVAILABLE && File.exist?('config.toml') - TOML.load_file('config.toml') - else - {} - end + @@config = {} + + # Load (or reload) config.toml from the current working directory. + # Falls back to an empty hash when the toml gem is unavailable or the + # file does not exist, so callers that never invoke config() are unaffected. + def self.load! + @@config = if TOML_AVAILABLE && ::File.exist?('config.toml') + TOML.load_file('config.toml') + else + {} + end + end def config(key) raise "No such config key: #{key}" unless @@config.key?(key) @@ -71,10 +71,11 @@ module RCM end def configure(reset: false, &block) - # Parse ARGV each time configure is called so that scripts which call - # configure multiple times (or test suites that reset state) always - # start with a fresh, consistent option set. + # Parse ARGV and load config.toml each time configure is called so that + # scripts and test suites that call configure multiple times always + # start from a consistent, freshly-loaded state. RCM::Options.parse! + RCM::Config.load! RCM::DSL.new(reset) do |rcm| rcm.info('Configuring...') rcm.instance_eval(&block) |
