Class: Brakeman::AppTree
- Inherits:
-
Object
- Object
- Brakeman::AppTree
- Defined in:
- lib/brakeman/app_tree.rb
Constant Summary collapse
- VIEW_EXTENSIONS =
%w[html.erb html.haml rhtml js.erb html.slim].join(",")
Instance Attribute Summary collapse
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Class Method Summary collapse
Instance Method Summary collapse
- #controller_paths ⇒ Object
- #exists?(path) ⇒ Boolean
-
#expand_path(path) ⇒ Object
Should only be used by Brakeman::FilePath.
-
#file_path(path) ⇒ Object
Create a new Brakeman::FilePath.
- #gemspec ⇒ Object
-
#initialize(root, init_options = {}) ⇒ AppTree
constructor
A new instance of AppTree.
- #initializer_paths ⇒ Object
- #layout_exists?(name) ⇒ Boolean
- #lib_paths ⇒ Object
- #model_paths ⇒ Object
-
#relative_path(path) ⇒ Object
Should only be used by Brakeman::FilePath Use AppTree#file_path(path).relative instead.
- #template_paths ⇒ Object
Constructor Details
#initialize(root, init_options = {}) ⇒ AppTree
Returns a new instance of AppTree.
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/brakeman/app_tree.rb', line 56 def initialize(root, = {}) @root = root @project_root_path = Pathname.new(@root) @skip_files = [:skip_files] @only_files = [:only_files] @additional_libs_path = [:additional_libs_path] || [] @engine_paths = [:engine_paths] || [] @absolute_engine_paths = @engine_paths.select { |path| path.start_with?(File::SEPARATOR) } @relative_engine_paths = @engine_paths - @absolute_engine_paths @gemspec = nil @root_search_pattern = nil end |
Instance Attribute Details
#root ⇒ Object (readonly)
Returns the value of attribute root.
8 9 10 |
# File 'lib/brakeman/app_tree.rb', line 8 def root @root end |
Class Method Details
.from_options(options) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/brakeman/app_tree.rb', line 10 def self.() root = File. [:app_path] # Convert files into Regexp for matching = {} if [:skip_files] [:skip_files] = regex_for_paths([:skip_files]) end if [:only_files] [:only_files] = regex_for_paths([:only_files]) end [:additional_libs_path] = [:additional_libs_path] [:engine_paths] = [:engine_paths] new(root, ) end |
Instance Method Details
#controller_paths ⇒ Object
103 104 105 |
# File 'lib/brakeman/app_tree.rb', line 103 def controller_paths @controller_paths ||= prioritize_concerns(find_paths("app/**/controllers")) end |
#exists?(path) ⇒ Boolean
91 92 93 94 95 96 97 |
# File 'lib/brakeman/app_tree.rb', line 91 def exists?(path) if path.is_a? Brakeman::FilePath path.exists? else File.exist?(File.join(@root, path)) end end |
#expand_path(path) ⇒ Object
Should only be used by Brakeman::FilePath. Use AppTree#file_path(path).absolute instead.
76 77 78 |
# File 'lib/brakeman/app_tree.rb', line 76 def (path) File.(path, @root) end |
#file_path(path) ⇒ Object
Create a new Brakeman::FilePath
70 71 72 |
# File 'lib/brakeman/app_tree.rb', line 70 def file_path(path) Brakeman::FilePath.from_app_tree(self, path) end |
#gemspec ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/brakeman/app_tree.rb', line 127 def gemspec return @gemspec unless @gemspec.nil? gemspecs = Dir.glob(File.join(@root, "*.gemspec")) if gemspecs.length > 1 or gemspecs.empty? @gemspec = false else @gemspec = file_path(File.basename(gemspecs.first)) end end |
#initializer_paths ⇒ Object
99 100 101 |
# File 'lib/brakeman/app_tree.rb', line 99 def initializer_paths @initializer_paths ||= prioritize_concerns(find_paths("config/initializers")) end |
#layout_exists?(name) ⇒ Boolean
116 117 118 |
# File 'lib/brakeman/app_tree.rb', line 116 def layout_exists?(name) !Dir.glob("#{root_search_pattern}app/views/layouts/#{name}.html.{erb,haml,slim}").empty? end |
#lib_paths ⇒ Object
120 121 122 123 124 125 |
# File 'lib/brakeman/app_tree.rb', line 120 def lib_paths @lib_files ||= find_paths("lib").reject { |path| path.relative.include? "/generators/" or path.relative.include? "lib/tasks/" or path.relative.include? "lib/templates/" } + find_additional_lib_paths + find_helper_paths + find_job_paths end |
#model_paths ⇒ Object
107 108 109 |
# File 'lib/brakeman/app_tree.rb', line 107 def model_paths @model_paths ||= prioritize_concerns(find_paths("app/**/models")) end |
#relative_path(path) ⇒ Object
Should only be used by Brakeman::FilePath Use AppTree#file_path(path).relative instead.
82 83 84 85 86 87 88 89 |
# File 'lib/brakeman/app_tree.rb', line 82 def relative_path(path) pname = Pathname.new path if path and not path.empty? and pname.absolute? pname.relative_path_from(Pathname.new(self.root)).to_s else path end end |
#template_paths ⇒ Object
111 112 113 114 |
# File 'lib/brakeman/app_tree.rb', line 111 def template_paths @template_paths ||= find_paths("app/**/views", "*.{#{VIEW_EXTENSIONS}}") + find_paths("app/**/views", "*.{erb,haml,slim}").reject { |path| File.basename(path).count(".") > 1 } end |