Class: Reek::Source::SourceLocator

Inherits:
Object
  • Object
show all
Defined in:
lib/reek/source/source_locator.rb

Overview

Finds Ruby source files in a filesystem.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(paths, configuration: Configuration::AppConfiguration.default, options: Reek::CLI::Options.new) ⇒ SourceLocator

Initialize with the paths we want to search.

paths - a list of paths as Strings


15
16
17
18
19
20
21
22
# File 'lib/reek/source/source_locator.rb', line 15

def initialize(paths, configuration: Configuration::AppConfiguration.default, options: Reek::CLI::Options.new)
  @options = options
  @paths = paths.flat_map do |string|
    path = Pathname.new(string)
    current_directory?(path) ? path.entries : path
  end
  @configuration = configuration
end

Instance Attribute Details

#configurationObject (readonly, private)

Returns the value of attribute configuration


34
35
36
# File 'lib/reek/source/source_locator.rb', line 34

def configuration
  @configuration
end

#optionsObject (readonly, private)

Returns the value of attribute options


34
35
36
# File 'lib/reek/source/source_locator.rb', line 34

def options
  @options
end

#pathsObject (readonly, private)

Returns the value of attribute paths


34
35
36
# File 'lib/reek/source/source_locator.rb', line 34

def paths
  @paths
end

Instance Method Details

#current_directory?(path) ⇒ Boolean (private)

Returns:

  • (Boolean)

96
97
98
# File 'lib/reek/source/source_locator.rb', line 96

def current_directory?(path)
  [Pathname.new('.'), Pathname.new('./')].include?(path)
end

#hidden_directory?(path) ⇒ Boolean (private)

Returns:

  • (Boolean)

82
83
84
# File 'lib/reek/source/source_locator.rb', line 82

def hidden_directory?(path)
  path.basename.to_s.start_with? '.'
end

#ignore_file?(path) ⇒ Boolean (private)

Returns:

  • (Boolean)

58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/reek/source/source_locator.rb', line 58

def ignore_file?(path)
  if options.force_exclusion?
    path.ascend do |ascendant|
      break true if path_excluded?(ascendant)

      false
    end
  elsif path_excluded?(path)
    true
  else
    false
  end
end

#ignore_path?(path) ⇒ Boolean (private)

Returns:

  • (Boolean)

86
87
88
# File 'lib/reek/source/source_locator.rb', line 86

def ignore_path?(path)
  path_excluded?(path) || hidden_directory?(path)
end

#path_excluded?(path) ⇒ Boolean (private)

Returns:

  • (Boolean)

72
73
74
# File 'lib/reek/source/source_locator.rb', line 72

def path_excluded?(path)
  configuration.path_excluded?(path)
end

77
78
79
# File 'lib/reek/source/source_locator.rb', line 77

def print_no_such_file_error(path)
  warn "Error: No such file - #{path}"
end

#ruby_file?(path) ⇒ Boolean (private)

Returns:

  • (Boolean)

91
92
93
# File 'lib/reek/source/source_locator.rb', line 91

def ruby_file?(path)
  path.extname == '.rb'
end

#source_files_from_path(given_path) ⇒ Object (private)


46
47
48
49
50
51
52
53
54
55
56
# File 'lib/reek/source/source_locator.rb', line 46

def source_files_from_path(given_path)
  relevant_paths = []
  given_path.find do |path|
    if path.directory?
      Find.prune if ignore_path?(path)
    elsif ruby_file?(path)
      relevant_paths << path unless ignore_file?(path)
    end
  end
  relevant_paths
end

#source_pathsObject (private)


36
37
38
39
40
41
42
43
44
# File 'lib/reek/source/source_locator.rb', line 36

def source_paths
  paths.each_with_object([]) do |given_path, relevant_paths|
    if given_path.exist?
      relevant_paths.concat source_files_from_path(given_path)
    else
      print_no_such_file_error(given_path)
    end
  end
end

#sourcesArray<Pathname>

Traverses all paths we initialized the SourceLocator with, finds all relevant Ruby files and returns them as a list.

Returns:

  • (Array<Pathname>)

    Ruby paths found


28
29
30
# File 'lib/reek/source/source_locator.rb', line 28

def sources
  source_paths
end