Skip to content
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

Add deprecation path for arity-zero preference defaults #4170

Merged

Conversation

waiting-for-dev
Copy link
Contributor

Description

Solidus 3.1 shipped with a new preferences system, where a default can
take different values depending on the Solidus version defaults that
have been loaded. See #4064 for details.

To achieve those above, when a proc is given as the default value
constructor, it now should take the loaded Solidus version as an
argument. That's a breaking change, as some extensions or user-defined
preferences may be using zero-arity lambdas.

This commit deprecates zero-arity lambdas but wraps them into another
lambda, taking and disregarding a single argument. That's only needed
for procs with lambda semantics, as raw procs will ignore the provided
extra argument.

When it comes to the implementation, as it's something to be ditched in
the next major release, we've opted for the more straightforward
solution. I.e., wrapping the lambda into the Preferable module even if
it only affects AppConfiguration classes. The default-handling logic
is very entangled into the former, and it'd take more work to extract
it.

Fixes #4165

Checklist:

  • I have followed Pull Request guidelines
  • I have added a detailed description into each commit message
  • I have updated Guides and README accordingly to this change (if needed)
  • I have added tests to cover this change (if needed)
  • I have attached screenshots to this PR for visual changes (if needed)

Solidus 3.1 shipped with a new preferences system, where a default can
take different values depending on the Solidus version defaults that
have been loaded. See solidusio#4064 for details.

To achieve those above, when a proc is given as the default value
constructor, it now should take the loaded Solidus version as an
argument. That's a breaking change, as some extensions or user-defined
preferences may be using zero-arity lambdas.

This commit deprecates zero-arity lambdas but wraps them into another
lambda, taking and disregarding a single argument. That's only needed
for procs with lambda semantics, as raw procs will ignore the provided
extra argument.

When it comes to the implementation, as it's something to be ditched in
the next major release, we've opted for the more straightforward
solution. I.e., wrapping the lambda into the `Preferable` module even if
it only affects `AppConfiguration` classes. The default-handling logic
is very entangled into the former, and it'd take more work to extract
it.

Fixes solidusio#4165
@waiting-for-dev waiting-for-dev force-pushed the waiting-for-dev/fix_preferences_arity branch from ae0d908 to 5c7053d Compare September 15, 2021 09:05
Copy link
Member

@kennyadsl kennyadsl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @waiting-for-dev, we have to release a new patch after this is merged.

Copy link
Member

@jarednorman jarednorman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Seems like a good solution.

@kennyadsl kennyadsl added this to the 3.1.0 milestone Sep 20, 2021
@kennyadsl kennyadsl merged commit b855247 into solidusio:master Sep 20, 2021
@kennyadsl kennyadsl deleted the waiting-for-dev/fix_preferences_arity branch September 20, 2021 14:37
kennyadsl added a commit to nebulab/solidus that referenced this pull request Mar 28, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Mar 28, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Mar 28, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Mar 28, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Apr 12, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Apr 14, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Apr 18, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Apr 18, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Apr 19, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
kennyadsl added a commit to nebulab/solidus that referenced this pull request Apr 24, 2023
Instead of

    preference :foo, :string, default: -> { true }

Do this:

    preference :foo, :string, default: proc { true }

Ref solidusio#4170
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.

Error passing procs to Preferences in Solidus 3.1
4 participants