class Analyzer::Zig::Jetzig

Overview

Jetzig uses filesystem-based "resourceful" routing (Rails-style). A view file under src/app/views/<name>.zig is mounted at /<name>, and the public function names inside it map to a fixed (HTTP method, URL-suffix) table:

index -> GET / get -> GET //:id new -> GET //new edit -> GET //:id/edit post -> POST / put -> PUT //:id patch -> PATCH //:id delete -> DELETE //:id

root.zig is special-cased to /. The view function body is the request handler, so its 1-hop calls are surfaced as callees and params.get("…") reads become query parameters.

Defined in:

analyzer/analyzers/zig/jetzig.cr

Constant Summary

ACTION_FN_RE = /(?:^|[^A-Za-z0-9_.])pub\s+fn\s+(index|get|new|edit|post|put|patch|delete)\s*\(/
ACTIONS = {"index" => {"GET", "", false}, "get" => {"GET", "/:id", true}, "new" => {"GET", "/new", false}, "edit" => {"GET", "/:id/edit", true}, "post" => {"POST", "", false}, "put" => {"PUT", "/:id", true}, "patch" => {"PATCH", "/:id", true}, "delete" => {"DELETE", "/:id", true}}

action => {http method, url suffix, has resource id}

CUSTOM_ROUTE_RE = /\.\s*route\s*\(\s*\.\s*(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|CONNECT|TRACE)\s*,\s*"(\/[^"]*)"\s*,\s*@import\s*\(\s*"([^"]+\.zig)"\s*\)\s*,\s*\.\s*(\w+)\s*\)/

Explicit custom route registered in the app's startup hook, e.g. app.route(.GET, "/api/products/:id", @import("app/api/products.zig"), .get); The view module lives outside app/views/ (so resourceful routing never sees it) and the action is named by the trailing .<action> enum literal.

PARAM_GET_RE = /\b(?:params|query)\s*\.\s*get\s*\(\s*"([^"]+)"/
VIEWS_MARKER = "app#{File::SEPARATOR}views#{File::SEPARATOR}"

Instance Method Summary

Instance methods inherited from class Analyzer

analyze analyze, base_path : String base_path, base_paths : Array(String) base_paths, callees_needed? : Bool callees_needed?, logger : NoirLogger logger, parallel_analyze(files : Array(String), &block : String -> Nil) parallel_analyze, read_file_content(path : String) : String read_file_content, result : Array(Endpoint) result, url : String url

Constructor methods inherited from class Analyzer

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

Macros inherited from class Analyzer

define_getter_methods(names) define_getter_methods

Instance methods inherited from module FileHelper

all_files : Array(String) all_files, get_files_by_extension(extension : String) : Array(String) get_files_by_extension, get_files_by_prefix(prefix : String) : Array(String) get_files_by_prefix, get_files_by_prefix_and_extension(prefix : String, extension : String) : Array(String) get_files_by_prefix_and_extension, get_public_dir_files(base_path : String, folder : String) : Array(String) get_public_dir_files, get_public_files(base_path : String, anchors : Array(String) = ["shard.yml", "Gemfile"]) : Array(String) get_public_files

Instance Method Detail

def analyze #

[View source]