Skip to content
This repository has been archived by the owner on Jun 23, 2024. It is now read-only.

Latest commit

 

History

History
45 lines (31 loc) · 2.96 KB

CHANGELOG.md

File metadata and controls

45 lines (31 loc) · 2.96 KB

Unreleased

0.1.0 (2024-02-01)

Added

  • Add BCDD::Contract.config to expose the config singleton and turn on/off features.

  • Add BCDD::Contract.configuration(&block) to receive a block to configure the gem. After the block is executed, the configuration (config singleton) will be frozen.

  • Add BCDD::Contract::Interface, a module to be used to create interfaces.

    • Add BCDD::Contract::Interface::AlwaysEnabled module to be used to create interfaces that cannot be disabled by config.interface_enabled = false.
  • Add BCDD::Contract::Proxy, a class to inherit to create proxy objects.

    • Use BCDD::Contract::Proxy::AlwaysEnabled class to inherit and create a proxy object that cannot be disabled by config.proxy_enabled = false.
  • Add BCDD::Contract.proxy(always_enabled: false, &block) to create a proxy class that can be used to check the arguments and returned values of the proxy object's methods.

    • It is a syntactic sugar of class MyContract < BCDD::Contract::Proxy.
    • If you pass always_enabled: true, the proxy object will always be enabled. Otherwise, it will be enabled only when BCDD::Contract.config.proxy_enabled is true.
  • Add BCDD::Contract.error!(message) to raise an exception with the given message.

  • Add BCDD::Contract::Assertions to provide assertions to be used to implement inlined contracts.

    • Add assert!(value, message, &condition), refute!(value, message, &condition) to raise an exception with the given message if the condition is not met.
    • Add assert and refute, the behavior is the same as assert! and refute! but they checkings can be disabled by BCDD::Contract.config.assertions_enabled.
  • Add contract checkers (a module that can be used to perform validations and type checkings)

    • The supported kinds are:
      • BCDD::Contract.unit() - can be used to create a unit checker (can be used to check any object).
      • BCDD::Contract.list() - can be used to create a list checker (can be used to check arrays and sets).
      • BCDD::Contract.pairs() - can be used to create a checker that ensures a hash's key and value.
      • BCDD::Contract.schema() - can be used to create a hash checker
  • Add BCDD::Contract[] and BCDD::Contract() to create a contract checker from any known input:

    • If the input is a class, it will create a unit checker.
    • If the input is a module, it will create a unit checker.
    • If the input is a hash, it will create a schema checker.
    • If the input is an array or set, it will create a list checker.
  • Add BCDD::Contract.to_proc to expose a proc that can be used to create a contract checker from any input.

  • Add BCDD::Contract.register to register a contract checker to be used by BCDD::Contract[] and BCDD::Contract().

    • The registering requires a hash where the keys (symbols) are the names/alias and the values are the contract checkers.
  • Add nil as a valid contract checker. Use it to create optional contract checkers. Example: BCDD::Contract[String] | nil.