Module: Jade::Extensions
Overview
Where an extension gem hooks into compilation. Only gems named in ALLOWED
may register, so jade knows who extends it and nothing about what they do.
Defined Under Namespace
Classes: CallContext, NotAllowed, UnknownPhase
Constant Summary
collapse
- ALLOWED =
%w[jade-sql].freeze
- PHASES =
%i[call].freeze
Instance Method Summary
collapse
Instance Method Details
#call_checks ⇒ Object
44
|
# File 'lib/jade/extensions.rb', line 44
def call_checks = @call_checks ||= {}
|
#check_call(name, arg_types, node, registry, entry_name, span) ⇒ Object
50
51
52
53
54
55
56
57
|
# File 'lib/jade/extensions.rb', line 50
def check_call(name, arg_types, node, registry, entry_name, span)
call_checks[name].then do |watching|
next [] if watching.nil?
CallContext[name, arg_types, node, registry, entry_name, span]
.then { |ctx| watching.flat_map { it.check(ctx) } }
end
end
|
#derivers ⇒ Object
42
|
# File 'lib/jade/extensions.rb', line 42
def derivers = @derivers ||= []
|
#register_check(gem_name, phase, check) ⇒ Object
A :call check answers watches -> [qualified name] and
check(context) -> [error]. Watching by name keeps every other call in
the program off the check's path entirely.
33
34
35
36
37
38
39
40
|
# File 'lib/jade/extensions.rb', line 33
def register_check(gem_name, phase, check)
allow!(gem_name)
fail UnknownPhase.new(phase) unless PHASES.include?(phase)
@call_checks = check
.watches
.reduce(call_checks) { |acc, name| acc.merge(name => acc.fetch(name, []) | [check]) }
end
|
#register_deriver(gem_name, deriver) ⇒ Object
25
26
27
28
|
# File 'lib/jade/extensions.rb', line 25
def register_deriver(gem_name, deriver)
allow!(gem_name)
@derivers = derivers | [deriver]
end
|
#reset! ⇒ Object
59
60
61
62
|
# File 'lib/jade/extensions.rb', line 59
def reset!
@derivers = []
@call_checks = {}
end
|