Skip to content

v0.6.0

Compare
Choose a tag to compare
@timriley timriley released this 12 Feb 11:23

0.6.0 / 2019-01-30

Added

  • [BREAKING] Dry::View#call now returns a Dry::View::Rendered instance, which carries both the rendered output (accessible via #to_s or #to_str) as well as all of the view's locals, wrapped in their view parts (accessible via #locals or individually via #[]) (timriley in #72)
  • [BREAKING] Added Dry::View::PartBuilder (renamed from Dry::View::Decorator), which resolves part classes from a namespace configured via View's part_namespace setting. A custom part builder can be specified via a View's part_builder setting. (timriley in #80)
  • [BREAKING] Context classes can now declare decorated attributes just like part classes, via .decorate class-level API. Context classes are now required to inherit from Dry::View::Context. Dry::View::Context provides a #with method for creating copies of itself while preserving the rendering details needed for decorated attributes to work (timriley in #89 and #91)
  • Customizable scope objects, which work like view parts, but instead of encapsulating a single value, they encapsulate a whole template or partial and all of its locals. Scopes can be created via #scope method in templates, parts, as well as scope classes themselves. Scope classes are resolved via a View's scope_builder setting, which defaults to an instance of Dry::View::ScopeBuilder.
  • Added inflector setting to View, which is used by the part and scope builders to resolve classes for a given part or scope name. Defaults to Dry::Inflector.new (timriley in #80 and #90)
  • Exposures can be sent to the layout template when defined with layout: true option (GustavoCaso in #87)
  • Exposures can be left undecorated by a part when defined with decorate: false option (timriley in #88)
  • Part classes have access to the current template format via a private #_format method (timriley in #118)
  • Added "Tilt adapter" layer, to ensure a rendering engine compatible with dry-view's features is being used. Added adapters for "haml" and "erb" templates to ensure that "hamlit-block" and "erbse" are required and used as engines (unlike their more common counterparts, both of these engines support the implicit block capturing that is a central part of dry-view rendering behaviour) (timriley in #106)
  • Added renderer_engine_mapping setting to View, which allows an explicit engine class to be provided for the rendering of a given type of template (e.g. config.renderer_engine_mapping = {erb: Tilt::ErubiTemplate}) (timriley in #106)

Changed

  • [BREAKING] Dry::View::Controller renamed to Dry::View (timriley in #115)
  • [BREAKING] Dry::View context setting renamed to default_context (GustavoCaso in #86)
  • Exposure values are wrapped in their view parts before being made available as exposure dependencies (timriley in #80)
  • Exposures can access current context object through context: block or method parameter (timriley in #119)
  • Improved performance due to caching various lookups (timriley and GustavoCaso in #97)
  • Part#inspect output simplified to include only name and value (timriley in #98)
  • Attribute decoration in Part now achieved via a prepended module, which means it is possible to decorate an attribute provided by an instance method directly on the part class, which wasn't possible with the previous method_missing-based approach (timriley in #110)
  • Part classes can be initialized with missing name: and rendering: values, which can be useful for unit testing Part methods that don't use any rendering facilities (timriley in #116)

Fixed

  • Preserve renderer options when chdir-ing (timriley in 889ac7b)

Compare v0.5.3...v0.6.0