public function match($options, ThemeMatchingContext $context)
    {
        // only name given
        if (is_string($options)) {
            $options = array('name' => $options);
        }

        // validate options
        $options = $this->optionsResolver->resolve($options);
        if (empty($options)) {
            throw new \InvalidArgumentException('You must at least define one theme loading option.');
        }

        // run strategies from options
        foreach ($options as $key => $option) {
            try {
                if ($local = $this->resolutionStrategies[$key]($option, $context)) {
                    $themeName = $local;
                }
            } catch (InvalidThemeException $e) {
                continue;
            }
        }

        // Guess theme name from strategies
        if (empty($themeName)) {
            throw new InvalidThemeException(sprintf(
                'Unavailable to determine requested theme name throught ["%s"] strategies and given context. Check your configuration.',
                implode('", "', array_keys($options))
            ));
        }

        // Try to activate this theme into Synapse engine
        try {
            return $this->synapseEngine
                ->enableTheme($themeName)
                ->getCurrentTheme()
            ;
        } catch (InvalidThemeException $e) {
            throw new InvalidThemeException(
                sprintf(
                    'Unavailable to activate a theme with "%s" name, guessed from given context, using ["%s"] strategies.',
                    $themeName,
                    implode('", "', array_keys($options))
                ),
                0,
                $e
            );
        }
    }