class

Analyzer::Cfml::Taffy

Inherits Analyzer::Cfml::CfmlEngine < Analyzer < FileHelper < Reference < Object

Taffy REST resources.

Taffy is the most declarative of the CFML frameworks: a resource CFC carries its path as a component-level attribute, and the HTTP verb is the name of the handler function. Path, method and parameters are therefore all statically known.

<cfcomponent extends="taffy.core.resource" taffy_uri="/artist/{id}">
    <cffunction name="get">
        <cfargument name="id" type="string" required="true">

component extends="taffy.core.resource" taffy:uri="/echo" {
    function post(string name = "", string value = "") {}

Constants

PATH_TOKEN_RE = /\{([^}]+)\}/
QUERY_VERBS = Set {"GET", "HEAD", "OPTIONS", "DELETE"}

Verbs whose arguments arrive in the query string rather than a body.

RESOURCE_BASE_RE = /extends\s*=\s*["'][^"']*\bresource\b["']/i
SCRIPT_FUNCTION_TAIL_LIMIT = 200
SCRIPT_FUNCTION_TAIL_RE = /\A[^{;]*/

function name(...) taffy_verb="PATCH" { — the attribute sits between the closing paren and the body brace. The window is bounded because slicing the whole remaining file per declaration made the pass O(n^2) in file size.

URI_ATTRIBUTES = ["taffy_uri", "taffy:uri"]

Both spellings are officially supported — taffy/core/api.cfc reads taffy_uri and falls back to taffy:uri.

VERB_ATTRIBUTES = ["taffy_verb", "taffy:verb"]
VERB_FUNCTIONS = Set {"get", "post", "put", "delete", "head", "options", "patch"}

Taffy dispatches an incoming request to the function named after the HTTP verb.

Class methods

tech_name
Source

Instance methods

analyze
Source
tech

Instance-side view of the same declaration. The per-file rescues live on this base class, which has no way to name the analyzer that is running inside them, so a skipped file could not be attributed to a tech. Deriving it from analyzer_for keeps the name written exactly once.

Source