class

Detector::Ruby::Padrino

Inherits Detector < Reference < Object

Padrino is a full-stack framework built directly on top of Sinatra — every Padrino app also carries Sinatra's route-registration DSL, so the Sinatra detector legitimately fires on Padrino projects too (see NoirTechs::Catalog::Ruby::PADRINO's :supersedes). This detector needs its own, more specific positive signal so ruby_padrino is additive rather than a re-detection of ruby_sinatra under another name.

Constants

SOURCE_MARKERS = Regex.union("Padrino::Application", "Padrino.mount", /require\s+['"]padrino-core['"]/, /require\s+['"]padrino['"]/)

Padrino::Application is the base class every mountable sub-app inherits from, Padrino.mount is the config/apps.rb mounting call, and require 'padrino-core' / require 'padrino' cover apps that pull the framework in without ever subclassing Padrino::Application directly (e.g. a single-file app built on Padrino::Routing).

Class methods

tech_name

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

Source

Instance methods

applicable?(filename : String) : Bool

Cheap filename-only filter the detector pass uses to skip detect on files the detector cannot possibly match. The default true preserves prior behavior (every detector runs on every file). Override with the same predicate the body of detect starts with — e.g., filename.ends_with?(".py") for a Python framework detector — so the detector loop avoids the detect dispatch on files outside the detector's language.

On large codebases (saleor's 4255 .py files) this lifts ~100 virtual detect calls per file out of the hot loop because most detectors' inner first-line is exactly this kind of cheap filename check.

Source
detect(filename : String, file_contents : String) : Bool
Source
set_name
Source