Class: Sprockets::DirectiveProcessor
- Inherits:
-
Object
- Object
- Sprockets::DirectiveProcessor
- Defined in:
- lib/sprockets/directive_processor.rb
Overview
The ‘DirectiveProcessor` is responsible for parsing and evaluating directive comments in a source file.
A directive comment starts with a comment prefix, followed by an “=”, then the directive name, then any arguments.
// JavaScript
//= require "foo"
# CoffeeScript
#= require "bar"
/* CSS
*= require "baz"
*/
This makes it possible to disable or modify the processor to do whatever you’d like. You could add your own custom directives or invent your own directive syntax.
‘Environment#processors` includes `DirectiveProcessor` by default.
To remove the processor entirely:
env.unregister_processor('text/css', Sprockets::DirectiveProcessor)
env.unregister_processor('application/javascript', Sprockets::DirectiveProcessor)
Then inject your own preprocessor:
env.register_processor('text/css', MyProcessor)
Constant Summary collapse
- DIRECTIVE_PATTERN =
Directives are denoted by a ‘=` followed by the name, then argument list.
A few different styles are allowed:
// =require foo //= require foo //= require "foo"
/ ^ \W* = \s* (\w+.*?) (\*\/)? $ /x
Class Method Summary collapse
Instance Method Summary collapse
- #_call(input) ⇒ Object
- #call(input) ⇒ Object
-
#initialize(comments: []) ⇒ DirectiveProcessor
constructor
A new instance of DirectiveProcessor.
Constructor Details
#initialize(comments: []) ⇒ DirectiveProcessor
Returns a new instance of DirectiveProcessor.
60 61 62 |
# File 'lib/sprockets/directive_processor.rb', line 60 def initialize(comments: []) @header_pattern = compile_header_pattern(Array(comments)) end |
Class Method Details
.call(input) ⇒ Object
56 57 58 |
# File 'lib/sprockets/directive_processor.rb', line 56 def self.call(input) instance.call(input) end |
.instance ⇒ Object
51 52 53 54 |
# File 'lib/sprockets/directive_processor.rb', line 51 def self.instance # Default to C comment styles @instance ||= new(comments: ["//", ["/*", "*/"]]) end |
Instance Method Details
#_call(input) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/sprockets/directive_processor.rb', line 68 def _call(input) @environment = input[:environment] @uri = input[:uri] @filename = input[:filename] @dirname = File.dirname(@filename) # If loading a source map file like `application.js.map` resolve # dependencies using `.js` instead of `.js.map` @content_type = SourceMapProcessor.original_content_type(input[:content_type], error_when_not_found: false) @required = Set.new(input[:metadata][:required]) @stubbed = Set.new(input[:metadata][:stubbed]) @links = Set.new(input[:metadata][:links]) @dependencies = Set.new(input[:metadata][:dependencies]) @to_link = Set.new @to_load = Set.new data, directives = process_source(input[:data]) process_directives(directives) { data: data, required: @required, stubbed: @stubbed, links: @links, to_load: @to_load, to_link: @to_link, dependencies: @dependencies } end |
#call(input) ⇒ Object
64 65 66 |
# File 'lib/sprockets/directive_processor.rb', line 64 def call(input) dup._call(input) end |