Skip to content

v4.0.0 #2085

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 108 commits into
base: main
Choose a base branch
from
Open

v4.0.0 #2085

wants to merge 108 commits into from

Conversation

joelhawksley
Copy link
Member

@joelhawksley joelhawksley commented Sep 3, 2024

This PR will contain the breaking changes to ship for v4.0.0. We're still likely a long way's off, but I wanted to start to collect changes we know we'll want to land here. Until decided otherwise, we plan to release v4 on or after April 1, 2025,

Tasks

Potentially breaking:

  • Audit remaining open issues and discussions to make sure no other breaking changes are needed
  • Migrate to local configuration, review all config options for possible removal
  • Re-work slots, potentially remove Slot wrapper? (enables .with_slot.with_content)
  • Validate all internal instance variables have __vc_ prefix

Cleanups:

  • set rubygems_mfa_required
  • Fully review all docs, including links to external references
  • Add docs for configuration: Better configuration scaffolding #2188
  • Reference ViewComponent fragment caching gem to see if anything should be upstreamed (https://github.com/patrickarnett/view_component-fragment_caching)
  • Add layout attribute to Rails' render: Add layout attribute POC #2232
  • Revisit docs generation
  • Resolve PVC test suite warnings
  • Revisit symlink used for RSPec tests to avoid duplicated test files in development searches
  • audit for optimal usage of object shapes: Enable warning on shape too complex #2258
  • Add docs for all public methods
  • Make any experimental features included by default
  • API docs should not be on main source control
  • Revisit and document or remove nocovs
  • Consider making RequestDetails in Rails public
  • Revisit benchmarks to see if the VC benchmark is being done in dev mode
  • Add trusted publishing: https://jcouball.substack.com/p/continuous-delivery-for-ruby-gems
  • Extract dotcom VC compiler from GitHub.com (sorbet/tapioca/compilers/view_component.rb / lib/tasks/sorbet.rake)
  • Revisit skipped tests
  • Use mutant gem to find bugs
  • Add rubycritic gem
  • Consider using something like changesets for changelogs, or at least add better guidelines for writing changelogs
  • Bundle audit / brakeman
  • Set up RubyGems org for ViewComponent
  • auto-generate contributor list?
  • Add check for test changes for all functional PRs
  • audit rubocop exceptions
  • Audit/close open issues on repo

Done:

  • Remove any references to v4, such as in the compiler.
  • Include SlotableDefault by default
  • Stop inheriting from ActionView::Base?
  • Use single ActionView::Base instead of inheritance?
  • Always enable capture patch? - test at GitHub, enable by default before v4, remove toggle in v4, could we do it locally in PVC instead? (use refinements?)
  • Add inline template option to generator #1792
  • Add note about v4 being a LTS release
  • See about making internal constants private
  • Follow up on Allow implicit locale in component file names #2118 with more robust solution
  • Revisit view_component-contrib items
  • Further restrict access to internal APIs: Underscore internal methods that are public #2100
  • Migrate ViewComponent::Base.format to return a format instead of the variant #1973
  • Should we remove RedefinedSlotError?
  • consolidate ADRs into History
  • Drop method_source / assets from previews and direct folks to Lookbook
  • Search for “rails” and “6.1” etc to make sure we've removed all deprecatable paths
  • Remove use of ruby2 keywords
  • Revisit all dependencies to see if we still need them
  • Update rspec-rails to v7
  • Update turbo-rails to v2
  • Set up CI for whatever release series we support (one previous major for security? document this, dropping security support for v2 in v4 release)
  • Breaking change to compiler to simplify render path collisions
  • Verify all respond_to? checks are still necessary

* Minimum Ruby version is non-EOL per https://www.ruby-lang.org/en/downloads/branches/ (#2086)

* Only support current Rails and Ruby

In further review of the end-of-life dates for Ruby and Rails,
I propose that we target Ruby >= 3.2 and Rails >= 7.1 which will
be the lowest actively supported versions on April 1, 2025. We can
ship v4 on that date.

* remove backwards compat carve-out

* docs update

* merge cleanup

* update CI config

* remove rails version warning

* grammar
joelhawksley and others added 3 commits September 26, 2024 15:32
* remove appraisals for unsupported rails versions

* remove accommodations for Rails < 6.1 in PreviewHelper

* remove support for Rails < 6.1 in Preview layout

* remove old gemfiles

* remove known issue docs for version of rails no longer supported

* remove old rails support in test suite

* simplify render_inline to only support modern Rails

* always include collection_renderer

* remove ruby and rails deprecation warnings in engine.rb

* remove render_monkey_patch

* remove render monkey patch

* update rendering test for rails and ruby deprecations

* remove duplicate components
joelhawksley and others added 4 commits November 4, 2024 13:53
* add .DS_Store to gitignore

* Add Template subclasses to improve compiler polymorphism

* Move template type-specific logic to constructors

* Inline source into templates that require it

* Flatten inline_call conditional in compile_to_component

* Remove defined_on_self param from non-inline-call templates

* Use ActionView logic for parsing template names

Removes support for variant names containing `.`.

* Delegate template format and variant to TemplateDetails

---------

Co-authored-by: Joel Hawksley <[email protected]>
@joelhawksley joelhawksley mentioned this pull request Jan 6, 2025
7 tasks
@tiagomenegaz tiagomenegaz mentioned this pull request Feb 12, 2025
joelhawksley and others added 6 commits March 5, 2025 14:36
* Move generators into ViewComponent namespace

* Update tests

* Update changelog

* Update docs with new generator namespace
* BREAKING: Use Nokogiri::HTML5 instead of Nokogiri::HTML4 for test helpers

Co-authored-by: Noah Silvera <[email protected]>

* update allocation counts

* allocation counts

---------

Co-authored-by: Noah Silvera <[email protected]>
* do not use respond_to in gemspec

* do not use respond_to in PreviewActions

* remove unnecessary respond_to check

* remove unnecessary respond_to check in template annotations helper

Co-authored-by: Tiago Menegaz <[email protected]>

---------

Co-authored-by: Tiago Menegaz <[email protected]>
* Remove unnecessary usage of ruby2_keywords

* Remove unnecessary usage of ruby2_keywords

* Remove unnecessary usage of ruby2_keywords

* Remove unnecessary usage of ruby2_keywords

* Remove unnecessary usage of ruby2_keywords

* Remove unnecessary usage of ruby2_keywords.

* Remove unnecessary usage of ruby2_keywords.

* Remove unnecessary usage of ruby2_keywords.

* add changelog

* bump rubocop ruby version

* what about this?

* fix bug found by PVC suite?

* allocations

* fix lint

* allocations
joelhawksley and others added 30 commits May 21, 2025 13:14
* move dev dependencies to Gemfile

* bundle update

* get appraisal tests green
…ace (#2317)

* BREAKING: Move previews-related configuration (enabled, route, paths, default_layout, controller) to under previews namespace.

* Update lib/view_component/config.rb

Co-authored-by: Simon Fish <[email protected]>

---------

Co-authored-by: Simon Fish <[email protected]>
* Remove .test_controller in favor of vc_test_controller_class

ViewComponent tests should not be beholden to application
configuration, but instead should be configured in the test setup.

I've removed `config.test_controller` and added
`vc_test_controller_class` as such.

* allocations
…e, remove object shapes optimization (#2329)

* update performance docs to reference more representative benchmark

* Revert "Pre-allocate instance variables for better compatibility with Object Shapes (#2282)"

This reverts commit afbac9b.

* lints

* more lints
In reviewing the framework as a whole for the v4 release,
we decided to remove support for the #use_helper(s) macro,
as it does not align with broader Ruby patterns.
* Deprecate use_helper(s) in favor of include MyHelper or helpers. (#2331)

* Reduce allocations in #with_collection (#2333)

* Add test of number of allocations when rendering with with_collection

* Ensure one-time initializations are done before testing allocations

* Cache calculated collection parameter

* Cache collection_counter_parameter

* Cache collection_iteration_parameter

* Cache initialize_parameter_names

* Add expected number of allocations for all tested Ruby/Rails combinations

* Remove code handling obsolete Rails version

* fix allocations

---------

Co-authored-by: Matijs van Zuijlen <[email protected]>
* Validate compatibility with Dry::Initializer in test suite.

* wip

* Fix final line endings

* re-add conditional for url_helpers include

* use class_attribute default: false

* allocations, lints

* add comment about need for empty init

* update changelog

* fix allocations

* allocations

* disable instrumentation in collection allocations test

* allocations

* allocations

* add more test cases

* lints

---------

Co-authored-by: GitHub Actions Bot <41898282+github-actions[bot]@users.noreply.github.com>
add test case validating discussion #1092 is closed
add test case showing preview reloading works
add test cases to validate discussion #2215 is not an issue
use 4.0.0.alpha6 compat branch of PVC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants