merlinthemagic / MTS

Automation Tools for PHP
GNU Lesser General Public License v3.0
111 stars 29 forks source link

Composer support #1

Closed itsmemattchung closed 8 years ago

itsmemattchung commented 8 years ago

Would it be possible to use something like composer to install the library. I'm not running a web server and won't be executing the installation script.

merlinthemagic commented 8 years ago

Absolutely. I am exploring the best way to solve dependencies and install the lib.

Thx Martin

merlinthemagic commented 8 years ago

The project depends on 2 programs "screen" and "python". Optionally "sudo" if sudo is available it can be configured to make getting root access easier than passing root credentials.

I have looked around and i cannot find any dependency management tool that includes the ability to add system level packages. Composer can list the available packages but not install .

Composer would be fine to ensure the correct PHP version and OS version, but it would not be able to i.e. trigger 'apt-get install screen' or edit '/etc/sudoers' if the user wanted sudo support.

Do you know of any managers that can handle the process end to end? Otherwise does it not make more sense to create a CLI installation script to remove the dependance on a webserver?

merlinthemagic commented 8 years ago

i updated MtsSetup.php so it can be run on the CLI without a browser installed.

Alorel commented 8 years ago

A definite +1 on supporting composer - yes, it does not offer a function to require specific system packages to be installed, but neither does reading the README.md.

The best way to check if the packages are installed I can think of is doing a

trigger_error('message', E_USER_ERROR);

either when the user attempts to perform an operation and receives an output implying that a required package is missing, or by executing a dummy file via shell at the top of your library's PHP files once and checking if the operation exited with code 0.

The 2nd approach would add extra overhead, but could be "cached", e.g. if the test passed, create an empty file in the library's directory and, the next time the library is included, simply check if the file exists instead.

merlinthemagic commented 8 years ago

Hi Alorel, I will work on composer support, in the mean time did you see the segment of the Readme regarding installation? It was located at the very bottom, which in hind sight might have been a mistake. I moved it to the top.

Alorel commented 8 years ago

I did and it's all straightforward - the main aim of my post was to suggest some possible options for your first reply. :)

merlinthemagic commented 8 years ago

@itsmemattchung @Alorel Added composer.json (used "https://github.com/Alorel/dropbox-v2-php/blob/master/composer.json" as template :) ).

However since Composer does not support check or installation of system packages a post install script is triggered. I am not confident in how I defined the autoloader setup, feedback is appreciated.

Alorel commented 8 years ago

Thanks for the update!

The spl_autoload_register code block could be moved to composer.json assuming your classes and namespaces follow the PSR4 specification (i.e. package name + class name = file path, case-sensitive). You could, therefore, have the following in your composer.json:

{
   "autoload": {
      "psr-4": {
        "MTS\\": "MTS"
      },
     "files": [
        "MTS/EnableMTS.php"
      ]
    }
}

EDIT: fixed the json

merlinthemagic commented 8 years ago

@Alorel the namespace is psr-4 compliant. But I am not sure maintaining the constants in the file and allowing composer to handle auto loading of classes is the most flexible option. Anyone installing the library outside of Composer would need to supply an autoloader for MTS to function.

But i appreciate the quick feedback :)

Alorel commented 8 years ago

In that case keeping the autoloader within EnableMTS.php is most likely the best solution. :)