# Changes

## 2024-09-09 v0.21.2

* **Settings List Method**:
	+ Renamed `list` to `attributes_list`.
	+ Updated tests in `settings_spec.rb` to use the new method name.

## 2024-09-09 v0.21.1

* **API Changes**:
  * The default string representation of ComplexConfig has been changed to a tree-like structure.
  * The `to_s` method in ComplexConfig::Settings has been renamed to `list`.
  * A new `list` method has been added to ComplexConfig::Settings for listing settings as a string.

## 2024-09-09 v0.21.0

* **Tree Representation**:
	+ Add `Tree` class to convert complex config objects into trees.
	+ Update `Settings` class to use `Tree` conversion in `to_tree` method.
	+ Update tests to reflect changes.
* **Components Array**: Add components array for flux capacitors
* **Rakefile and Gemspec**:
	- Add clobber task for coverage to Rakefile
	- Update all_images script: update `bundle` to `bundle install --full-index`
* **.gitignore**: Remove `.byebug_history` from ignored files
* **Complex Config**:
	+ Raise type error and add test for empty configuration file.
	+ Update gemspec to use GemHadar 1.17.0
	+ Add requirement for tins/xt/ask_and_send in complex_config/provider.rb
	+ Add check for hash type in ComplexConfig::Settings#build method
	+ Add test for reading from empty configuration file in provider_spec.rb
	+ Replace byebug with debug in spec_helper.rb

## 2024-04-17 v0.20.0

#### Significant Changes

* **Add dependency to base64**: The code now depends on the `base64` library,
  which will be extracted from Ruby 3.4.
* **Upgrade ruby and add debug gem**: The project has been upgraded to use a
  newer version of Ruby and includes the `debug` gem for debugging purposes.
* **Use newest ruby, drop the older 2.5 version**: The code now targets the
  latest version of Ruby and no longer supports Ruby 2.5.

#### Other Changes

* Run specs: The project now runs its specifications as part of its build
  process.
* Test on newest ruby, on older ones don't: The project's tests are now run
  only on the latest version of Ruby, with older versions being skipped.
* Align: The code has been aligned to follow best practices.

## 2022-07-11 v0.19.4

* **Configuration File Handling Improvements**
    + Replaced defaulting to `unsafe_load` with explicit usage, ensuring safer
      handling of configuration files.

## 2022-05-19 v0.19.3

* **New Feature**: Pass parameters to json generator, allowing for more dynamic
  and customizable JSON output.
* **Improvement**: Use `all_images` for testing, improving the robustness and
  accuracy of image-related tests.

## 2021-10-28 v0.19.2

* **New Psych Support**
	+ Added support for newest Psych 4 library
	+ Defaults to disabling YAML alias feature
* **Psych API Update**
	+ Updated code to use new Psych/YAML API when Psych version < 4
	+ Retained behavior of evaluating aliases
* **Ruby Version Bump**
	+ Updated Ruby version in tool-versions to 3.0.2

## 2021-04-09 v0.19.1

* **Breaking Change**: Updated code to adapt to the new keyword interface of
  ERB for Ruby versions greater than or equal to 3.

## 2021-01-05 v0.19.0

* Added two new methods:
	+ `get_attribute_by_name`
	+ `get_attributes_by_name`

## 2020-08-26 v0.18.2

* **Bug Fix**: Resolved a similar issue, mirroring the fix introduced in
  version 0.18.1.

## 2020-08-26 v0.18.1

* **New Feature**: Added support for faking data, allowing users to simulate
  scenarios without actual data.
    + Implemented a new module `FakeIt` with methods for generating fake data.
    + Updated relevant tests to include fake data scenarios.

## 2020-01-07 v0.18.0

* **New Version Summary**
	+ Added support for Ruby 2.7.0
	+ Updated tests to include Ruby 2.7.0
	+ Refactored code to avoid string modifications
* Significant Changes:
	* Support added for Ruby 2.7.0
	* Tests updated to include Ruby 2.7.0
	* String modification stopped

## 2019-11-27 v0.17.1

* **Shared Settings Implementation**: The code now uses a more sane and
  efficient approach for shared settings.

## 2019-03-18 v0.17.0

* **Decoding Fix**: Corrected the decoding issue to ensure proper data
  interpretation.

## 2019-03-18 v0.16.2

* **New Feature**: Added support for handling complex scenarios
	+ Implemented a new logic to handle intricate cases
* Improved error handling and reporting
	+ Enhanced logging to provide more detailed information about errors
* Minor code refactoring
	+ Simplified some conditional statements

## 2019-03-18 v0.16.1

* Improved error message for missing encryption key:
    + Added more informative and user-friendly error message when encryption
      key is not provided.

## 2019-03-14 v0.16.0

* **New Features**
	+ Added support for `trim_mode` in legacy mode
	+ Enabled `trim_mode` by default
	+ Added `#to_json` method to settings objects
* **Changes**
	+ Updated code to use new `trim_mode` feature
	+ Modified settings objects to include `#to_json` method

## 2019-03-14 v0.15.1

* **Fix**: Shared feature now works correctly even when the top-level settings
  are empty.

## 2018-12-07 v0.15.0

* **New Feature**: Allow recrypting a file in-place with options.
    + Added functionality to enable recrypting a file without creating a new
      copy.

## 2018-12-07 v0.14.1

* **New Version**: Bumped version
* **Improved Error Handling**:
	+ Improved error handling if key isn't valid
	+ Raises `ComplexConfig::DecryptionFailed` for encrypted files
* **Compatibility**:
	+ Make this run on older rubies
* **Documentation**:
	+ Cleanup documentation
* **RubyGems**:
	+ Use newest rubygems

## 2018-06-07 v0.14.0

* Added `complex_config` executable to handle configuration files.

## 2018-02-23 v0.13.3

* **Changes in Evaluation Order**
	+ The evaluation order of key sources has been modified.

## 2018-02-23 v0.13.2

* **Compatibility improvements**
	+ Be compatible with ancient rubies^3
	+ Be compatible with ancient rubies^2
	+ Be compatible with ancient rubies
* **Refactoring**
	+ Refactor key provision with source object

## 2018-02-09 v0.13.1

* **New Features**
	+ Added information to README file
* **Significant Changes**
	+ Bumped version number
	+ Improved error reporting for encrypted files with missing keys

## 2018-01-26 v0.13.0

* Improved the `write_config` interface
* Added more tests

## 2017-11-17 v0.12.2

* **Output string keys on top level configs**: 
  * Added functionality to output string keys on top level configurations.

## 2017-11-17 v0.12.1

* **New Feature**: Suppress newline output during encryption.

## 2017-11-16 v0.12.0

* **New Features**
	+ Add support for writing configurations (encrypted or not)
* **Version Bump**
	+ Bump version to 0.12.0
* **Compatibility Improvements**
	+ Support older Rubies

## 2017-11-02 v0.11.3

* **New Feature:** Added striping functionality.
* **Bug Fix:** Fixed issue where caches were not cleared when `deep_freeze` was
  disabled.

## 2017-10-30 v0.11.2

* **Behavioral Fix**: 
  * Fixed the behavior for incomplete key setup.

## 2017-10-27 v0.11.1

* Added support for shared features.

## 2017-10-27 v0.11.0

* **New Feature**: Support for encrypted YAML files, compatible with Rails'
  encryption.
* **Test Update**: Added testing to ensure compatibility with Ruby 2.4.2.

## 2017-02-02 v0.10.0

## 2017-01-23 v0.9.2

* **New Version**: Released version 0.9.2.
* **Performance Improvement**:
	+ Memoized proxy object for improved performance.

## 2016-11-23 v0.9.1

* **New Features**
	+ Use newest RubyGems
	+ Test on Ruby 2.3.3
