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.

Class Method Summary

Instance Method Summary

Instance methods inherited from class Detector

applicable?(filename : String) : Bool applicable?, base_relative_path(filename : String) : String base_relative_path, content_matches?(file_contents : String, markers : Regex) : Bool content_matches?, 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

Macros inherited from class Detector

detector_for(tech, extensions = nil, basenames = nil, path_segments = nil, idempotent = nil) detector_for

Class Method Detail

def self.tech_name : String #

The tech name without needing an instance, so the registry can be read off the classes themselves rather than from a parallel list.


[View source]

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 #

Registers each config path in CodeLocator.


[View source]