code_statistics 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{code_statistics}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dan Mayer"]
12
- s.date = %q{2009-11-15}
12
+ s.date = %q{2009-11-18}
13
13
  s.description = %q{"This is a port of the rails 'rake stats' method so it can be made more robust and work for non rails projects. New features may eventually be added as well."}
14
14
  s.email = %q{dan@devver.net}
15
15
  s.extra_rdoc_files = [
@@ -3,11 +3,12 @@ module CodeStatistics
3
3
 
4
4
  attr_reader :print_buffer
5
5
 
6
- def initialize(*pairs)
6
+ def initialize(pairs, ignore_file_globs = [])
7
7
  @pairs = pairs
8
8
  @test_types = []
9
9
  @print_buffer = ""
10
10
  directory = Dir.pwd
11
+ @ignore_files = collect_files_to_ignore(ignore_file_globs)
11
12
 
12
13
  directories_to_search = ['app','test','spec','merb','features', 'bin']
13
14
  recursively_add_directories(directories_to_search)
@@ -37,6 +38,14 @@ module CodeStatistics
37
38
  end
38
39
  end
39
40
  end
41
+
42
+ def collect_files_to_ignore(ignore_file_globs)
43
+ files_to_remove = []
44
+ ignore_file_globs.each do |glob|
45
+ files_to_remove.concat(Dir[glob])
46
+ end
47
+ files_to_remove.map{ |filepath| File.expand_path(filepath)}
48
+ end
40
49
 
41
50
  def to_s
42
51
  @print_buffer = ''
@@ -70,18 +79,24 @@ module CodeStatistics
70
79
  @test_types << test_type
71
80
  end
72
81
 
82
+ def ignore_file?(file_path)
83
+ @ignore_files.include?(File.expand_path(file_path))
84
+ end
85
+
73
86
  def calculate_directory_statistics(directory, pattern = /.*\.rb$/)
74
87
  stats = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0 }
75
88
 
76
89
  Dir.foreach(directory) do |file_name|
77
90
  if File.stat(directory + "/" + file_name).directory? and (/^\./ !~ file_name)
78
- newstats = calculate_directory_statistics(directory + "/" + file_name, pattern)
91
+ newstats = calculate_directory_statistics(File.join(directory,file_name), pattern)
79
92
  stats.each { |k, v| stats[k] += newstats[k] }
80
93
  end
81
94
 
82
95
  next unless file_name =~ pattern
96
+ file_path = File.join(directory, file_name)
97
+ next if ignore_file?(file_path)
83
98
 
84
- f = File.open(directory + "/" + file_name)
99
+ f = File.open(file_path)
85
100
 
86
101
  while line = f.gets
87
102
  stats["lines"] += 1
@@ -13,15 +13,21 @@ if ENV['DIRECTORIES_TO_CALCULATE']
13
13
  end
14
14
  end
15
15
 
16
+ if ENV['IGNORE_FILE_GLOBS']
17
+ user_ignored_dirs = ENV['IGNORE_FILE_GLOBS'].split(',')
18
+ else
19
+ user_ignored_dirs = []
20
+ end
21
+
16
22
  desc "Report code statistics (KLOCs, etc) from the application"
17
23
  task :stats do
18
24
  require File.join(File.dirname(__FILE__), '..', 'code_statistics', 'code_statistics')
19
- puts CodeStatistics::CodeStatistics.new(*stats_directories).to_s
25
+ puts CodeStatistics::CodeStatistics.new(stats_directories, user_ignored_dirs).to_s
20
26
  end
21
27
 
22
28
  #this is for apps that already had a stats task, but want to use the newer features of this gem
23
29
  desc "Report code statistics (KLOCs, etc) from the application"
24
30
  task :code_stats do
25
31
  require File.join(File.dirname(__FILE__), '..', 'code_statistics', 'code_statistics')
26
- puts CodeStatistics::CodeStatistics.new(*stats_directories).to_s
32
+ puts CodeStatistics::CodeStatistics.new(stats_directories, user_ignored_dirs).to_s
27
33
  end
@@ -10,7 +10,7 @@ class CodeStatisticsTest < Test::Unit::TestCase
10
10
  file = dir.file("real.rb", "this\nis\n\lame\n")
11
11
  controllers_dir = dir.directory("controllers")
12
12
  file = controllers_dir.file("fake.rb", "this\nis\n\lame\n")
13
- code_stats = CodeStatistics::CodeStatistics.new(["Libraries", 'lib'])
13
+ code_stats = CodeStatistics::CodeStatistics.new([["Libraries", 'lib']])
14
14
  assert code_stats.to_s.match(/Libraries/)
15
15
  assert code_stats.to_s.match(/Code LOC: 6/)
16
16
  end
@@ -21,7 +21,7 @@ class CodeStatisticsTest < Test::Unit::TestCase
21
21
  dir = construct.directory("app")
22
22
  controllers_dir = dir.directory("controllers")
23
23
  file = controllers_dir.file("fake.rb", "this\nis\n\lame\n")
24
- code_stats = CodeStatistics::CodeStatistics.new()
24
+ code_stats = CodeStatistics::CodeStatistics.new([])
25
25
  assert code_stats.to_s.match(/App\/controllers/)