* **Bug Fixes**
	+ Fix Travis builds
	+ travis fiddles with RAILS_ENV variable, breaking specs (resolved)
* **Testing Improvements**
	+ Test newer Rubies

## 2016-11-22 v0.9.0

* **Gem Update**: Updated to newest gem_hadar.
* **Coverage Report**: Only send new coverage report on success.
* **Manual Run**: We are supposed to run this manually now.
* **Code Organization**: Moved provider shortcuts into its own module.

## 2016-07-27 v0.8.0

* **New Feature**: Added support for replacing attributes in
  `ComplexConfig::Settings` using the `#replace_attributes` method.

## 2016-07-18 v0.7.0

* **New Features**
	+ Added new date functionality
* **Improvements**
    + Simplified `ComplexConfig::Settings` interface by basing it on
      `BasicObject` and reducing mixin usage
* **Documentation**
	+ Updated README.md with new changes

## 2016-07-15 v0.6.0

* **Caching Improvements**
	+ Use `mize` for caching

## 2016-06-23 v0.5.2

* **Index Access Feature**
	+ Fixed issue with incorrect indexing behavior (#56190d3)
	+ Improved performance and reliability of index access functionality

## 2016-06-23 v0.5.1

* **New Features**
    + Resolve index access via the plugin code path, making `foo.bar` and
      `foo[:bar]` equivalent for a plugin key.
    + Test on Ruby 2.3.1 and 2.4.0-preview1
* **Infrastructure Changes**
	+ Use new infrastructure
* **Bug Fixes**
	+ Fix typo

## 2015-11-19 v0.5.0

* **New Features**
	+ Add configure method
	+ Add configuration example to README
* **Bug Fixes**
	+ Flush cache for every request in rails development
	+ Change the Changes
* **Improvements**
	+ Just always skip to avoid interference

## 2015-11-17 v0.4.0

* **New Feature:** Implemented root object method call syntax.

## 2015-11-03 v0.3.1

* **New Features**
	+ Add missing tins dependency
	+ Show improved settings output in README.md
	+ Adds a decent string representation for ComplexConfig::Settings objects
* **Dependency Updates**
	+ Use newest gem hadar
	+ Add some development_dependencies (including tins)
* **Code Improvements**
	+ Shorten codeclimate snippet

## 2015-03-24 v0.3.0

## 2015-03-24 v0.2.3

* **Typo Fix**: Corrected a typo in the `LoadErro(r)` method.
* **JRuby Update**: Updated JRuby version to use `jruby-head` and allowed it to
  potentially fail.

## 2015-02-25 v0.2.2

* Removed unnecessary `sprintf` format.

## 2015-01-28 v0.2.1

* **New Version**: 
  * Added support for JRuby test target
  * Removed always broken jruby-head
  * Bumped version number to 0.2.0
  * Bumped version to 0.2.1
* **Plugin Changes**:
  * Skip the money plugin if monetize cannot be loaded (optional runtime
    dependency)
  * Remove require for plugins, allowing users to use the gem without requiring
    the money gem
  * Fixed requiring *with* plugins, enabling them to load correctly

## 2015-01-27 v0.2.0

* **New Features**
	+ Added support for JRuby in tests
	+ Updated to newest Ruby 2.2
* **Improvements**
    + Replaced mixin with delegation for Enumerable, allowing attribute names
      like `zip`, `min`, or `max` without conflicts
* **Documentation**
	+ Added Apache license file

## 2015-01-01 v0.1.1

* **New Version Summary**
	+ Use value from non-associative list arrays
	+ Fix `puts` method to call `to_ary` correctly
	+ Prevent cash leakage after flushing cache
	+ Add `to_ary` method for level on demand

## 2014-12-15 v0.1.0

* **Significant Changes**:
	+ Freeze cached configuration by default (versioning)
	+ Add to-do list for future development
	+ Integrate CodeClimate for code analysis and improvement

## 2014-12-12 v0.0.0

  * Start