diff --git a/CHANGELOG.md b/CHANGELOG.md index b8856ced..f9dbd1a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Added alias to_h for to_hash ([#277](https://github.com/railsconfig/config/issues/277)) * Prevent unnecessary doubled loading of environment variables ([#291](https://github.com/rubyconfig/config/pull/291)) +* Return `Hash` from `Config::Options#as_json` instead of `Array` of pairs when using ActiveSupport Core Extensions ([#292](https://github.com/rubyconfig/config/pull/292)) ### Changes diff --git a/lib/config/options.rb b/lib/config/options.rb index 19006da6..e5fe251e 100644 --- a/lib/config/options.rb +++ b/lib/config/options.rb @@ -129,6 +129,10 @@ def to_json(*args) to_hash.to_json(*args) end + def as_json(options = nil) + to_hash.as_json(options) + end + def merge!(hash) current = to_hash DeepMerge.deep_merge!( diff --git a/spec/options_spec.rb b/spec/options_spec.rb index f1740b1b..5b0bb912 100644 --- a/spec/options_spec.rb +++ b/spec/options_spec.rb @@ -224,4 +224,19 @@ end + context 'when calling #as_json' do + it 'should return a Hash of the keys and values' do + unless defined?(::Rails) + skip <<~REASON + Config::Options#as_json raises a runtime error unless Active Support + Core Extensions are loaded. We don't expect users to call this method + at all if they're not using AS, so we disable this test except when + running the suite against Rails. + REASON + end + + options = Config::Options.new(foo: :bar) + expect(options.as_json).to eq({ 'foo' => 'bar' }) + end + end end