-
Notifications
You must be signed in to change notification settings - Fork 7
/
sinatra_scope.rb
44 lines (36 loc) · 1.04 KB
/
sinatra_scope.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module WLang
class Scope
class SinatraScope < ObjectScope
def fetch(key, dialect = nil, unfound = nil)
find_partial(key, subject) || super
end
def inspect
"SinatraScope"
end
alias :to_s :inspect
private
def find_partial(key, app)
find_internal_partial(key, app) || find_external_partial(key, app)
end
def find_internal_partial(key, app)
return unless app.settings.templates[key]
app.send(:compile_template, :wlang, key, {}, app.settings.views)
end
def find_external_partial(key, app)
views = app.settings.views
find_files(views, key) do |file|
if engine = Tilt[file]
tpl = app.template_cache.fetch(file) do
engine.new(file.to_s, 1, {})
end
return tpl
end
end
nil
end
def find_files(folder, name, &bl)
Path(folder).glob("#{name}.*").each(&bl)
end
end # class SinatraScope
end # class Scope
end # module WLang