code_metrics 0.0.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.
Files changed (53) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +33 -0
  4. data/bin/code_metrics +22 -0
  5. data/bin/code_metrics-profile +15 -0
  6. data/lib/code_metrics.rb +10 -0
  7. data/lib/code_metrics/profiler.rb +96 -0
  8. data/lib/code_metrics/railtie.rb +11 -0
  9. data/lib/code_metrics/statistics.rb +106 -0
  10. data/lib/code_metrics/statistics_calculator.rb +81 -0
  11. data/lib/code_metrics/stats_directories.rb +28 -0
  12. data/lib/code_metrics/version.rb +3 -0
  13. data/lib/tasks/statistics.rake +14 -0
  14. data/test/active_support_testing_isolation.rb +136 -0
  15. data/test/code_metrics_test.rb +7 -0
  16. data/test/dummy/README.rdoc +28 -0
  17. data/test/dummy/Rakefile +6 -0
  18. data/test/dummy/app/assets/javascripts/application.js +13 -0
  19. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  20. data/test/dummy/app/controllers/application_controller.rb +5 -0
  21. data/test/dummy/app/helpers/application_helper.rb +2 -0
  22. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  23. data/test/dummy/bin/bundle +3 -0
  24. data/test/dummy/bin/rails +4 -0
  25. data/test/dummy/bin/rake +4 -0
  26. data/test/dummy/config.ru +4 -0
  27. data/test/dummy/config/application.rb +24 -0
  28. data/test/dummy/config/boot.rb +5 -0
  29. data/test/dummy/config/database.yml +25 -0
  30. data/test/dummy/config/environment.rb +5 -0
  31. data/test/dummy/config/environments/development.rb +29 -0
  32. data/test/dummy/config/environments/production.rb +80 -0
  33. data/test/dummy/config/environments/test.rb +36 -0
  34. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  36. data/test/dummy/config/initializers/inflections.rb +16 -0
  37. data/test/dummy/config/initializers/mime_types.rb +5 -0
  38. data/test/dummy/config/initializers/secret_token.rb +12 -0
  39. data/test/dummy/config/initializers/session_store.rb +3 -0
  40. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy/config/locales/en.yml +23 -0
  42. data/test/dummy/config/routes.rb +56 -0
  43. data/test/dummy/db/test.sqlite3 +0 -0
  44. data/test/dummy/log/test.log +309 -0
  45. data/test/dummy/public/404.html +58 -0
  46. data/test/dummy/public/422.html +58 -0
  47. data/test/dummy/public/500.html +57 -0
  48. data/test/dummy/public/favicon.ico +0 -0
  49. data/test/isolation_abstract_unit.rb +287 -0
  50. data/test/rake_test.rb +15 -0
  51. data/test/statistics_calculator_test.rb +288 -0
  52. data/test/test_helper.rb +15 -0
  53. metadata +177 -0
