Releases: ViewComponent/view_component
4.0.0.rc1
Almost six years after releasing v1.0.0, we're proud to ship the first release candidate of ViewComponent 4. This release marks a shift towards a Long Term Support model for the project, having reached significant feature maturity. While contributions are always welcome, we're unlikely to accept further breaking changes or major feature additions.
Please report any issues at https://github.com/ViewComponent/view_component/issues.
Breaking changes (production)
-
Remove dependency on
ActionView::Base
, eliminating the need for capture compatibility patch. In some edge cases, this change may require switching to use thehelpers.
proxy. -
Require non-EOL Rails (
>= 7.1.0
) and Ruby (>= 3.2.0
). -
Remove
render_component
andrender
monkey patch configured withrender_monkey_patch_enabled
. -
Remove deprecated
use_helper(s)
. Useinclude MyHelper
orhelpers.
proxy instead. -
Support compatibility with
Dry::Initializer
. As a result,EmptyOrInvalidInitializerError
will no longer be raised. -
Remove default initializer from
ViewComponent::Base
. Previously,ViewComponent::Base
defined a catch-all initializer that allowed components without an initializer defined to be passed arbitrary arguments. -
Remove
use_deprecated_instrumentation_name
configuration option. Events will always userender.view_component
name. -
Remove unnecessary
#format
methods that returnednil
. -
Remove support for variant names containing
.
to be consistent with Rails. -
Rename internal methods to have
__vc_
prefix if they shouldn't be used by consumers. Make internal constants private. MakeCollection#components
,Slotable#register_polymorphic_slot
private. Remove unusedComponentError
class. -
Use ActionView's
lookup_context
for picking templates instead of the request format.3.15 added support for using templates that match the request format, that is if
/resource.csv
is requested then
ViewComponents would pick_component.csv.erb
over_component.html.erb
.With this release, the request format is no longer considered and instead ViewComponent will use the Rails logic for picking the most appropriate template type, that is the csv template will be used if it matches the
Accept
header or because the controller uses arespond_to
block to pick the response format.
Breaking changes (dev/test)
-
Rename
config.generate.component_parent_class
toconfig.generate.parent_class
. -
Remove
config.test_controller
in favor ofvc_test_controller_class
test helper method. -
config.component_parent_class
is nowconfig.generate.component_parent_class
, moving the generator-specific option to the generator configuration namespace. -
Move previews-related configuration (
enabled
,route
,paths
,default_layout
,controller
) to underpreviews
namespace. -
config.view_component_path
is nowconfig.generate.path
, as components have long since been able to exist in any directory. -
--inline
generator option now generates inline template. Use--call
to generate#call
method. -
Remove broken integration with
rails stats
that ignored components outside ofapp/components
. -
Remove
preview_source
functionality. Consider using Lookbook instead. -
Use
Nokogiri::HTML5
instead ofNokogiri::HTML4
for test helpers. -
Move generators to a ViewComponent namespace.
Before, ViewComponent generators pollute the generator namespace with a bunch of top level items, and claim the generic "component" name.
Now, generators live in a "view_component" module/namespace, so what was before
rails g component
is nowrails g view_component:component
.
New features
- Add
SystemSpecHelpers
for use with RSpec. - Add support for including
Turbo::StreamsHelper
. - Add template annotations for components with
def call
. - Graduate
SlotableDefault
to be included by default. - Add
#current_template
accessor andTemplate#path
for diagnostic usage. - Reduce string allocations during compilation.
Bug fixes
- Fix bug where virtual path wasn't reset, breaking translations outside of components.
- Fix bug where
config.previews.enabled
didn't function properly in production environments. - Fix bug where response format wasn't set, which caused issues with Turbo Frames.
- Fix bug in
SlotableDefault
where default couldn't be overridden when content was passed as a block. - Fix bug where request-aware helpers didn't work outside of the request context.
ViewComponentsSystemTestController
shouldn't be useable outside of test environment
Non-functional changes
- Remove unnecessary usage of
ruby2_keywords
. - Remove unnecessary
respond_to
checks. - Require MFA when publishing to RubyGems.
- Clean up project dependencies, relaxing versions of development gems.
- Add test case for absolute URL path helpers in mailers.
- Update documentation on performance to reflect more representative benchmark showing 2-3x speed increase over partials.
- Add documentation note about instrumentation negatively affecting performance.
- Remove unnecessary ENABLE_RELOADING test suite flag.
config.previews.default_layout
should default to nil.- Add test coverage for uncovered code.
- Test against
turbo-rails
v2
andrspec-rails
v7
.
4.0.0.alpha7
-
BREAKING: Remove deprecated
use_helper(s)
. Useinclude MyHelper
orhelpers.
proxy instead.Joel Hawksley
-
BREAKING: Support compatibility with
Dry::Initializer
. As a result,EmptyOrInvalidInitializerError
will no longer be raised.Joel Hawksley
-
BREAKING: Rename
config.generate.component_parent_class
toconfig.generate.parent_class
.Joel Hawksley
-
Fix bug where
config.previews.enabled
did not function properly in production environments.Joel Hawksley
-
config.previews.default_layout
should default to nil.Joel Hawksley
-
Add test case for absolute URL path helpers in mailers.
Joel Hawksley
-
Fix bug where response format wasn't set, which caused issues with Turbo Frames.
Joel Hawksley
4.0.0.alpha6
-
BREAKING: Remove
config.test_controller
in favor ofvc_test_controller_class
test helper method.Joel Hawksley
-
BREAKING:
config.component_parent_class
is nowconfig.generate.component_parent_class
, moving the generator-specific option to the generator configuration namespace.Joel Hawksley
-
BREAKING: Move previews-related configuration (
enabled
,route
,paths
,default_layout
,controller
) to underpreviews
namespace.Joel Hawksley
-
Add template annotations for components with
def call
.Joel Hawksley
-
Add support for including Turbo::StreamsHelper.
Stephen Nelson
-
Update documentation on performance to reflect more representative benchmark showing 2-3x speed increase over partials.
Joel Hawksley
-
Add documentation note about instrumentation negatively affecting performance.
Joel Hawksley
-
Revert object shapes optimization due to lack of evidence of improvement.
Joel Hawksley
v3.23.2
-
Include .tt files in published gem. Fixes templates not being available when using generators.
Florian Aßmann
v3.23.1
-
Restore Rake tasks in published gem.
Franz Liedke
v3.23.0
-
Add docs about Slack channel in Ruby Central workspace. (Join us! #oss-view-component). Email joelhawksley@github.com for an invite.
*Joel Hawksley
-
Do not include internal
DocsBuilderComponent
orYARD::MattrAccessorHandler
in published gem.Joel Hawksley
-
Only lock to
concurrent-ruby
1.3.4
for Rails 6.1.Joel Hawksley
-
Fix generation of ViewComponent documentation that was broken due to HTML safety issues.
Simon Fish
-
Add documentation on how ViewComponent works.
Joel Hawksley
-
Clarify that
config.use_deprecated_instrumentation_name
will be removed in v4.Joel Hawksley
-
Run RSpec tests in CI.
Joel Hawksley
4.0.0.alpha5
-
BREAKING:
config.view_component_path
is nowconfig.generate.path
, as components have long since been able to exist in any directory.Joel Hawksley
-
BREAKING: Remove broken integration with
rails stats
that ignored components outside ofapp/components
.Joel Hawksley
-
Add internal optimization for Ruby object shapes.
Adam Hess, Joel Hawksley
4.0.0.alpha4
-
BREAKING: Remove default initializer from
ViewComponent::Base
. Previously,ViewComponent::Base
defined a catch-all initializer that allowed components without an initializer defined to be passed arbitrary arguments.Joel Hawksley
-
Graduate
SlotableDefault
to be included by default.Joel Hawksley
-
Fix bug in
SlotableDefault
where default couldn't be overridden when content was passed as a block.Bill Watts, Joel Hawksley
4.0.0.alpha3
-
BREAKING: Remove dependency on
ActionView::Base
, eliminating the need for capture compatibility patch.Cameron Dutro
4.0.0.alpha2
-
Add
#current_template
accessor andTemplate#path
for diagnostic usage.Joel Hawksley