* Implemented ScriptRunner with environment expansion and cleaner code. * Added ApiClient plugin (com.noccy.apiclient) * Renamed CHANGELOG.md to VERSIONS.md * Shuffled buildtools * Added first unittests
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php // "name":"Call on web APIs", "author":"Noccy"
 | 
						|
 | 
						|
namespace SparkPlug\Com\Noccy\ApiClient\Api;
 | 
						|
 | 
						|
use JsonSerializable;
 | 
						|
 | 
						|
class Catalog implements JsonSerializable
 | 
						|
{
 | 
						|
    private array $properties = [];
 | 
						|
 | 
						|
    private array $methods = [];
 | 
						|
 | 
						|
    private ?string $name;
 | 
						|
 | 
						|
    private ?string $info;
 | 
						|
 | 
						|
    public function __construct(array $catalog=[])
 | 
						|
    {
 | 
						|
        $catalog = $catalog['catalog']??[];
 | 
						|
        $this->name = $catalog['name']??null;
 | 
						|
        $this->info = $catalog['info']??null;
 | 
						|
        foreach ($catalog['props']??[] as $k=>$v) {
 | 
						|
            $this->properties[$k] = $v;
 | 
						|
        }
 | 
						|
        foreach ($catalog['methods']??[] as $k=>$v) {
 | 
						|
            $this->methods[$k] = new Method($v);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public static function createFromFile(string $filename): Catalog
 | 
						|
    {
 | 
						|
        $json = file_get_contents($filename);
 | 
						|
        $catalog = json_decode($json, true);
 | 
						|
        $catalog['name'] = basename($filename, ".json");
 | 
						|
        return new Catalog($catalog);
 | 
						|
    }
 | 
						|
 | 
						|
    public function getName(): ?string
 | 
						|
    {
 | 
						|
        return $this->name;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getInfo(): ?string
 | 
						|
    {
 | 
						|
        return $this->info;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getProperties(): array
 | 
						|
    {
 | 
						|
        return $this->properties;
 | 
						|
    }
 | 
						|
 | 
						|
    public function applyProperties(array $props)
 | 
						|
    {
 | 
						|
        $this->properties = array_merge($this->properties, $props);
 | 
						|
    }
 | 
						|
 | 
						|
    public function addMethod(string $name, Method $method)
 | 
						|
    {
 | 
						|
        $this->methods[$name] = $method;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getMethod(string $method): ?Method
 | 
						|
    {
 | 
						|
        return $this->methods[$method]??null;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getMethods(): array
 | 
						|
    {
 | 
						|
        return $this->methods;
 | 
						|
    }
 | 
						|
 | 
						|
    public function jsonSerialize(): mixed
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'catalog' => [
 | 
						|
                'name' => $this->name,
 | 
						|
                'info' => $this->info,
 | 
						|
                'props' => $this->properties,
 | 
						|
                'methods' => $this->methods,
 | 
						|
            ]
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |