Skip to content

Latest commit

 

History

History
183 lines (110 loc) · 5.14 KB

CHANGELOG.md

File metadata and controls

183 lines (110 loc) · 5.14 KB

v0.5.0 2016-08-21

Added

  • Allow optional attribute to be left undefined (@nepalez)

Compare v0.4.0...v0.5.0

v0.4.0 2016-05-28

Deleted (backward-incompatible changes)

  • Support of modules and case equality as type constraints (@nepalez)

Compare v0.3.3...v0.4.0

v0.3.3 2016-05-28

  • Add deprecation warnings about modules and case equality as type constraints (@nepalez)

Compare v0.3.2...v0.3.3

v0.3.2 2016-05-25

Bugs Fixed

  • Add explicit requirement for ruby 'set' (@rickenharp)

Compare v0.3.1...v0.3.2

v0.3.1 2016-05-22

Added

  • Support for tolerance to unknown options (@nepalez)

Compare v0.3.0...v0.3.1

v0.3.0 2016-05-19

Breaks interface for adding new plugins. Register new plugin via:

def self.extended(klass)
  klass.register_initializer_plugin NewPlugin
end

instead of:

def self.extended(klass)
  klass.initializer_builder.register NewPlugin
end

While the private method ##initializer_builder is still accessible its method #register doesn't mutate the builder instance.

Changed (backward-incompatible changes)

  • Made Mixin##initializer_builder method private (@nepalez)
  • Add Mixin#register_initializer_plugin(plugin) method (@nepalez)

Bugs Fixed

  • Prevent plugin's registry from polluting superclass (@nepalez)

Compare v0.2.1...v0.3.0

Internals

  • Make all instances (Builder and Signature) immutable (@nepalez)
  • Decouple mixin from a builder to prevent pollution (@nepalez)
  • Ensure default value block can use private variables (@jeremyf)

Compare v0.2.0...v0.2.1

v0.2.1 2016-05-19

Bugs Fixed

  • Fix polluting superclass with declarations from subclass (@nepalez)

Internals

  • Make all instances (Builder and Signature) immutable (@nepalez)
  • Decouple mixin from a builder to prevent pollution (@nepalez)
  • Ensure default value block can use private variables (@jeremyf)

Compare v0.2.0...v0.2.1

v0.2.0 2016-05-16

The gem internals has been rewritten heavily to make the gem pluggable and fix bugs in "container style". Type constraints were extracted to a plugin that should be added explicitly.

Small extensions were added to type constraints to support constraint by any object, and apply value coercion via dry-types.

Default assignments became slower (while plain type constraint are not)!

Changed (backward-incompatible changes)

  • Make dry-types constraint to coerce variables (@nepalez)

    # This will coerce `name: :foo` to `"foo"`
    option :name, type: Dry::Types::Coercible::String
  • Stop supporing proc type constraint (@nepalez)

    option :name, type: ->(v) { String === v } # this does NOT work any more

    later it will be implemented via coercion plugin (not added by default):

    require 'dry/initializer/coercion'
    
    class MyClass
      extend Dry::Initializer::Mixin
      extend Dry::Initializer::Coercion
    
      option :name, coercer: ->(v) { (String === v) ? v.to_sym : fail }
    end

Added

  • Support type constraint via every object's case equality (@nepalez)

    option :name, type: /foo/
    option :name, type: (1..14)
  • Support defaults and type constraints for the "container" syntax (@nepalez)

  • Support adding extensions via plugin system (@nepalez)

Internal

  • Private method ##__after_initialize__ is added by the Mixin along with #initialize (@nepalez)

    The previous implementation required defaults and types to be stored in the class method .initializer_builder. That made "container" syntax to support neither defaults nor types.

    Now the #initializer is still defined via instance_eval(code) for efficiency. Some operations (like default assignments, coercions, dry-type constraints etc.) cannot be implemented in this way. They are made inside ##__after_initialize__ callback, that is biult via default_method(&block) using instance evals.

Compare v0.1.1...v0.2.0

v0.1.1 2016-04-28

Added

  • include Dry::Initializer.define -> do .. end syntax (@flash-gordon)

Compare v0.1.0...v0.1.1

v0.1.0 2016-04-26

Class DSL splitted to mixin and container versions (thanks to @AMHOL for the idea). Backward compatibility is broken.

Changed (backward-incompatible changes)

  • Use extend Dry::Initializer::Mixin instead of extend Dry::Initializer (@nepalez)

Added

  • Use include Dry::Initializer.define(&block) as an alternative to extending the class (@nepalez)

Compare v0.0.1...v0.1.0

v0.0.1 2016-04-09

First public release