Class: UnusedView::PartialView

Inherits:
Object
  • Object
show all
Defined in:
lib/unused_view/partial_view.rb

Constant Summary collapse

PATTERN =
{
  render: %r{\brender\s*(?:\(\s*)?},
  partial: %r{:partial\s*=>\s*|partial:\s*},
  filename: %r{[\w/]+?},
  extention: %r{\.\w+}
}

Instance Method Summary collapse

Constructor Details

#initialize(views) ⇒ PartialView

Returns a new instance of PartialView.



12
13
14
# File 'lib/unused_view/partial_view.rb', line 12

def initialize(views)
  @views = views
end

Instance Method Details

#find_allObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/unused_view/partial_view.rb', line 16

def find_all
  @views.reduce([]) do |sum, view|
    used_partials_by_view = File.open(view) { |f| f.read.split("\n") }.map do |line|
      if line =~ %r[(?:#{PATTERN[:partial]}|#{PATTERN[:render]})(['"])/?(#{PATTERN[:filename]})#{PATTERN[:extention]}*\1]
        $2 # virtual path. e.g. articles/form
      end
    end.compact.map do |vpath|
      File.class_eval do
        if vpath.index('/')
          path = ApplicationController.view_paths.map do |view_path|
            File.join(view_path.to_s, vpath)
          end.select { |f| File.exists?(File.dirname(f)) }.first || vpath
        else
          path = view
        end
        filename = "_#{basename(vpath)}.#{basename(view).split('.')[1..-1].join('.')}"
        expand_path(join(dirname(path), filename)).to_s
      end
    end
    sum + used_partials_by_view
  end.uniq
end