<?php 
namespace JmesPath; 
 
/** 
 * Provides a simple environment based search. 
 * 
 * The runtime utilized by the Env class can be customized via environment 
 * variables. If the JP_PHP_COMPILE environment variable is specified, then the 
 * CompilerRuntime will be utilized. If set to "on", JMESPath expressions will 
 * be cached to the system's temp directory. Set the environment variable to 
 * a string to cache expressions to a specific directory. 
 */ 
final class Env 
{ 
    const COMPILE_DIR = 'JP_PHP_COMPILE'; 
 
    /** 
     * Returns data from the input array that matches a JMESPath expression. 
     * 
     * @param string $expression JMESPath expression to evaluate 
     * @param mixed  $data       JSON-like data to search 
     * 
     * @return mixed|null Returns the matching data or null 
     */ 
    public static function search($expression, $data) 
    { 
        static $runtime; 
        if (!$runtime) { 
            $runtime = Env::createRuntime(); 
        } 
        return $runtime($expression, $data); 
    } 
 
    /** 
     * Creates a JMESPath runtime based on environment variables and extensions 
     * available on a system. 
     * 
     * @return callable 
     */ 
    public static function createRuntime() 
    { 
        switch ($compileDir = getenv(self::COMPILE_DIR)) { 
            case false: return new AstRuntime(); 
            case 'on': return new CompilerRuntime(); 
            default: return new CompilerRuntime($compileDir); 
        } 
    } 
 
    /** 
     * Delete all previously compiled JMESPath files from the JP_COMPILE_DIR 
     * directory or sys_get_temp_dir(). 
     * 
     * @return int Returns the number of deleted files. 
     */ 
    public static function cleanCompileDir() 
    { 
        $total = 0; 
        $compileDir = getenv(self::COMPILE_DIR) ?: sys_get_temp_dir(); 
        foreach (glob("{$compileDir}/jmespath_*.php") as $file) { 
            $total++; 
            unlink($file); 
        } 
 
        return $total; 
    } 
} 
 
 |