@@ -0,0 +1,15 @@
1
+ # coding:utf-8
2
+ require 'test_helper'
3
+ require 'code_metrics/railtie'
4
+
5
+ module CodeMetrics
6
+ class RakeTest < ActiveSupport::TestCase
7
+ def test_code_metrics_sanity
8
+ assert_match "Code LOC: 5 Test LOC: 0 Code to Test Ratio: 1:0.0",
9
+ Dir.chdir(app_path){ `rake code_metrics:stats` }
10
+ end
11
+ def app_path
12
+ File.expand_path('../dummy', __FILE__)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,288 @@
1
+ require 'test_helper'
2
+ require 'code_metrics/statistics_calculator'
3
+
4
+ class StatisticsCalculatorTest < ActiveSupport::TestCase
5
+ def setup
6
+ @code_metrics_calculator = CodeMetrics::StatisticsCalculator.new
7
+ end
8
+
9
+ test 'add statistics to another using #add' do
10
+ code_metrics_calculator_1 = CodeMetrics::StatisticsCalculator.new(1, 2, 3, 4)
11
+ @code_metrics_calculator.add(code_metrics_calculator_1)
12
+
13
+ assert_equal 1, @code_metrics_calculator.lines
14
+ assert_equal 2, @code_metrics_calculator.code_lines
15
+ assert_equal 3, @code_metrics_calculator.classes
16
+ assert_equal 4, @code_metrics_calculator.methods
17
+
18
+ code_metrics_calculator_2 = CodeMetrics::StatisticsCalculator.new(2, 3, 4, 5)
19
+ @code_metrics_calculator.add(code_metrics_calculator_2)
20
+
21
+ assert_equal 3, @code_metrics_calculator.lines
22
+ assert_equal 5, @code_metrics_calculator.code_lines
23
+ assert_equal 7, @code_metrics_calculator.classes
24
+ assert_equal 9, @code_metrics_calculator.methods
25
+ end
26
+
27
+ test 'accumulate statistics using #add_by_io' do
28
+ code_metrics_calculator_1 = CodeMetrics::StatisticsCalculator.new(1, 2, 3, 4)
29
+ @code_metrics_calculator.add(code_metrics_calculator_1)
30
+
31
+ code = <<-'CODE'
32
+ def foo
33
+ puts 'foo'
34
+ end
35
+
36
+ def bar; end
37
+ class A; end
38
+ CODE
39
+
40
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :rb)
41
+
42
+ assert_equal 7, @code_metrics_calculator.lines
43
+ assert_equal 7, @code_metrics_calculator.code_lines
44
+ assert_equal 4, @code_metrics_calculator.classes
45
+ assert_equal 6, @code_metrics_calculator.methods
46
+ end
47
+
48
+ test 'calculate statistics using #add_by_file_path' do
49
+ tmp_path = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', 'tmp'))
50
+ FileUtils.mkdir_p(tmp_path)
51
+
52
+ code = <<-'CODE'
53
+ def foo
54
+ puts 'foo'
55
+ # bar
56
+ end
57
+ CODE
58
+
59
+ file_path = "#{tmp_path}/stats.rb"
60
+ File.open(file_path, 'w') { |f| f.write(code) }
61
+
62
+ @code_metrics_calculator.add_by_file_path(file_path)
63
+
64
+ assert_equal 4, @code_metrics_calculator.lines
65
+ assert_equal 3, @code_metrics_calculator.code_lines
66
+ assert_equal 0, @code_metrics_calculator.classes
67
+ assert_equal 1, @code_metrics_calculator.methods
68
+
69
+ FileUtils.rm_rf(tmp_path)
70
+ end
71
+
72
+ test 'calculate number of Ruby methods' do
73
+ code = <<-'CODE'
74
+ def foo
75
+ puts 'foo'
76
+ end
77
+
78
+ def bar; end
79
+
80
+ class Foo
81
+ def bar(abc)
82
+ end
83
+ end
84
+ CODE
85
+
86
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :rb)
87
+
88
+ assert_equal 3, @code_metrics_calculator.methods
89
+ end
90
+
91
+ test 'calculate Ruby LOCs' do
92
+ code = <<-'CODE'
93
+ def foo
94
+ puts 'foo'
95
+ end
96
+
97
+ # def bar; end
98
+
99
+ class A < B
100
+ end
101
+ CODE
102
+
103
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :rb)
104
+
105
+ assert_equal 8, @code_metrics_calculator.lines
106
+ assert_equal 5, @code_metrics_calculator.code_lines
107
+ end
108
+
109
+ test 'calculate number of Ruby classes' do
110
+ code = <<-'CODE'
111
+ class Foo < Bar
112
+ def foo
113
+ puts 'foo'
114
+ end
115
+ end
116
+
117
+ class Z; end
118
+
119
+ # class A
120
+ # end
121
+ CODE
122
+
123
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :rb)
124
+
125
+ assert_equal 2, @code_metrics_calculator.classes
126
+ end
127
+
128
+ test 'skip Ruby comments' do
129
+ code = <<-'CODE'
130
+ =begin
131
+ class Foo
132
+ def foo
133
+ puts 'foo'
134
+ end
135
+ end
136
+ =end
137
+
138
+ # class A
139
+ # end
140
+ CODE
141
+
142
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :rb)
143
+
144
+ assert_equal 10, @code_metrics_calculator.lines
145
+ assert_equal 0, @code_metrics_calculator.code_lines
146
+ assert_equal 0, @code_metrics_calculator.classes
147
+ assert_equal 0, @code_metrics_calculator.methods
148
+ end
149
+
150
+ test 'calculate number of JS methods' do
151
+ code = <<-'CODE'
152
+ function foo(x, y, z) {
153
+ doX();
154
+ }
155
+
156
+ $(function () {
157
+ bar();
158
+ })
159
+
160
+ var baz = function ( x ) {
161
+ }
162
+ CODE
163
+
164
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :js)
165
+
166
+ assert_equal 3, @code_metrics_calculator.methods
167
+ end
168
+
169
+ test 'calculate JS LOCs' do
170
+ code = <<-'CODE'
171
+ function foo()
172
+ alert('foo');
173
+ end
174
+
175
+ // var b = 2;
176
+
177
+ var a = 1;
178
+ CODE
179
+
180
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :js)
181
+
182
+ assert_equal 7, @code_metrics_calculator.lines
183
+ assert_equal 4, @code_metrics_calculator.code_lines
184
+ end
185
+
186
+ test 'skip JS comments' do
187
+ code = <<-'CODE'
188
+ /*
189
+ * var f = function () {
190
+ 1 / 2;
191
+ }
192
+ */
193
+
194
+ // call();
195
+ //
196
+ CODE
197
+
198
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :js)
199
+
200
+ assert_equal 8, @code_metrics_calculator.lines
201
+ assert_equal 0, @code_metrics_calculator.code_lines
202
+ assert_equal 0, @code_metrics_calculator.classes
203
+ assert_equal 0, @code_metrics_calculator.methods
204
+ end
205
+
206
+ test 'calculate number of CoffeeScript methods' do
207
+ code = <<-'CODE'
208
+ square = (x) -> x * x
209
+
210
+ math =
211
+ cube: (x) -> x * square x
212
+
213
+ fill = (container, liquid = "coffee") ->
214
+ "Filling the #{container} with #{liquid}..."
215
+
216
+ $('.shopping_cart').bind 'click', (event) =>
217
+ @customer.purchase @cart
218
+ CODE
219
+
220
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :coffee)
221
+
222
+ assert_equal 4, @code_metrics_calculator.methods
223
+ end
224
+
225
+ test 'calculate CoffeeScript LOCs' do
226
+ code = <<-'CODE'
227
+ # Assignment:
228
+ number = 42
229
+ opposite = true
230
+
231
+ ###
232
+ CoffeeScript Compiler v1.4.0
233
+ Released under the MIT License
234
+ ###
235
+
236
+ # Conditions:
237
+ number = -42 if opposite
238
+ CODE
239
+
240
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :coffee)
241
+
242
+ assert_equal 11, @code_metrics_calculator.lines
243
+ assert_equal 3, @code_metrics_calculator.code_lines
244
+ end
245
+
246
+ test 'calculate number of CoffeeScript classes' do
247
+ code = <<-'CODE'
248
+ class Animal
249
+ constructor: (@name) ->
250
+
251
+ move: (meters) ->
252
+ alert @name + " moved #{meters}m."
253
+
254
+ class Snake extends Animal
255
+ move: ->
256
+ alert "Slithering..."
257
+ super 5
258
+
259
+ # class Horse
260
+ CODE
261
+
262
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :coffee)
263
+
264
+ assert_equal 2, @code_metrics_calculator.classes
265
+ end
266
+
267
+ test 'skip CoffeeScript comments' do
268
+ code = <<-'CODE'
269
+ ###
270
+ class Animal
271
+ constructor: (@name) ->
272
+
273
+ move: (meters) ->
274
+ alert @name + " moved #{meters}m."
275
+ ###
276
+
277
+ # class Horse
278
+ alert 'hello'
279
+ CODE
280
+
281
+ @code_metrics_calculator.add_by_io(StringIO.new(code), :coffee)
282
+
283
+ assert_equal 10, @code_metrics_calculator.lines
284
+ assert_equal 1, @code_metrics_calculator.code_lines
285
+ assert_equal 0, @code_metrics_calculator.classes
286
+ assert_equal 0, @code_metrics_calculator.methods
287
+ end
288
+ end
@@ -0,0 +1,15 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
15
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: code_metrics
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - David Heinemeier Hansson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>'
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
22
+ - - <
23
+ - !ruby/object:Gem::Version
24
+ version: '5.0'
25
+ type: :development
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>'
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
33
+ - - <
34
+ - !ruby/object:Gem::Version
35
+ version: '5.0'
36
+ - !ruby/object:Gem::Dependency
37
+ name: sqlite3
38
+ requirement: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ description: rake stats is great for looking at statistics on your code, displaying
53
+ things like KLOCs (thousands of lines of code) and your code to test ratio.
54
+ email: david@loudthinking.com
55
+ executables:
56
+ - code_metrics
57
+ - code_metrics-profile
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/code_metrics/profiler.rb
62
+ - lib/code_metrics/railtie.rb
63
+ - lib/code_metrics/statistics.rb
64
+ - lib/code_metrics/statistics_calculator.rb
65
+ - lib/code_metrics/stats_directories.rb
66
+ - lib/code_metrics/version.rb
67
+ - lib/code_metrics.rb
68
+ - lib/tasks/statistics.rake
69
+ - MIT-LICENSE
70
+ - Rakefile
71
+ - README.rdoc
72
+ - test/active_support_testing_isolation.rb
73
+ - test/code_metrics_test.rb
74
+ - test/dummy/app/assets/javascripts/application.js
75
+ - test/dummy/app/assets/stylesheets/application.css
76
+ - test/dummy/app/controllers/application_controller.rb
77
+ - test/dummy/app/helpers/application_helper.rb
78
+ - test/dummy/app/views/layouts/application.html.erb
79
+ - test/dummy/bin/bundle
80
+ - test/dummy/bin/rails
81
+ - test/dummy/bin/rake
82
+ - test/dummy/config/application.rb
83
+ - test/dummy/config/boot.rb
84
+ - test/dummy/config/database.yml
85
+ - test/dummy/config/environment.rb
86
+ - test/dummy/config/environments/development.rb
87
+ - test/dummy/config/environments/production.rb
88
+ - test/dummy/config/environments/test.rb
89
+ - test/dummy/config/initializers/backtrace_silencers.rb
90
+ - test/dummy/config/initializers/filter_parameter_logging.rb
91
+ - test/dummy/config/initializers/inflections.rb
92
+ - test/dummy/config/initializers/mime_types.rb
93
+ - test/dummy/config/initializers/secret_token.rb
94
+ - test/dummy/config/initializers/session_store.rb
95
+ - test/dummy/config/initializers/wrap_parameters.rb
96
+ - test/dummy/config/locales/en.yml
97
+ - test/dummy/config/routes.rb
98
+ - test/dummy/config.ru
99
+ - test/dummy/db/test.sqlite3
100
+ - test/dummy/log/test.log
101
+ - test/dummy/public/404.html
102
+ - test/dummy/public/422.html
103
+ - test/dummy/public/500.html
104
+ - test/dummy/public/favicon.ico
105
+ - test/dummy/Rakefile
106
+ - test/dummy/README.rdoc
107
+ - test/isolation_abstract_unit.rb
108
+ - test/rake_test.rb
109
+ - test/statistics_calculator_test.rb
110
+ - test/test_helper.rb
111
+ - bin/code_metrics
112
+ - bin/code_metrics-profile
113
+ homepage: https://github.com/bf4/code_metrics
114
+ licenses:
115
+ - MIT
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: 1.9.3
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: 1.8.11
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 1.8.25
135
+ signing_key:
136
+ specification_version: 3
137
+ summary: Extraction of the rails rake stats task as a gem and rails plugin
138
+ test_files:
139
+ - test/active_support_testing_isolation.rb
140
+ - test/code_metrics_test.rb
141
+ - test/dummy/app/assets/javascripts/application.js
142
+ - test/dummy/app/assets/stylesheets/application.css
143
+ - test/dummy/app/controllers/application_controller.rb
144
+ - test/dummy/app/helpers/application_helper.rb
145
+ - test/dummy/app/views/layouts/application.html.erb
146
+ - test/dummy/bin/bundle
147
+ - test/dummy/bin/rails
148
+ - test/dummy/bin/rake
149
+ - test/dummy/config/application.rb
150
+ - test/dummy/config/boot.rb
151
+ - test/dummy/config/database.yml
152
+ - test/dummy/config/environment.rb
153
+ - test/dummy/config/environments/development.rb
154
+ - test/dummy/config/environments/production.rb
155
+ - test/dummy/config/environments/test.rb
156
+ - test/dummy/config/initializers/backtrace_silencers.rb
157
+ - test/dummy/config/initializers/filter_parameter_logging.rb
158
+ - test/dummy/config/initializers/inflections.rb
159
+ - test/dummy/config/initializers/mime_types.rb
160
+ - test/dummy/config/initializers/secret_token.rb
161
+ - test/dummy/config/initializers/session_store.rb
162
+ - test/dummy/config/initializers/wrap_parameters.rb
163
+ - test/dummy/config/locales/en.yml
164
+ - test/dummy/config/routes.rb
165
+ - test/dummy/config.ru
166
+ - test/dummy/db/test.sqlite3
167
+ - test/dummy/log/test.log
168
+ - test/dummy/public/404.html
169
+ - test/dummy/public/422.html
170
+ - test/dummy/public/500.html
171
+ - test/dummy/public/favicon.ico
172
+ - test/dummy/Rakefile
173
+ - test/dummy/README.rdoc
174
+ - test/isolation_abstract_unit.rb
175
+ - test/rake_test.rb
176
+ - test/statistics_calculator_test.rb
177
+ - test/test_helper.rb