-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
dependency_tracker.rb
49 lines (41 loc) · 1.33 KB
/
dependency_tracker.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
45
46
47
48
49
# This was taken from jbuilder
require "props_template"
dependency_tracker = false
begin
require "action_view"
require "action_view/dependency_tracker"
dependency_tracker = ::ActionView::DependencyTracker
rescue LoadError
begin
require "cache_digests"
dependency_tracker = ::CacheDigests::DependencyTracker
rescue LoadError
end
end
if dependency_tracker
module Props
module DependencyTrackerMethods
# Matches:
# json.comments @post.comments, partial: "comments/comment", as: :comment
# json.array! @posts, partial: "posts/post", as: :post
#
INDIRECT_RENDERS = /
(?::partial\s*=>|partial:) # partial: or :partial =>
\s* # optional whitespace
\[* # optional Bracket
\s* # optional whitespace
(['"])([^'"]+)\1 # quoted value
/x
def dependencies
indirect_dependencies + explicit_dependencies
end
private
def indirect_dependencies
source.scan(INDIRECT_RENDERS).map(&:second)
end
end
end
Props::DependencyTracker = Class.new(dependency_tracker::ERBTracker)
Props::DependencyTracker.send :include, Props::DependencyTrackerMethods
ActionView::DependencyTracker.register_tracker :props, Props::DependencyTracker
end