Class: CodeMetrics::StatsDirectories

Inherits:
Object
  • Object
show all
Defined in:
lib/code_metrics/stats_directories.rb

Defined Under Namespace

Classes: StatDirectory

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeStatsDirectories

Returns a new instance of StatsDirectories.



27
28
29
30
31
# File 'lib/code_metrics/stats_directories.rb', line 27

def initialize
  @root = path_prefix
  @app_directories = default_app_directories
  @test_directories = default_test_directories
end

Instance Attribute Details

#app_directoriesObject (readonly)

Returns the value of attribute app_directories.



25
26
27
# File 'lib/code_metrics/stats_directories.rb', line 25

def app_directories
  @app_directories
end

#test_directoriesObject (readonly)

Returns the value of attribute test_directories.



25
26
27
# File 'lib/code_metrics/stats_directories.rb', line 25

def test_directories
  @test_directories
end

Instance Method Details

#add_directories(dir_pattern, file_pattern) ⇒ Object

Examples:

add_directories(‘./spec/*/_spec.rb’, ‘spec’)

will build dirs with the format of description, path:
[ 'Acceptance specs', 'spec/acceptance' ]


65
66
67
68
69
70
# File 'lib/code_metrics/stats_directories.rb', line 65

def add_directories(dir_pattern, file_pattern)
  build_directories(dir_pattern, file_pattern).each do |description, path|
    add_directory(description, path)
  end
  self
end

#add_directory(description, folder_path) ⇒ Object



79
80
81
82
83
84
85
# File 'lib/code_metrics/stats_directories.rb', line 79

def add_directory(description,folder_path)
  folder_path = folder_path.to_s
  unless app_directories.any?{|stat_dir| stat_dir.path == folder_path}
    app_directories << StatDirectory.new(description, folder_path)
  end
  self
end

#add_test_directories(dir_pattern, file_pattern) ⇒ Object



72
73
74
75
76
77
# File 'lib/code_metrics/stats_directories.rb', line 72

def add_test_directories(dir_pattern, file_pattern)
  build_directories(dir_pattern, file_pattern).each do |description, path|
    add_test_directory(description, path)
  end
  self
end

#add_test_directory(description, folder_path) ⇒ Object



87
88
89
90
91
92
93
94
# File 'lib/code_metrics/stats_directories.rb', line 87

def add_test_directory(description,folder_path)
  folder_path = folder_path.to_s
  unless test_directories.any?{|stat_dir| stat_dir.path == folder_path}
    test_directories << StatDirectory.new(description, folder_path)
    CodeMetrics::Statistics::TEST_TYPES << description
  end
  self
end

#build_directories(glob_pattern, file_pattern) ⇒ Object

Examples:

build_directories(‘./spec/*/_spec.rb’, ‘spec’)



97
98
99
100
101
102
103
104
# File 'lib/code_metrics/stats_directories.rb', line 97

def build_directories(glob_pattern, file_pattern)
  dirs = collect_directories(glob_pattern, file_pattern)

  Hash[dirs.map { |path|
        [description(path.basename,file_pattern), path]
        }
      ]
end

#collect_directories(glob_pattern, file_pattern = '') ⇒ Object

collects non empty directories and names the metric by the folder name parent? or dirname? or basename?



107
108
109
# File 'lib/code_metrics/stats_directories.rb', line 107

def collect_directories(glob_pattern, file_pattern='')
  Pathname.glob(glob_pattern).select{|f| f.basename.to_s.include?(file_pattern) }.map(&:dirname).uniq.map(&:realpath)
end

#default_app_directoriesObject

What Rails expects



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/code_metrics/stats_directories.rb', line 38

def default_app_directories
  StatDirectory.from_list([
    %w(Controllers        app/controllers),
    %w(Helpers            app/helpers),
    %w(Models             app/models),
    %w(Mailers            app/mailers),
    %w(Javascripts        app/assets/javascripts),
    %w(Libraries          lib),
    %w(APIs               app/apis)
  ], @root)
end

#default_test_directoriesObject



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/code_metrics/stats_directories.rb', line 50

def default_test_directories
  StatDirectory.from_list([
    %w(Controller\ tests  test/controllers),
    %w(Helper\ tests      test/helpers),
    %w(Model\ tests       test/models),
    %w(Mailer\ tests      test/mailers),
    %w(Integration\ tests test/integration),
    %w(Functional\ tests\ (old)  test/functional),
    %w(Unit\ tests \ (old)       test/unit)
  ], @root)
end

#description(path_basename, file_pattern) ⇒ Object



111
112
113
114
115
116
117
# File 'lib/code_metrics/stats_directories.rb', line 111

def description(path_basename,file_pattern)
  if path_basename.to_s == file_pattern
    "Uncategorized #{pluralize(file_pattern)}"
  else
   "#{titlecase(path_basename)} #{pluralize(file_pattern)}"
  end.strip
end

#directoriesObject



33
34
35
# File 'lib/code_metrics/stats_directories.rb', line 33

def directories
  app_directories.map(&:to_a) | test_directories.map(&:to_a)
end

#path_prefixObject



128
129
130
# File 'lib/code_metrics/stats_directories.rb', line 128

def path_prefix
   (defined?(Rails) &&  Rails.root) || Pathname.pwd
end

#pluralize(string) ⇒ Object



124
125
126
# File 'lib/code_metrics/stats_directories.rb', line 124

def pluralize(string)
  "#{string}s" unless string.to_s.empty?
end

#titlecase(string) ⇒ Object



119
120
121
122
# File 'lib/code_metrics/stats_directories.rb', line 119

def titlecase(string)
  string = string.to_s
  "#{string[0..0].upcase}#{string[1..-1]}"
end