26
26
  assert code_stats.to_s.match(/Code LOC: 3/)
27
27
  end
@@ -32,7 +32,7 @@ class CodeStatisticsTest < Test::Unit::TestCase
32
32
  dir = construct.directory("app")
33
33
  sub_dir = dir.directory("servers")
34
34
  file = sub_dir.file("fake.rb", "this\nis\n\lame\n")
35
- code_stats = CodeStatistics::CodeStatistics.new()
35
+ code_stats = CodeStatistics::CodeStatistics.new([])
36
36
  assert code_stats.to_s.match(/App\/servers/)
37
37
  assert code_stats.to_s.match(/Code LOC: 3/)
38
38
  end
@@ -45,7 +45,7 @@ class CodeStatisticsTest < Test::Unit::TestCase
45
45
  file = sub_dir.file("fake.rb", "this\nis\n\lame\n")
46
46
  sub_dir2 = dir.directory("controllers")
47
47
  file = sub_dir2.file("fake.rb", "this\nis\n\lame\n")
48
- code_stats = CodeStatistics::CodeStatistics.new()
48
+ code_stats = CodeStatistics::CodeStatistics.new([])
49
49
  assert code_stats.to_s.match(/Spec\/models/)
50
50
  assert code_stats.to_s.match(/Spec\/controllers/)
51
51
  assert code_stats.to_s.match(/Test LOC: 6/)
@@ -56,7 +56,7 @@ class CodeStatisticsTest < Test::Unit::TestCase
56
56
  within_construct do |construct|
57
57
  dir = construct.directory("spec")
58
58
  file = dir.file("fake.rb", "this\nis\n\lame\n")
59
- code_stats = CodeStatistics::CodeStatistics.new()
59
+ code_stats = CodeStatistics::CodeStatistics.new([])
60
60
  assert code_stats.to_s.match(/Spec/)
61
61
  assert code_stats.to_s.match(/Test LOC: 3/)
62
62
  end
@@ -69,7 +69,7 @@ class CodeStatisticsTest < Test::Unit::TestCase
69
69
  file = sub_dir.file("fake.rb", "this\nis\n\lame\n")
70
70
  sub_dir2 = dir.directory("controllers")
71
71
  file = sub_dir2.file("fake.rb", "this\nis\n\lame\n")
72
- code_stats = CodeStatistics::CodeStatistics.new()
72
+ code_stats = CodeStatistics::CodeStatistics.new([])
73
73
  assert code_stats.to_s.match(/Test\/models/)
74
74
  assert code_stats.to_s.match(/Test\/controllers/)
75
75
  assert code_stats.to_s.match(/Test LOC: 6/)
@@ -80,7 +80,7 @@ class CodeStatisticsTest < Test::Unit::TestCase
80
80
  within_construct do |construct|
81
81
  dir = construct.directory("test")
82
82
  file = dir.file("fake.rb", "this\nis\n\lame\n")
83
- code_stats = CodeStatistics::CodeStatistics.new()
83
+ code_stats = CodeStatistics::CodeStatistics.new([])
84
84
  assert code_stats.to_s.match(/Test/)
85
85
  assert code_stats.to_s.match(/Test LOC: 3/)
86
86
  end
@@ -99,12 +99,32 @@ class CodeStatisticsTest < Test::Unit::TestCase
99
99
  file = sub_dir.file("fake.rb", "this\nis\n\lame\n")
100
100
  sub_dir2 = dir.directory("controllers")
101
101
  file = sub_dir2.file("fake.rb", "this\nis\n\lame\n")
102
- code_stats = CodeStatistics::CodeStatistics.new()
102
+ code_stats = CodeStatistics::CodeStatistics.new([])
103
103
  assert code_stats.to_s.match(/Code LOC: 12/)
104
104
  assert code_stats.to_s.match(/Test LOC: 6/)
105
105
  assert code_stats.to_s.match(/Code to Test Ratio: 1:0.5/)
106
106
  end
107
107
  end
108
108
 
109
+ should "ignore the expected file globs" do
110
+ within_construct do |construct|
111
+ dir = construct.directory("app")
112
+ sub_dir = dir.directory("models")
113
+ file = sub_dir.file("fake.rb", "this\n"*9)
114
+ sub_dir2 = dir.directory("controllers")
115
+ file = sub_dir2.file("fake.rb", "this\nis\n\lame\n")
116
+
117
+ dir = construct.directory("test")
118
+ sub_dir = dir.directory("models")
119
+ file = sub_dir.file("fake.rb", "this\nis\n\lame\n")
120
+ sub_dir2 = dir.directory("controllers")
121
+ file = sub_dir2.file("fake.rb", "this\nis\n\lame\n")
122
+ code_stats = CodeStatistics::CodeStatistics.new([],['app/controllers/**/*'])
123
+ assert code_stats.to_s.match(/Code LOC: 9/)
124
+ assert code_stats.to_s.match(/Test LOC: 6/)
125
+ assert code_stats.to_s.match(/Code to Test Ratio: 1:0.7/)
126
+ end
127
+ end
128
+
109
129
 
110
130
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code_statistics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Mayer
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-15 00:00:00 -05:00
12
+ date: 2009-11-18 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency