rails_stats 0.0.4
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.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +40 -0
- data/Rakefile +2 -0
- data/lib/rails_stats/app_statistics.rb +61 -0
- data/lib/rails_stats/code_statistics.rb +160 -0
- data/lib/rails_stats/code_statistics_calculator.rb +89 -0
- data/lib/rails_stats/cucumber_statistics.rb +46 -0
- data/lib/rails_stats/gem_statistics.rb +31 -0
- data/lib/rails_stats/inflector.rb +605 -0
- data/lib/rails_stats/rake.rb +37 -0
- data/lib/rails_stats/root_statistics.rb +42 -0
- data/lib/rails_stats/spec_statistics.rb +74 -0
- data/lib/rails_stats/util.rb +97 -0
- data/lib/rails_stats/version.rb +3 -0
- data/lib/rails_stats.rb +20 -0
- data/rails_stats.gemspec +24 -0
- data/stats.thor +8 -0
- metadata +105 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
module RailsStats
|
2
|
+
class SpecStatistics
|
3
|
+
attr_reader :statistics, :total, :test
|
4
|
+
|
5
|
+
SPEC_FOLDERS = ['controllers',
|
6
|
+
'features',
|
7
|
+
'helpers',
|
8
|
+
'models',
|
9
|
+
'requests',
|
10
|
+
'routing',
|
11
|
+
'integrations',
|
12
|
+
'integration',
|
13
|
+
'mailers',
|
14
|
+
'lib']
|
15
|
+
|
16
|
+
def initialize(directory, key_concepts)
|
17
|
+
@test = true
|
18
|
+
@directory = directory
|
19
|
+
@key_concepts = key_concepts
|
20
|
+
@statistics = calculate_statistics
|
21
|
+
@total = calculate_total
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def calculate_total
|
27
|
+
out = CodeStatisticsCalculator.new(true)
|
28
|
+
@statistics.each do |key, stats|
|
29
|
+
out.add(stats)
|
30
|
+
end
|
31
|
+
out
|
32
|
+
end
|
33
|
+
|
34
|
+
def calculate_statistics
|
35
|
+
out = {}
|
36
|
+
categorize_files.each do |key, list|
|
37
|
+
out[key] = Util.calculate_file_statistics(list)
|
38
|
+
end
|
39
|
+
out
|
40
|
+
end
|
41
|
+
|
42
|
+
def categorize_files
|
43
|
+
out = {}
|
44
|
+
Dir[File.join(@directory, "**", "*.rb")].each do |file_path|
|
45
|
+
if file_path =~ /.*_spec.rb$/
|
46
|
+
key = categorize_file(file_path)
|
47
|
+
else
|
48
|
+
key = "Spec Support"
|
49
|
+
end
|
50
|
+
|
51
|
+
out[key] ||= []
|
52
|
+
out[key] << file_path
|
53
|
+
end
|
54
|
+
|
55
|
+
out
|
56
|
+
end
|
57
|
+
|
58
|
+
def categorize_file(file_path)
|
59
|
+
types = (@key_concepts + SPEC_FOLDERS).uniq
|
60
|
+
types.each do |folder|
|
61
|
+
if file_path =~ /\/#{folder}\//
|
62
|
+
folder = Inflector.humanize(folder)
|
63
|
+
folder = Inflector.titleize(folder)
|
64
|
+
folder = Inflector.singularize(folder)
|
65
|
+
return "#{folder} Tests"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# something else
|
70
|
+
return "Other Tests"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module RailsStats
|
2
|
+
module Util
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def calculate_projects(*args)
|
6
|
+
projects = {}
|
7
|
+
|
8
|
+
children = [args.pop].flatten
|
9
|
+
parent = args.flatten
|
10
|
+
children.each do |dirname|
|
11
|
+
child_folder_pattern = File.join(*(parent.dup + [dirname]))
|
12
|
+
Dir[child_folder_pattern].each do |marker_path|
|
13
|
+
next if marker_path =~ /\/vendor\//
|
14
|
+
|
15
|
+
projects[File.absolute_path(File.dirname(marker_path))] = true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
out = projects.keys
|
20
|
+
|
21
|
+
# TODO: make sure none are children of other ones in there
|
22
|
+
out
|
23
|
+
end
|
24
|
+
|
25
|
+
def calculate_file_statistics(file, type = :code, &block)
|
26
|
+
stats = CodeStatisticsCalculator.new
|
27
|
+
|
28
|
+
files = [file].flatten
|
29
|
+
|
30
|
+
files.each do |path|
|
31
|
+
stats.add_by_file_path(path)
|
32
|
+
end
|
33
|
+
|
34
|
+
stats
|
35
|
+
end
|
36
|
+
|
37
|
+
def calculate_statistics(directories, type = :code, &block)
|
38
|
+
out = {}
|
39
|
+
|
40
|
+
directories = [directories].flatten
|
41
|
+
is_test = (type.to_s == "test")
|
42
|
+
|
43
|
+
directories.each do |dir_path|
|
44
|
+
next unless File.directory?(dir_path)
|
45
|
+
|
46
|
+
key = nil
|
47
|
+
if block_given?
|
48
|
+
key = yield(dir_path)
|
49
|
+
end
|
50
|
+
|
51
|
+
key = path_to_name(dir_path, is_test) if !key || key.length == 0
|
52
|
+
|
53
|
+
out[key] ||= CodeStatisticsCalculator.new(is_test)
|
54
|
+
out[key].add(calculate_directory_statistics(dir_path))
|
55
|
+
end
|
56
|
+
|
57
|
+
out.keys.each do |key|
|
58
|
+
out.delete(key) if out[key].lines == 0
|
59
|
+
end
|
60
|
+
|
61
|
+
out
|
62
|
+
end
|
63
|
+
|
64
|
+
def calculate_directory_statistics(directory, pattern = /.*\.(rb|js|coffee|feature)$/)
|
65
|
+
stats = CodeStatisticsCalculator.new
|
66
|
+
|
67
|
+
Dir.foreach(directory) do |file_name|
|
68
|
+
path = "#{directory}/#{file_name}"
|
69
|
+
|
70
|
+
if File.directory?(path) && (/^\./ !~ file_name)
|
71
|
+
stats.add(calculate_directory_statistics(path, pattern))
|
72
|
+
end
|
73
|
+
|
74
|
+
next unless file_name =~ pattern
|
75
|
+
|
76
|
+
stats.add_by_file_path(path)
|
77
|
+
end
|
78
|
+
|
79
|
+
stats
|
80
|
+
end
|
81
|
+
|
82
|
+
def path_to_name(path, is_test)
|
83
|
+
folder = File.basename(path)
|
84
|
+
folder = Inflector.humanize(folder)
|
85
|
+
folder = Inflector.titleize(folder)
|
86
|
+
|
87
|
+
if is_test
|
88
|
+
folder = Inflector.singularize(folder)
|
89
|
+
folder = "#{folder} Tests"
|
90
|
+
else
|
91
|
+
folder = Inflector.pluralize(folder)
|
92
|
+
end
|
93
|
+
|
94
|
+
folder
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/rails_stats.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "rails_stats/version"
|
2
|
+
|
3
|
+
module RailsStats
|
4
|
+
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'debugger'
|
8
|
+
|
9
|
+
require 'rails_stats/inflector'
|
10
|
+
require 'rails_stats/code_statistics_calculator'
|
11
|
+
require 'rails_stats/util'
|
12
|
+
require 'rails_stats/app_statistics'
|
13
|
+
require 'rails_stats/spec_statistics'
|
14
|
+
require 'rails_stats/cucumber_statistics'
|
15
|
+
require 'rails_stats/root_statistics'
|
16
|
+
require 'rails_stats/gem_statistics'
|
17
|
+
require 'rails_stats/code_statistics'
|
18
|
+
|
19
|
+
require "rails_stats/rake"
|
20
|
+
RailsStats.extend RailsStats::Rake
|
data/rails_stats.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rails_stats/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rails_stats"
|
8
|
+
spec.version = RailsStats::VERSION
|
9
|
+
spec.authors = ["Brian Leonard"]
|
10
|
+
spec.email = ["brian@bleonard.com"]
|
11
|
+
spec.summary = %q{Analyze a Rails project}
|
12
|
+
spec.description = %q{Point it to a directory and see stuff about the app}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "thor"
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
end
|
data/stats.thor
ADDED
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails_stats
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brian Leonard
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Point it to a directory and see stuff about the app
|
56
|
+
email:
|
57
|
+
- brian@bleonard.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE.txt
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- lib/rails_stats.rb
|
68
|
+
- lib/rails_stats/app_statistics.rb
|
69
|
+
- lib/rails_stats/code_statistics.rb
|
70
|
+
- lib/rails_stats/code_statistics_calculator.rb
|
71
|
+
- lib/rails_stats/cucumber_statistics.rb
|
72
|
+
- lib/rails_stats/gem_statistics.rb
|
73
|
+
- lib/rails_stats/inflector.rb
|
74
|
+
- lib/rails_stats/rake.rb
|
75
|
+
- lib/rails_stats/root_statistics.rb
|
76
|
+
- lib/rails_stats/spec_statistics.rb
|
77
|
+
- lib/rails_stats/util.rb
|
78
|
+
- lib/rails_stats/version.rb
|
79
|
+
- rails_stats.gemspec
|
80
|
+
- stats.thor
|
81
|
+
homepage: ''
|
82
|
+
licenses:
|
83
|
+
- MIT
|
84
|
+
metadata: {}
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 2.0.3
|
102
|
+
signing_key:
|
103
|
+
specification_version: 4
|
104
|
+
summary: Analyze a Rails project
|
105
|
+
test_files: []
|