View layer for Hanami
- Drop support for Ruby 3.0
- [Tim Riley] Remove unneeded concurrent-ruby gem dependency.
- [Tim Riley] Remove
LayoutNotFoundError
and raiseTemplateNotFoundError
for all kinds of missing templates, including layouts.
- [Tim Riley] Include methods from helper modules as public (#242)
Replace
module_function
withextend self
to allow helper methods to remain directly usable on their modules, but to also let those methods remain public when the module is included in a class. This will allow an intermediaryhelpers
object to be created for view parts (inside full Hanami apps) to access the standard helpers.
- [Luca Guidi] Add
Hanami::View::Rendered#match?
,#match
, and#include?
to make it more specs friendly. - [Philip Arndt] Make
Hanami::View#call
to acceptlayout:
keyword argument to specify the layout to use during the rendering.
- [Tim Riley] Introduce new ERB engine,
Hanami::View::ERB
, now used by default for ERB templates; the erbse gem is no longer a requirement (#226) - [Tim Riley] Introduce
Hanami::View::HTML::SafeString
, returned when callingString#html_safe
, also introduced via aHanami::View::HTML::StringExtensions
module prepended ontoString
. (#226) - [Tim Riley] Auto-escape HTML based on whether it is
#html_safe?
in ERB, Haml and Slim templates (#226) - [Tim Riley] Add
part_class
andscope_class
settings, used by the standardpart_builder
andscope_builder
as the default class to use when no value-specific part or scope classes can be found. These settings default toHanami::View::Part
andHanami::View::Scope
respectively (#227) - [Tim Riley] Introduce
Hanami::View::Helpers::EscapeHelper
,Hanami::View::Helpers::TagHelper
,Hanami::View::Helpers::LinkToHelper
,Hanami::View::Helpers::NumberFormattingHelper
. These helper modules may optionally be mixed into your Part and Scope classes to provide additional conveniences when authoring your views. To do this by default, create your ownHanaim::View::Part
andHanami::View::Scope
subclasses that include these modules, and then configure these as thepart_class
andscope_class
for your views. (#229)
- [Tim Riley] Use Zeitwerk for code loading; you should now require
require "hanami/view"
just once (#233) - [Tim Riley] Change
Context
interface: custom context subclasses now have complete control over their#initialize
(no longer need to receive**options
or callsuper
); though any mutable ivars should be duped in a custom#initialize_copy
as required. (#223) - [Tim Riley] Change
PartBuilder
andScopeBuilder
interfaces to consist of static methods only (#223) - [Tim Riley] Finalize the view class config when calling
.new
for the first time (#223) - [Tim Riley] Consolidate all internal caches to a single
View.cache
(#223) - [Tim Riley] [Internal] Various refactorings to improve rendering performance (#223)
- [Tim Riley] Access a hash of template locals via accessing
locals
inside any template
- [Tim Riley] Removed automatic integration of
Hanami::View
subclasses with their surrounding Hanami application. View base classes within Hanami apps should inherit fromHanami::Application::View
instead.
- [Luca Guidi] Automatically inject the app's
settings
andassets
components (if present) into instances ofHanami::View::ApplicationContext
- [Luca Guidi] Temporarily added to
Hanami::View::ApplicationContext
the#content_for
,#current_path
#csrf_token
helpers, ported from the hanami-2-application-template. Some of those helpers will be moved tohanami-helpers
gem in a later release.
- [Sean Collins] For views within an Hanami application, changed default location for templates from "web/templates" to "templates"
- [Luca Guidi] For views within an Hanami application, the default
part_namespace
is now"view/parts"
(previously"views/parts"
)
- [Luca Guidi] Application-level configuration is now applied to
Hanami::View
subclasses, no matter how deep their inheritance chain (e.g. app base view -> slice base view -> slice view)
- [Luca Guidi] Official support for Ruby: MRI 3.0 and 3.1
- [Luca Guidi] Drop support for Ruby: MRI 2.3, 2.4, 2.5, 2.6, and 2.7.
- [Marc Busqué] Automatically provide access to Hanami application routes helper as
routes
in default application view context (Hanami::View::ApplicationContext
)
- [Pablo Vicente] Raise
LayoutNotFoundError
exception with friendlier, more specific error message when layouts cannot be found
- [Tim Riley] (Internal) Updated settings to use updated dry-configurable
setting
0.13.0 API
- [Tim Riley] Replaced entire gem with dry-view (now renamed to hanami-view). See dry-view's documentation for its capabilities and the dry-view changelog for its history.
- [Luca Guidi] Official support for Ruby: MRI 2.6
- [Luca Guidi] Support
bundler
2.0+
- [Ferdinand Niedermann] Ensure to set
:disable_escape
option only for Slim and don't let Tilt to emit a warning for other template engines. - [glaszig] Ensure partial rendering to respect
format
overriding
- [Luca Guidi] Introduced new, backward compatible, signature to render a layout for testing purposes (eg.
ApplicationLayout.new({ format: :html }, "contents").render
)
- [Luca Guidi] Ensure layout to be rendered when using HAML 5
- [Luca Guidi] Ensure to raise
NoMethodError
when an unknown method is invoked by a view/template
- [Luca Guidi] Ensure to be able to use
exposures
even when they aren't duplicable objects
- [Luca Guidi] Official support for Ruby: MRI 2.5
- [Alfonso Uceda] Ensure that
exposures
are properly overwritten for partials whenlocals:
option is used
- [Luca Guidi] Added
Hanami::Layout#local
to safely access locals from layouts
- [yjukaku] Raise
Hanami::View::UnknownRenderTypeError
when an argument different from:template
or:partial
is passed torender
- [Luca Guidi] Compatibility with
haml
5.0
- [Luca Guidi] Remove deprecated
Hanami::View::Rendering::LayoutScope#content
- [Luca Guidi] Official support for Ruby: MRI 2.4
- [Vladimir Dralo] Allow
View#initialize
to splat keyword arguments
- [Luca Guidi] Ensure
Rendering::NullLocal
to work with HAML templates
- [Luca Guidi] Official support for Ruby: MRI 2.3+ and JRuby 9.1.5.0+
- [Luca Guidi] Introduced
#local
for views, layouts and templates. It allows to safely access locals without raising errors in case the referenced local is missing.
- [nessur] Find the correct partial in case of deeply nested templates.
- [Marcello Rocha] Ensure
Hanami::Presenter
to respect method visibility of wrapped object. - [Luca Guidi] Ensure to use new registry when loading the framework
– [Luca Guidi] Drop support for Ruby 2.0 and 2.1. Official support for JRuby 9.0.5.0+.
– [Luca Guidi] Deprecate #content
in favor of #local
.
- [Steve Hook] Preload partial templates in order to boost performances for partials rendering (2x faster)
- [Luca Guidi] Disable Slim autoescape to use
Hanami::View
's feature
- [Luca Guidi] Renamed the project
- [Luca Guidi] Added
Lotus::View::Configuration#default_encoding
to set the encoding for templates
- [Luca Guidi] Let exceptions to be raised as they occur in rendering context. This fixes misleading backtraces for exceptions.
- [Martin Rubi] Raise a
Lotus::View::MissingTemplateError
when rendering a missing partial from a template - [Luca Guidi] Fix for
template.erb is not valid US-ASCII (Encoding::InvalidByteSequenceError)
when system encoding is not set
- [Liam Dawson] Introduced
Lotus::View::Error
and let all the framework exceptions to inherit from it.
- [Luca Guidi] Autoescape for layout helpers.
- [Farrel Lifson] Force partial finder to be explicit when to templates have the same name.
- [Tom Kadwill] Ensure views to use methods defined by the associated layout.
- [Luca Guidi] Introduced
#content
to render optional contents in a different context (eg. a view sets a page specific javascript in the application template footer).
- [Luca Guidi] Autoescape concrete and virtual methods from presenters
- [Luca Guidi] Autoescape concrete and virtual methods from views
- [Tom Kadwill] Improve error message for undefined method in view
- [Luca Guidi] Ensure that layouts will include modules from
Configuration#prepare
- [Trung Lê] When duplicate the framework, also duplicate
Presenter
- [Benny Klotz] Introduced
Scope#class
,#inspect
,LayoutScope#class
and#inspect
- [Alfonso Uceda Pompa & Trung Lê] Introduced
Configuration#prepare
- [Luca Guidi] Implemented "respond to" logic for
Lotus::View::Scope
(respond_to?
andrespond_to_missing?
) - [Luca Guidi] Implemented "respond to" logic for
Lotus::Layout
(respond_to?
andrespond_to_missing?
) - [Jeremy Stephens] Allow view concrete methods that accept a block to be invoked from templates
- [Peter Suschlik] Implemented "respond to" logic for
Lotus::Presenter
(respond_to?
andrespond_to_missing?
) - [Luca Guidi] Official support for Ruby 2.2
- [Alfonso Uceda Pompa] Raise an exception when a layout doesn't have an associated template
- [Luca Guidi] Ensure that concrete methods in layouts are available in templates
- [Luca Guidi] Ensure to associate the right layout to a view in case fo duplicated framework
- [Luca Guidi] Safe override of Ruby's top level methods in Scope. (Eg. use
select
from a view, not from::Kernel
)
- [Luca Guidi] Introduced
Configuration#duplicate
- [Luca Guidi] Introduced
Configuration#layout
to define the layout that all the views will use - [Luca Guidi] Introduced
Configuration#load_paths
to define several sources where to lookup for templates - [Luca Guidi] Introduced
Configuration#root
to define the root path where to find templates - [Luca Guidi] Introduced
Lotus::View::Configuration
- [Grant Ammons] Allow view concrete methods with arity > 0 to be invoked from templates
- [Luca Guidi] Official support for Ruby 2.1
- [Luca Guidi]
Rendering::TemplatesFinder
now look recursively for templates, starting from the root. - [Luca Guidi] Removed
View.layout=
- [Luca Guidi] Removed
View.root=
- [Luca Guidi] Ensure outermost locals to not shadow innermost inside templates/partials
- [Luca Guidi] Allow custom rendering policy via
Action#render
override. This bypasses the template lookup and rendering. - [Luca Guidi] Introduced
Lotus::Presenter
- [Luca Guidi] Introduced templates rendering from templates and layouts
- [Luca Guidi] Introduced partials rendering from templates and layouts
- [Luca Guidi] Introduced layouts support
- [Luca Guidi] Introduced
Lotus::View.load!
as entry point to load views and templates - [Luca Guidi] Allow to setup template name via
View.template
- [Luca Guidi] Rendering context also considers locals passed to the constructor
- [Luca Guidi] Introduced
View.format
as DSL to declare which format to handle - [Luca Guidi] Introduced view subclasses as way to handle different formats (mime types)
- [Luca Guidi] Introduced multiple templates per each View
- [Luca Guidi] Implemented basic rendering with templates
- [Luca Guidi] Official support for Ruby 2.0