Skip to content

Commit

Permalink
Add explicit implementation of Config::Options#as_json
Browse files Browse the repository at this point in the history
Before, `Config::Options#as_json` was explicitly set, but the class
included the `Enumerable` module. So, if you were using ActiveSupport
Core Extensions, then the definition of `#as_json` for Enumerable was
invoked, which would represent the `Config::Options` as a Array of
key-value pairs instead of a Hash.

This changes brings `#as_json` in line with the output we get from
`to_json`: essentially, calling these methods on an instance of
`Config::Options` behaves the same as if they were called instead on
the hash returned by `to_hash`.
  • Loading branch information
cjlarose committed Dec 1, 2020
1 parent 4e3a9ea commit cc2d87a
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
4 changes: 4 additions & 0 deletions lib/config/options.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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!(
Expand Down
6 changes: 6 additions & 0 deletions spec/options_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -224,4 +224,10 @@

end

context 'when calling #as_json' do
it 'should return a Hash of the keys and values' do
options = Config::Options.new(foo: :bar)
expect(options.as_json).to eq({ 'foo' => 'bar' })
end
end
end

0 comments on commit cc2d87a

Please sign in to comment.