composer-fallback/redis.predis

Satisfy "redis" with packages provided by user, or fallback to "predis".

Installs: 11

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 2

Forks: 0

Type:metapackage

1.1 2020-10-02 12:33 UTC

This package is auto-updated.

Last update: 2024-03-29 04:06:05 UTC


README

Provides a metapackage for library needing redis that fallback to a default implementation when user does not meet the initial requirements.

Usage

composer require "composer-fallback/redis.predis:*"

Composer will, by preference:

  • check if user has ext-redis
  • otherwise, fallbacks to predis/predis

How does it works

This package contains 2 versions:

  1. The highest 1.1 needs ext-redis.

  2. The lowest 1.0 triggers install of predis/predis.

Composer will choose this highest version when user has the extension ext-redis. Otherwise, composer will choose the lowest version and in that case will download the following packages: predis/predis.

What problem does it solve?

You are maintaining a library that need an implementation of redis, but you don't want requiring a specific implementation.

ie. you need function defined in redis, but polyfill exists and would be enough.

When end users requires you library with the following code

{
    "name": "end-user/app",
    "require": {
      "acme/lib": "^1.0"
    }
}

They probably ends with such error

composer up

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for acme/lib ^1.0 -> satisfiable by acme/lib[1.0].
    - acme/lib 1.0 requires ext-redis * -> no matching package found.

You can ask user to install a random package, it works, but the DX is very bad, and confusing at first.

By using composer-fallback/redis.predis, users will provide the native implementation or fallback to your default choice

Example of user that meet the preferred requirements

{
    "name": "end-user/app",
    "require": {
        "acme/lib": "^1.0",
        "third-party/provide-implementation": "^1.0"
    }
}
composer up
...
Package operations: 2 installs, 0 updates, 0 removals
  - Installing acme/lib (1.0)
  - Installing composer-fallback/redis.predis (1.1)

Example of user that fallback to your recommendations

{
    "name": "end-user/app",
    "require": {
        "acme/lib": "^1.0"
    }
}
composer up
...
Package operations: 3 installs, 0 updates, 0 removals
  - Installing acme/lib (1.0)
  - Installing composer-fallback/redis.predis (1.0)
  - Installing predis/predis (1.0)

Contributing

This repository is automatically generated. If you want contributing and submitting an issue or a Pull Request, please use composer-fallback/generator.