Composer update the directory to ensure we have the latest versions
    of all project dependencies.

    name
        Directory location of the ``composer.json`` file.

    composer
        Location of the ``composer.phar`` file. If not set composer will
        just execute ``composer`` as if it is installed globally.
        (i.e. /path/to/composer.phar)

    php
        Location of the php executable to use with composer.
        (i.e. ``/usr/bin/php``)

    user
        Which system user to run composer as.

        .. versionadded:: 2014.1.4

    prefer_source
        ``--prefer-source`` option of composer.

    prefer_dist
        ``--prefer-dist`` option of composer.

    no_scripts
        ``--no-scripts`` option of composer.

    no_plugins
        ``--no-plugins`` option of composer.

    optimize
        ``--optimize-autoloader`` option of composer. Recommended for production.

    no_dev
        ``--no-dev`` option for composer. Recommended for production.

    quiet
        ``--quiet`` option for composer. Whether or not to return output from composer.

    composer_home
        ``$COMPOSER_HOME`` environment variable

    env
        A list of environment variables to be set prior to execution.

def update(name,
           composer=None,
           php=None,
           user=None,
           prefer_source=None,
           prefer_dist=None,
           no_scripts=None,
           no_plugins=None,
           optimize=None,
           no_dev=None,
           quiet=False,
           composer_home='/root',
           env=None):
    '''
    Composer update the directory to ensure we have the latest versions
    of all project dependencies.

    name
        Directory location of the ``composer.json`` file.

    composer
        Location of the ``composer.phar`` file. If not set composer will
        just execute ``composer`` as if it is installed globally.
        (i.e. /path/to/composer.phar)

    php
        Location of the php executable to use with composer.
        (i.e. ``/usr/bin/php``)

    user
        Which system user to run composer as.

        .. versionadded:: 2014.1.4

    prefer_source
        ``--prefer-source`` option of composer.

    prefer_dist
        ``--prefer-dist`` option of composer.

    no_scripts
        ``--no-scripts`` option of composer.

    no_plugins
        ``--no-plugins`` option of composer.

    optimize
        ``--optimize-autoloader`` option of composer. Recommended for production.

    no_dev
        ``--no-dev`` option for composer. Recommended for production.

    quiet
        ``--quiet`` option for composer. Whether or not to return output from composer.

    composer_home
        ``$COMPOSER_HOME`` environment variable

    env
        A list of environment variables to be set prior to execution.
    '''
    ret = {'name': name, 'result': None, 'comment': '', 'changes': {}}

    # Check if composer.lock exists, if so we already ran `composer install`
    is_installed = __salt__['composer.did_composer_install'](name)
    if is_installed:
        old_status = "composer install has not yet been run in {0}".format(name)
    else:
        old_status = "composer install has been run in {0}".format(name)

    # The state of the system does need to be changed. Check if we're running
    # in ``test=true`` mode.
    if __opts__['test'] is True:
        ret['comment'] = 'The state of "{0}" will be changed.'.format(name)
        ret['changes'] = {
            'old': old_status,
            'new': 'composer install/update will be run in {0}'.format(name)
        }
        ret['result'] = None
        return ret

    try:
        call = __salt__['composer.update'](
            name,
            composer=composer,
            php=php,
            runas=user,
            prefer_source=prefer_source,
            prefer_dist=prefer_dist,
            no_scripts=no_scripts,
            no_plugins=no_plugins,
            optimize=optimize,
            no_dev=no_dev,
            quiet=quiet,
            composer_home=composer_home,
            env=env
        )
    except (SaltException) as err:
        ret['result'] = False
        ret['comment'] = 'Error executing composer in \'{0}\': {1}'.format(name, err)
        return ret

    # If composer retcode != 0 then an exception was thrown and we dealt with it.
    # Any other case is success, regardless of what composer decides to output.

    ret['result'] = True

    if quiet is True:
        ret['comment'] = 'Composer update completed successfully, output silenced by quiet flag'
    else:
        ret['comment'] = 'Composer update completed successfully'
        ret['changes'] = {
            'stderr': call['stderr'],
            'stdout': call['stdout']
        }

    return ret