code_stats2 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/bin/code_stats CHANGED
@@ -4,28 +4,46 @@ lib_dir = %(#{File.expand_path "#{__FILE__}/../.."}/lib)
4
4
  $LOAD_PATH << lib_dir unless $LOAD_PATH.include? lib_dir
5
5
 
6
6
  require 'code_stats'
7
+ require 'optparse'
7
8
 
8
- if ARGV.empty? or %w(-h --help help).any?{|k| ARGV.include? k}
9
- puts <<-TEXT
10
- Language-agnostic Code Statistics
9
+ options = {}
10
+ parser = OptionParser.new do |opts|
11
+ opts.banner = <<-TEXT
12
+ Language-agnostic Code Statistics
13
+
14
+ Usage:
15
+ $ code_stats /projects/wordpress /projects/drupal
16
+ $ code_stats /projects/*
17
+ $ code_stats /projects/wordpress --except JavaScript --skip /tmp/
11
18
 
12
- Usage:
13
- $ code_stats /projects/wordpress /projects/drupal
14
- $ code_stats /projects/*
15
- $ code_stats /projects/wordpress /projects/drupal except: JavaScript skip_filter: /tmp/
16
-
17
- Options:
18
- except: JavaScript - analyze all languages except JavaScript
19
- only: Ruby - analyze Ruby language only
20
- specs_filter: regex, specifies should be path threated as specs, default: #{CodeStats::Project::DEFAUL_SPEC_FILTER.source}
21
- skip_filter: regex, specifies paths that should be skipped, default: #{CodeStats::Project::DEFAUL_SKIP_FILTER.source}
22
19
  TEXT
23
- exit
24
- end
20
+
21
+ opts.on("--except LANG", "Analyze all languages except specified.") do |lang|
22
+ (options[:except] ||= []) << lang.to_sym
23
+ end
25
24
 
26
- args = RubyExt.argv
27
- options = args.extract_options!
28
- options2 = {}; options.each{|k, v| options2[k] = v ? v.to_sym : v}
29
- args << options2
25
+ opts.on("--only LANG", "Analyze only specified language(es).") do |lang|
26
+ (options[:only] ||= []) << lang.to_sym
27
+ end
28
+
29
+ opts.on(
30
+ "--specs REGEX",
31
+ "Specify paths that should be threated as specs/tests (default #{CodeStats::Project::DEFAUL_SPEC_FILTER.source})."
32
+ ) do |re|
33
+ options[:spec_filter] = Regexp.new(re)
34
+ end
35
+
36
+ opts.on(
37
+ "--skip REGEX",
38
+ "Specify paths that should be skipped (default #{CodeStats::Project::DEFAUL_SKIP_FILTER.source})."
39
+ ) do |re|
40
+ options[:skip_filter] = Regexp.new(re)
41
+ end
42
+ end
43
+ parser.parse!
30
44
 
31
- CodeStats.analyze_and_report *args
45
+ if ARGV.empty?
46
+ puts parser.banner
47
+ else
48
+ CodeStats.analyze_and_report *(ARGV + [options])
49
+ end
data/lib/code_stats.rb CHANGED
@@ -10,11 +10,11 @@ require 'tilt'
10
10
  class CodeStats
11
11
  class << self
12
12
  def extensions; @extensions ||= {} end
13
-
13
+
14
14
  attr_accessor :file_size_limit
15
- attr_required :file_size_limit
15
+ attr_required :file_size_limit
16
16
  end
17
-
17
+
18
18
  self.file_size_limit = 500 * 1024
19
19
  end
20
20
 
@@ -1,24 +1,24 @@
1
1
  class CodeStats
2
- class << self
2
+ class << self
3
3
  def know? extension
4
4
  extensions.include? extension
5
5
  end
6
-
6
+
7
7
  def parse text, extension
8
8
  language = extensions[extension] || raise("no language for :#{extension} extension!")
9
9
  language.new text
10
10
  end
11
-
11
+
12
12
  def analyze *args
13
13
  options = args.extract_options!
14
- paths = args
14
+ paths = args
15
15
  paths.collect!{|path| Dir[path]}.flatten!
16
-
17
- puts <<-TEXT
18
- please wait, analyzing:
16
+
17
+ info <<-TEXT
18
+ please wait, analyzing following projects:
19
19
  #{paths.join("\n ")}
20
20
  TEXT
21
-
21
+
22
22
  projects = paths.collect do |path|
23
23
  project = Project.new path, options
24
24
  project.analyze!
@@ -26,26 +26,31 @@ TEXT
26
26
  end
27
27
  projects.sort{|a, b| b.characters_count <=> a.characters_count}
28
28
  end
29
-
29
+
30
30
  def analyze_and_report *args
31
31
  # parsing options
32
32
  options = args.extract_options!
33
33
  paths = args
34
-
34
+
35
35
  options.validate_options! *(FileSet::AVAILIABLE_OPTIONS + Project::AVAILIABLE_OPTIONS)
36
36
  project_options = options.select{|k, v| Project::AVAILIABLE_OPTIONS.include? k}
37
37
  lang_options = options.select{|k, v| FileSet::AVAILIABLE_OPTIONS.include? k}
38
-
38
+
39
39
  # analyzing & reporting
40
40
  projects = analyze *(paths << project_options)
41
41
  report = Report.new(*(projects << lang_options)).render
42
-
42
+
43
43
  report_file = "./projects_statistics.html".to_file
44
- report_file.write! report
44
+ report_file.write report
45
45
 
46
- puts "done, statistics are in #{report_file}"
46
+ info "done, statistics are in #{report_file}"
47
47
 
48
48
  Kernel.exec "open #{report_file}"
49
49
  end
50
+
51
+ protected
52
+ def info msg
53
+ puts msg
54
+ end
50
55
  end
51
56
  end
@@ -2,7 +2,7 @@ class CodeStats::FileSet
2
2
  def initialize
3
3
  @lines_count_by_language, @characters_count_by_language = Hash.new(0), Hash.new(0)
4
4
  end
5
-
5
+
6
6
  def lines_count options = {}
7
7
  total_count = 0
8
8
  lines_count_by_language(options).each{|lang, count| total_count += count}
@@ -27,7 +27,7 @@ class CodeStats::FileSet
27
27
  @lines_count_by_language[script.class.alias.to_sym] += script.lines_count
28
28
  @characters_count_by_language[script.class.alias.to_sym] += script.characters_count
29
29
  end
30
-
30
+
31
31
  AVAILIABLE_OPTIONS = [:only, :except]
32
32
 
33
33
  protected
@@ -1,4 +1,4 @@
1
- if respond_to? :fake_gem
1
+ if respond_to? :fake_gem
2
2
  fake_gem 'ruby_ext', '~> 0.4'
3
3
  fake_gem 'vfs', '~> 0.3'
4
4
  fake_gem 'haml', '~> 3.1'
@@ -1,40 +1,40 @@
1
1
  module CodeStats::Languages
2
2
  class Abstract
3
- attr_reader :text
4
-
3
+ attr_reader :text
4
+
5
5
  def initialize text
6
6
  @text = text
7
7
  end
8
-
8
+
9
9
  def self.extensions *args
10
10
  if args.size > 0
11
11
  @extensions = args
12
-
12
+
13
13
  @extensions.each{|ext| CodeStats.extensions[ext] = self}
14
14
  else
15
15
  @extensions ||= []
16
16
  end
17
17
  end
18
-
18
+
19
19
  def lines_count
20
20
  calculate_basic_statistics
21
21
  @lines_count
22
22
  end
23
-
23
+
24
24
  def characters_count
25
25
  calculate_basic_statistics
26
26
  @characters_count
27
27
  end
28
-
28
+
29
29
  def analyze
30
30
  calculate_basic_statistics
31
31
  end
32
-
32
+
33
33
  protected
34
34
  def calculate_basic_statistics
35
35
  return if @basic_statistics_calculated
36
36
  @basic_statistics_calculated = true
37
-
37
+
38
38
  @lines_count = code.blank? ? 0 : 1
39
39
  @characters_count = 0
40
40
  code.chars do |c|
@@ -43,92 +43,92 @@ module CodeStats::Languages
43
43
  end
44
44
  end
45
45
  end
46
-
46
+
47
47
  module CComments
48
48
  def code
49
- @code ||= text.substitute(/\/\*.+?\*\/\n?/m, '').substitute(/^\/\/.+?[\n\z]/m, '')
49
+ @code ||= text.substitute(/\/\*.+?\*\/\n?/m, '').substitute(/^\/\/.+?[\n\z]/m, '').substitute(/\/\/.+?$/, '')
50
50
  end
51
51
  end
52
-
52
+
53
53
  module SharpComments
54
54
  def code
55
- @code ||= text.substitute(/^#.+?[\n\z]/m, '')
55
+ @code ||= text.substitute(/^#.+?[\n\z]/m, '').substitute(/#.+?$/, '')
56
56
  end
57
57
  end
58
-
58
+
59
59
  class Java < Abstract
60
60
  include CComments
61
-
62
- extensions :java
61
+
62
+ extensions :java
63
63
  end
64
-
64
+
65
65
  class JavaScript < Abstract
66
66
  include CComments
67
-
67
+
68
68
  extensions :js
69
69
  end
70
-
70
+
71
71
  class Ruby < Abstract
72
72
  include SharpComments
73
-
73
+
74
74
  extensions :rb
75
75
  end
76
-
76
+
77
77
  class Cpp < Abstract
78
78
  include CComments
79
-
79
+
80
80
  extensions :c, :cpp, :h
81
81
  end
82
-
82
+
83
83
  class Yaml < Abstract
84
84
  include SharpComments
85
-
85
+
86
86
  extensions :yml
87
87
  end
88
-
88
+
89
89
  class CoffeeScript < Abstract
90
90
  include SharpComments
91
-
91
+
92
92
  extensions :coffee
93
-
93
+
94
94
  def code
95
- @code ||= text.substitute(/###.+?###\n?/m, '').substitute(/^#.+?[\n\z]/m, '')
95
+ @code ||= text.substitute(/###.+?###\n?/m, '').substitute(/^#.+?[\n\z]/m, '').substitute(/#.+?$/, '')
96
96
  end
97
97
  end
98
-
98
+
99
99
  class Haml < Abstract
100
100
  extensions :haml
101
-
101
+
102
102
  def code
103
- @code ||= text.substitute(/^\/.+?[\n\z]/m, '')
103
+ @code ||= text.substitute(/^\/.+?[\n\z]/m, '').substitute(/^\s*\/.+?$/, '')
104
104
  end
105
105
  end
106
-
106
+
107
107
  class Erb < Abstract
108
108
  extensions :erb
109
-
109
+
110
110
  def code
111
111
  @code ||= text
112
112
  end
113
113
  end
114
-
114
+
115
115
  class Rjs < Abstract
116
116
  extensions :rjs
117
-
117
+
118
118
  def code
119
119
  @code ||= text
120
120
  end
121
121
  end
122
-
122
+
123
123
  class Php < Abstract
124
124
  include CComments
125
-
126
- extensions :php
125
+
126
+ extensions :php
127
127
  end
128
-
128
+
129
129
  class Python < Abstract
130
130
  include SharpComments
131
-
131
+
132
132
  extensions :py
133
133
  end
134
134
  end
@@ -1,19 +1,19 @@
1
1
  class CodeStats::Project
2
- attr_reader :path, :name, :specs_filter, :skip_filter, :unknown_extensions
2
+ attr_reader :path, :name, :spec_filter, :skip_filter, :unknown_extensions
3
3
  attr_reader :sources, :specs
4
-
5
- AVAILIABLE_OPTIONS = [:specs_filter, :skip_filter]
4
+
5
+ AVAILIABLE_OPTIONS = [:spec_filter, :skip_filter]
6
6
  DEFAUL_SPEC_FILTER = /\/tests?\/|\/specs?\//
7
- DEFAUL_SKIP_FILTER = /\/docs?\/|\/(s|ex)amples?\/|\/guides?\/|\/.git\/|\/tmp\/|database\.php/
8
-
7
+ DEFAUL_SKIP_FILTER = /\/docs?\/|\/(s|ex)amples?\/|\/guides?\/|\/.git\/|\/tmp\/|\/old\/|database\.php/
8
+
9
9
  def initialize path, options = {}
10
- @path, @name = path, path.to_entry.name
10
+ @path, @name = path, path.to_entry.name
11
11
  options.validate_options! *AVAILIABLE_OPTIONS
12
- @specs_filter = options.include?(:specs_filter) ? options[:specs_filter] : DEFAUL_SPEC_FILTER
12
+ @spec_filter = options.include?(:spec_filter) ? options[:spec_filter] : DEFAUL_SPEC_FILTER
13
13
  @skip_filter = options.include?(:skip_filter) ? options[:skip_filter] : DEFAUL_SKIP_FILTER
14
14
  clear
15
15
  end
16
-
16
+
17
17
  def files &b
18
18
  files = []
19
19
  path.to_dir.files '**/*.*' do |file|
@@ -22,33 +22,33 @@ class CodeStats::Project
22
22
  end
23
23
  b ? nil : files
24
24
  end
25
-
25
+
26
26
  delegate :lines_count, :characters_count, :lines_count_by_language, :characters_count_by_language, to: :sources
27
-
27
+
28
28
  def analyze!
29
- clear
30
- files do |file|
29
+ clear
30
+ files do |file|
31
31
  ext = file.extension.to_sym
32
32
  if CodeStats.know?(ext)
33
33
  warn("file #{file} is too big, skipping") and next if file.size > CodeStats.file_size_limit
34
- script = CodeStats.parse file.read.force_utf8_encoding, ext
34
+ script = CodeStats.parse file.read.force_utf8_encoding, ext
35
35
  source?(file) ? sources.add(script) : specs.add(script)
36
36
  else
37
37
  unknown_extensions << ext unless unknown_extensions.include? ext
38
38
  end
39
39
  end
40
40
  end
41
-
41
+
42
42
  protected
43
43
  def clear
44
44
  @unknown_extensions = []
45
45
  @sources, @specs = CodeStats::FileSet.new, CodeStats::FileSet.new
46
46
  end
47
-
47
+
48
48
  def source? file
49
- !(specs_filter && (file.path.sub(path, '') =~ specs_filter))
49
+ !(spec_filter && (file.path.sub(path, '') =~ spec_filter))
50
50
  end
51
-
51
+
52
52
  def skip? file
53
53
  skip_filter && (file.path.sub(path, '') =~ skip_filter)
54
54
  end
@@ -2,9 +2,9 @@ class CodeStats::Report
2
2
  attr_reader :filters, :projects
3
3
  def initialize *args
4
4
  @filters = args.extract_options!
5
- @projects = args
5
+ @projects = args
6
6
  end
7
-
7
+
8
8
  def render
9
9
  # preparing data
10
10
  data = projects.clone
@@ -12,30 +12,30 @@ class CodeStats::Report
12
12
  data.collect! do |p|
13
13
  o = OpenObject.new
14
14
  o.name = p.name
15
-
15
+
16
16
  o.characters_count = p.characters_count(filters)
17
- o.characters_count_by_language = p.characters_count_by_language(filters)
17
+ o.characters_count_by_language = p.characters_count_by_language(filters)
18
18
  o.ignored_characters_count_by_language = p.characters_count_by_language.reject do |lang, count|
19
19
  o.characters_count_by_language.include?(lang)
20
20
  end
21
-
22
- o.specs = OpenObject.new
21
+
22
+ o.specs = OpenObject.new
23
23
  o.specs.characters_count = p.specs.characters_count(filters)
24
- o.specs.characters_count_by_language = p.specs.characters_count_by_language(filters)
24
+ o.specs.characters_count_by_language = p.specs.characters_count_by_language(filters)
25
25
  o.specs.ignored_characters_count_by_language = p.specs.characters_count_by_language.reject do |lang, count|
26
26
  o.specs.characters_count_by_language.include?(lang)
27
27
  end
28
-
28
+
29
29
  o.unknown_extensions = p.unknown_extensions
30
-
30
+
31
31
  o
32
32
  end
33
-
33
+
34
34
  # rendering
35
35
  dir = __FILE__.dirname.to_dir
36
36
  css = [dir['report/style.css'].read].join("\n")
37
37
  js = %w(jquery.js highchart.js report.js).collect{|n| dir["report/#{n}"].read}.join("\n")
38
-
38
+
39
39
  report = dir / 'report.html.haml'
40
40
  report.render(projects: data, filters: filters, css: css, js: js)
41
41
  end
@@ -1,5 +1,5 @@
1
1
  String.class_eval do
2
- # Ruby just crashes on some files, don't know why and don't want to
2
+ # Ruby just crashes on some files, don't know why and don't want to
3
3
  # spend time on this shit, just found this hack somewhere in the internet.
4
4
  def force_utf8_encoding
5
5
  force_encoding('binary').gsub(156.chr,"Oe")
data/readme.md CHANGED
@@ -8,17 +8,17 @@ Screenshots showing us: Complexity of [Rails libraries][rails-img], comparison o
8
8
 
9
9
  # Installation & Usage
10
10
 
11
- This tool is language-agnostic, but it itself is made with Ruby, so You need Ruby installed to use it, to install it type:
11
+ The tool is language-agnostic, but to use it You need Ruby installed, to install type:
12
12
 
13
13
  ``` bash
14
14
  gem install code_stats2
15
15
  ```
16
16
 
17
- Now run it on some of Your projects, You can also specify some options (type '$ code_stats' without arguments to see full help):
17
+ Now run it on some of Your projects, You can also specify some options (type 'code_stats' without arguments to see full help):
18
18
 
19
19
  ``` bash
20
20
  code_stats /projects/wordpress
21
- code_stats /projects/* except: JavaScript
21
+ code_stats /projects/* --except JavaScript
22
22
  ```
23
23
 
24
24
  Also You can easily customize it, sources are small and simple as an egg.
@@ -6,7 +6,7 @@ describe "Project" do
6
6
  report = CodeStats::Report.new(*projects).render
7
7
  report.should =~ /sample_project.+32/m
8
8
  end
9
-
9
+
10
10
  it "should also accept options (from error)" do
11
11
  projects = CodeStats.analyze sample_project_path
12
12
  report = CodeStats::Report.new(*(projects << {except: :JavaScript})).render
@@ -5,7 +5,7 @@ shared_examples_for 'language' do
5
5
  lang = CodeStats.parse @script, @extension
6
6
  lang.code.should == <<-CODE
7
7
  code_a
8
- code_b
8
+ code_b
9
9
  CODE
10
10
  # lang.code.should_not include 'comment_a'
11
11
  # lang.code.should_not include 'comment_a2'
@@ -16,7 +16,7 @@ end
16
16
 
17
17
  describe "Java" do
18
18
  it_should_behave_like "language"
19
-
19
+
20
20
  before do
21
21
  @extension = :java
22
22
  @script = <<-JAVA
@@ -29,14 +29,14 @@ comment_a
29
29
  */
30
30
  // comment_b
31
31
  // comment_b2
32
- code_b
32
+ code_b // comment_b3
33
33
  JAVA
34
34
  end
35
35
  end
36
36
 
37
37
  describe "JavaScript" do
38
38
  it_should_behave_like "language"
39
-
39
+
40
40
  before do
41
41
  @extension = :js
42
42
  @script = <<-JAVA_SCRIPT
@@ -49,10 +49,10 @@ comment_a
49
49
  */
50
50
  // comment_b
51
51
  // comment_b2
52
- code_b
52
+ code_b // comment_b3
53
53
  JAVA_SCRIPT
54
54
  end
55
-
55
+
56
56
  it "removing comments should correctly change lines count" do
57
57
  script = <<-JAVA_SCRIPT
58
58
  // a variable
@@ -74,7 +74,7 @@ b = 2;
74
74
 
75
75
  alert(a + b);
76
76
  JAVA_SCRIPT
77
-
77
+
78
78
  lang = CodeStats.parse script, :js
79
79
  lang.code.should == code
80
80
  end
@@ -82,21 +82,21 @@ end
82
82
 
83
83
  describe "Ruby" do
84
84
  it_should_behave_like "language"
85
-
85
+
86
86
  before do
87
87
  @extension = :rb
88
88
  @script = <<-RUBY
89
89
  code_a
90
90
  # comment_a
91
91
  # comment_a2
92
- code_b
92
+ code_b # comment_b3
93
93
  RUBY
94
94
  end
95
95
  end
96
96
 
97
97
  describe "Cpp" do
98
98
  it_should_behave_like "language"
99
-
99
+
100
100
  before do
101
101
  @extension = :cpp
102
102
  @script = <<-CPP
@@ -109,14 +109,14 @@ comment_a
109
109
  */
110
110
  // comment_b
111
111
  // comment_b2
112
- code_b
112
+ code_b // comment_b3
113
113
  CPP
114
114
  end
115
115
  end
116
116
 
117
117
  describe "CoffeeScript" do
118
118
  it_should_behave_like "language"
119
-
119
+
120
120
  before do
121
121
  @extension = :coffee
122
122
  @script = <<-COFFEE_SCRIPT
@@ -129,66 +129,66 @@ comment_a2
129
129
  ###
130
130
  # comment_b
131
131
  # comment_b2
132
- code_b
132
+ code_b # comment_b3
133
133
  COFFEE_SCRIPT
134
134
  end
135
135
  end
136
136
 
137
137
  describe "Yaml" do
138
138
  it_should_behave_like "language"
139
-
139
+
140
140
  before do
141
141
  @extension = :yml
142
142
  @script = <<-YAML
143
143
  code_a
144
144
  # comment_a
145
145
  # comment_a2
146
- code_b
146
+ code_b # comment_b3
147
147
  YAML
148
148
  end
149
149
  end
150
150
 
151
151
  describe "Haml" do
152
152
  it_should_behave_like "language"
153
-
153
+
154
154
  before do
155
155
  @extension = :haml
156
156
  @script = <<-HAML
157
157
  code_a
158
158
  / comment_a
159
159
  / comment_a2
160
- code_b
160
+ code_b
161
161
  HAML
162
162
  end
163
163
  end
164
164
 
165
165
  describe "Erb" do
166
166
  it_should_behave_like "language"
167
-
167
+
168
168
  before do
169
169
  @extension = :erb
170
170
  @script = <<-ERB
171
171
  code_a
172
- code_b
172
+ code_b
173
173
  ERB
174
174
  end
175
175
  end
176
176
 
177
177
  describe "Rjs" do
178
178
  it_should_behave_like "language"
179
-
179
+
180
180
  before do
181
181
  @extension = :rjs
182
182
  @script = <<-RJS
183
183
  code_a
184
- code_b
184
+ code_b
185
185
  RJS
186
186
  end
187
187
  end
188
188
 
189
189
  describe "Php" do
190
190
  it_should_behave_like "language"
191
-
191
+
192
192
  before do
193
193
  @extension = :php
194
194
  @script = <<-PHP
@@ -201,21 +201,21 @@ comment_a
201
201
  */
202
202
  // comment_b
203
203
  // comment_b2
204
- code_b
204
+ code_b // comment_b3
205
205
  PHP
206
206
  end
207
207
  end
208
208
 
209
209
  describe "Python" do
210
210
  it_should_behave_like "language"
211
-
211
+
212
212
  before do
213
213
  @extension = :py
214
214
  @script = <<-PYTHON
215
215
  code_a
216
216
  # comment_a
217
217
  # comment_a2
218
- code_b
218
+ code_b # comment_b3
219
219
  PYTHON
220
220
  end
221
221
  end
data/spec/project_spec.rb CHANGED
@@ -1,30 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Project" do
3
+ describe "Project" do
4
4
  it "general" do
5
5
  prj = CodeStats::Project.new sample_project_path
6
6
  prj.name.should == 'sample_project'
7
7
  prj.files.size.should == 4
8
-
8
+
9
9
  prj.analyze!
10
-
10
+
11
11
  prj.unknown_extensions.should == [:unknown]
12
-
12
+
13
13
  # sources
14
14
  prj.lines_count.should == 10
15
15
  prj.characters_count.should == 32
16
16
 
17
17
  prj.lines_count_by_language.should == {JavaScript: 5, Ruby: 5}
18
18
  prj.characters_count_by_language.should == {JavaScript: 19, Ruby: 13}
19
-
19
+
20
20
  # specs
21
21
  prj.specs.lines_count.should == 2
22
22
  prj.specs.characters_count.should == 16
23
23
 
24
24
  prj.specs.lines_count_by_language.should == {Ruby: 2}
25
- prj.specs.characters_count_by_language.should == {Ruby: 16}
25
+ prj.specs.characters_count_by_language.should == {Ruby: 16}
26
26
  end
27
-
27
+
28
28
  it "language filters" do
29
29
  prj = CodeStats::Project.new sample_project_path
30
30
  prj.analyze!
data/spec/spec_helper.rb CHANGED
@@ -5,4 +5,8 @@ rspec do
5
5
  def sample_project_path
6
6
  "#{__FILE__.dirname}/sample_project"
7
7
  end
8
+ end
9
+
10
+ CodeStats.class_eval do
11
+ def self.info msg; end
8
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code_stats2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-11 00:00:00.000000000Z
12
+ date: 2011-09-15 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby_ext
16
- requirement: &740960 !ruby/object:Gem::Requirement
16
+ requirement: &2844590 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.4'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *740960
24
+ version_requirements: *2844590
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: vfs
27
- requirement: &971370 !ruby/object:Gem::Requirement
27
+ requirement: &2844350 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.3'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *971370
35
+ version_requirements: *2844350
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: haml
38
- requirement: &1005160 !ruby/object:Gem::Requirement
38
+ requirement: &2844110 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.1'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *1005160
46
+ version_requirements: *2844110
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: tilt
49
- requirement: &1011610 !ruby/object:Gem::Requirement
49
+ requirement: &2843870 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '1.3'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *1011610
57
+ version_requirements: *2843870
58
58
  description:
59
59
  email:
60
60
  executables: