8

GitHub - myerscode/package-discovery: A package to help find plugins for package...

 1 year ago
source link: https://github.com/myerscode/package-discovery
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Package Discovery

A service to help easily find plugins for your services, using Composer metadata!

Install

You can install this package via composer:

composer require myerscode/package-discovery

Usage

Publishing projects just need to add appropriate metadata in their package, which can be then detected by a consuming project. A project which wants to disover projects will need to instantiate a Finder to look up the project namespace. You will then be able to consume the found metadata in the project as desired.

Publishing project

In your package.json file, add a object in the extras object, with a key that relates to the project namespace you want to discover it.

{
  "extra": {
    "name": "myerscode/corgis",
    "myerscode": {
      "corgis": ["Gerald", "Rupert"],
      "providers": [
        "Myerscode\\Corgis\\CorgiProvider"
      ]
    }
  }
}

Consuming project

Using the Finder class, initiate passing in the root path, relative to the vendor directory.

Then use the discover method to find all packages that have the given name in its extras field.

$finder = new Finder(__DIR__);

// would find all installed packages that have a myerscode namespace in the extras
$packages = $finder->discover('myerscode');

After discovering package you would have an array of metadata for each one discovered.

[
  "myerscode/corgis" => [
      "corgis": ["Gerald", "Rupert"],
      "providers": [
        "Myerscode\\Corgis\\CorgiProvider"
      ]
  ]
]

Avoiding discovery

If you don't want to discover a specific project, then you can add some metadata in the consuming package to prevent this.

You would do this by adding the package name to avoid under the projects namespace in the extras field of package.json.

{
  "extra": {
    "name": "myerscode/demo-project",
    "myerscode": {
      "avoid": [
        "myerscode/corgis"
      ]
    }
  }
}

If you want to avoid loading in all discoverable packages, simply add * in the avoid field.

{
  "extra": {
    "name": "myerscode/demo-project",
    "myerscode": {
      "avoid": [ "*" ]
    }
  }
}

Locating a package

When you want to find out where a package is located on the disk, you can use the locate method to look up its absolute path.

$finder = new Finder(__DIR__);

echo $finder->locate('myerscode/test-package');

// /User/fred/project-name/vendor/myerscode/test-package

Getting package meta for a service

To get package meta for a specific service call the packageMetaForService method, passing the package name and the service name.

$finder = new Finder(__DIR__);

echo $finder->packageMetaForService('myerscode/test-package', 'myerscode');

[
    "corgis": ["Gerald", "Rupert"],
    "providers": [
        "Myerscode\\Corgis\\CorgiProvider"
    ]
]

Getting package extra

To get all the extras data for a package call the packageExtra method.

$finder = new Finder(__DIR__);

echo $finder->packageExtra('myerscode/test-package');

[
    "myerscode" => [
        "corgis": ["Gerald", "Rupert"],
        "providers": [
            "Myerscode\\Corgis\\CorgiProvider"
        ]
    ]
]

Issues

Bug reports and feature requests can be submitted on the Github Issue Tracker.

Contributing

See the Myerscode contributing page for information.

License

The MIT License (MIT). Please see License File for more information.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK