You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[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::Viewcontext 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)