class Detector::Specification::Appwrite

Overview

Appwrite projects declare their databases, collections/tables, functions and storage buckets in appwrite.json (the CLI writes appwrite.config.json from v6). The server generates the whole REST surface from that file, so it is the only thing to read.

Defined in:

detector/detectors/specification/appwrite.cr

Constant Summary

CONFIG_FILENAMES = {"appwrite.json", "appwrite.config.json"}
PROJECT_ID_MARKER = /"projectId"\s*:/

projectId is mandatory in every Appwrite config and is the cheap gate before paying for a JSON parse.

RESOURCE_KEYS = {"collections", "tables", "tablesDB", "databases", "functions", "buckets"}

At least one resource family has to be present for the file to describe any surface at all. tables/tablesDB are the >=1.6 names for collections.

Instance Method Summary

Instance methods inherited from class Detector

applicable?(filename : String) : Bool applicable?, detect(filename : String, file_contents : String) : Bool detect, gemfile_dependency?(file_contents : String, gem_name : String) : Bool gemfile_dependency?, gemspec_dependency?(file_contents : String, gem_name : String) : Bool gemspec_dependency?, idempotent? : Bool idempotent?, logger : NoirLogger logger, name : String name, path_sensitive? : Bool path_sensitive?

Constructor methods inherited from class Detector

new(options : Hash(String, YAML::Any)) new

Instance Method Detail

def applicable?(filename : String) : Bool #

Pinned to the two CLI-generated filenames. Nothing else in a project tree is named this, so the detector never reads an unrelated .json.


[View source]
def detect(filename : String, file_contents : String) : Bool #

[View source]
def idempotent? : Bool #

Registers each config path in CodeLocator.


[View source]
def set_name #

[View source]