reactive 0.1.0
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/History.txt +3 -0
- data/MIT-LICENSE +21 -0
- data/Manifest.txt +60 -0
- data/README.txt +130 -0
- data/Rakefile +14 -0
- data/app_generators/reactive/USAGE +11 -0
- data/app_generators/reactive/reactive_generator.rb +160 -0
- data/app_generators/reactive/templates/README +130 -0
- data/app_generators/reactive/templates/Rakefile +10 -0
- data/app_generators/reactive/templates/app/controllers/application_controller.rb +2 -0
- data/app_generators/reactive/templates/app/helpers/application_helper.rb +2 -0
- data/app_generators/reactive/templates/config/boot.rb +94 -0
- data/app_generators/reactive/templates/config/databases/frontbase.yml +28 -0
- data/app_generators/reactive/templates/config/databases/mysql.yml +54 -0
- data/app_generators/reactive/templates/config/databases/oracle.yml +39 -0
- data/app_generators/reactive/templates/config/databases/postgresql.yml +48 -0
- data/app_generators/reactive/templates/config/databases/sqlite2.yml +16 -0
- data/app_generators/reactive/templates/config/databases/sqlite3.yml +19 -0
- data/app_generators/reactive/templates/config/empty.log +0 -0
- data/app_generators/reactive/templates/config/environment.rb +11 -0
- data/app_generators/reactive/templates/script/destroy +12 -0
- data/app_generators/reactive/templates/script/generate +12 -0
- data/app_generators/reactive/templates/script/run +5 -0
- data/app_generators/reactive/templates/script/win_script.cmd +1 -0
- data/bin/reactive +16 -0
- data/lib/code_statistics.rb +107 -0
- data/lib/controller.rb +23 -0
- data/lib/controller/base.rb +442 -0
- data/lib/controller/filters.rb +767 -0
- data/lib/controller/flash.rb +161 -0
- data/lib/controller/helpers.rb +204 -0
- data/lib/controller/layout.rb +326 -0
- data/lib/dispatcher.rb +46 -0
- data/lib/generated_attribute.rb +40 -0
- data/lib/initializer.rb +425 -0
- data/lib/named_base_generator.rb +92 -0
- data/lib/reactive.rb +6 -0
- data/lib/request.rb +17 -0
- data/lib/source_annotation_extractor.rb +62 -0
- data/lib/tasks/annotations.rake +23 -0
- data/lib/tasks/databases.rake +347 -0
- data/lib/tasks/log.rake +9 -0
- data/lib/tasks/misc.rake +5 -0
- data/lib/tasks/reactive.rb +16 -0
- data/lib/tasks/statistics.rake +17 -0
- data/lib/tasks/testing.rake +118 -0
- data/lib/version.rb +9 -0
- data/lib/view.rb +1 -0
- data/lib/view/base.rb +33 -0
- data/reactive_generators/model/USAGE +27 -0
- data/reactive_generators/model/model_generator.rb +52 -0
- data/reactive_generators/model/templates/fixtures.yml +19 -0
- data/reactive_generators/model/templates/migration.rb +16 -0
- data/reactive_generators/model/templates/model.rb +2 -0
- data/reactive_generators/model/templates/unit_test.rb +8 -0
- data/reactive_generators/scaffold/USAGE +26 -0
- data/reactive_generators/scaffold/scaffold_generator.rb +75 -0
- data/reactive_generators/scaffold/templates/controller.rb +51 -0
- data/reactive_generators/scaffold/templates/functional_test.rb +49 -0
- data/reactive_generators/scaffold/templates/helper.rb +2 -0
- metadata +142 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
|
+
# and they will automatically be available to Rake.
|
3
|
+
|
4
|
+
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
|
5
|
+
|
6
|
+
require 'rake'
|
7
|
+
require 'rake/testtask'
|
8
|
+
require 'rake/rdoctask'
|
9
|
+
|
10
|
+
require 'tasks/reactive'
|
@@ -0,0 +1,94 @@
|
|
1
|
+
|
2
|
+
REACTIVE_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(REACTIVE_ROOT)
|
3
|
+
|
4
|
+
module Reactive
|
5
|
+
class << self
|
6
|
+
def boot
|
7
|
+
Boot.new.boot unless booted?
|
8
|
+
end
|
9
|
+
|
10
|
+
def booted?
|
11
|
+
defined? Reactive::Initializer
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
Boot.new.run
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Boot
|
20
|
+
def initialize
|
21
|
+
load_initializer
|
22
|
+
end
|
23
|
+
|
24
|
+
def boot
|
25
|
+
Reactive::Initializer.run
|
26
|
+
end
|
27
|
+
|
28
|
+
def run
|
29
|
+
boot
|
30
|
+
Dispatcher.dispatch(:init)
|
31
|
+
end
|
32
|
+
|
33
|
+
def load_initializer
|
34
|
+
self.class.load_rubygems
|
35
|
+
|
36
|
+
# add apps gem directory to load path
|
37
|
+
Gem.clear_paths
|
38
|
+
Gem.path.unshift("#{REACTIVE_ROOT}/gems")
|
39
|
+
|
40
|
+
load_reactive_gem
|
41
|
+
require 'initializer'
|
42
|
+
end
|
43
|
+
|
44
|
+
def load_reactive_gem
|
45
|
+
if version = self.class.gem_version
|
46
|
+
gem 'reactive', version
|
47
|
+
else
|
48
|
+
gem 'reactive'
|
49
|
+
end
|
50
|
+
rescue Gem::LoadError => load_error
|
51
|
+
$stderr.puts %(Missing the Reactive #{version} gem. Please `gem install -v=#{version} reactive`, update your REACTIVE_GEM_VERSION setting in config/environment.rb for the Reactive version you do have installed, or comment out REACTIVE_GEM_VERSION to use the latest version installed.)
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
|
55
|
+
class << self
|
56
|
+
def rubygems_version
|
57
|
+
Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion
|
58
|
+
end
|
59
|
+
|
60
|
+
def gem_version
|
61
|
+
if defined? REACTIVE_GEM_VERSION
|
62
|
+
REACTIVE_GEM_VERSION
|
63
|
+
elsif ENV.include?('REACTIVE_GEM_VERSION')
|
64
|
+
ENV['REACTIVE_GEM_VERSION']
|
65
|
+
else
|
66
|
+
parse_gem_version(read_environment_rb)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def load_rubygems
|
71
|
+
require 'rubygems'
|
72
|
+
|
73
|
+
unless rubygems_version >= '0.9.4'
|
74
|
+
$stderr.puts %(Rails requires RubyGems >= 0.9.4 (you have #{rubygems_version}). Please `gem update --system` and try again.)
|
75
|
+
exit 1
|
76
|
+
end
|
77
|
+
|
78
|
+
rescue LoadError
|
79
|
+
$stderr.puts %(Reactive requires RubyGems >= 0.9.4. Please install RubyGems and try again: http://rubygems.rubyforge.org)
|
80
|
+
exit 1
|
81
|
+
end
|
82
|
+
|
83
|
+
def parse_gem_version(text)
|
84
|
+
$1 if text =~ /^[^#]*REACTIVE_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
def read_environment_rb
|
89
|
+
File.read("#{REACTIVE_ROOT}/config/environment.rb")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# FrontBase versions 4.x
|
2
|
+
#
|
3
|
+
# Get the bindings:
|
4
|
+
# gem install ruby-frontbase
|
5
|
+
|
6
|
+
development:
|
7
|
+
adapter: frontbase
|
8
|
+
host: localhost
|
9
|
+
database: <%= app_name %>_development
|
10
|
+
username: <%= app_name %>
|
11
|
+
password: ''
|
12
|
+
|
13
|
+
# Warning: The database defined as 'test' will be erased and
|
14
|
+
# re-generated from your development database when you run 'rake'.
|
15
|
+
# Do not set this db to the same as development or production.
|
16
|
+
test:
|
17
|
+
adapter: frontbase
|
18
|
+
host: localhost
|
19
|
+
database: <%= app_name %>_test
|
20
|
+
username: <%= app_name %>
|
21
|
+
password: ''
|
22
|
+
|
23
|
+
production:
|
24
|
+
adapter: frontbase
|
25
|
+
host: localhost
|
26
|
+
database: <%= app_name %>_production
|
27
|
+
username: <%= app_name %>
|
28
|
+
password: ''
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# MySQL. Versions 4.1 and 5.0 are recommended.
|
2
|
+
#
|
3
|
+
# Install the MySQL driver:
|
4
|
+
# gem install mysql
|
5
|
+
# On Mac OS X:
|
6
|
+
# sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql
|
7
|
+
# On Mac OS X Leopard:
|
8
|
+
# sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
|
9
|
+
# This sets the ARCHFLAGS environment variable to your native architecture
|
10
|
+
# On Windows:
|
11
|
+
# gem install mysql
|
12
|
+
# Choose the win32 build.
|
13
|
+
# Install MySQL and put its /bin directory on your path.
|
14
|
+
#
|
15
|
+
# And be sure to use new-style password hashing:
|
16
|
+
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
17
|
+
development:
|
18
|
+
adapter: mysql
|
19
|
+
encoding: utf8
|
20
|
+
database: <%= app_name %>_development
|
21
|
+
username: root
|
22
|
+
password:
|
23
|
+
<% if socket -%>
|
24
|
+
socket: <%= socket %>
|
25
|
+
<% else -%>
|
26
|
+
host: localhost
|
27
|
+
<% end -%>
|
28
|
+
|
29
|
+
# Warning: The database defined as 'test' will be erased and
|
30
|
+
# re-generated from your development database when you run 'rake'.
|
31
|
+
# Do not set this db to the same as development or production.
|
32
|
+
test:
|
33
|
+
adapter: mysql
|
34
|
+
encoding: utf8
|
35
|
+
database: <%= app_name %>_test
|
36
|
+
username: root
|
37
|
+
password:
|
38
|
+
<% if socket -%>
|
39
|
+
socket: <%= socket %>
|
40
|
+
<% else -%>
|
41
|
+
host: localhost
|
42
|
+
<% end -%>
|
43
|
+
|
44
|
+
production:
|
45
|
+
adapter: mysql
|
46
|
+
encoding: utf8
|
47
|
+
database: <%= app_name %>_production
|
48
|
+
username: root
|
49
|
+
password:
|
50
|
+
<% if socket -%>
|
51
|
+
socket: <%= socket %>
|
52
|
+
<% else -%>
|
53
|
+
host: localhost
|
54
|
+
<% end -%>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Oracle/OCI 8i, 9, 10g
|
2
|
+
#
|
3
|
+
# Requires Ruby/OCI8:
|
4
|
+
# http://rubyforge.org/projects/ruby-oci8/
|
5
|
+
#
|
6
|
+
# Specify your database using any valid connection syntax, such as a
|
7
|
+
# tnsnames.ora service name, or a sql connect url string of the form:
|
8
|
+
#
|
9
|
+
# //host:[port][/service name]
|
10
|
+
#
|
11
|
+
# By default prefetch_rows (OCI_ATTR_PREFETCH_ROWS) is set to 100. And
|
12
|
+
# until true bind variables are supported, cursor_sharing is set by default
|
13
|
+
# to 'similar'. Both can be changed in the configation below; the defaults
|
14
|
+
# are equivalent to specifying:
|
15
|
+
#
|
16
|
+
# prefetch_rows: 100
|
17
|
+
# cursor_sharing: similar
|
18
|
+
#
|
19
|
+
|
20
|
+
development:
|
21
|
+
adapter: oracle
|
22
|
+
database: <%= app_name %>_development
|
23
|
+
username: <%= app_name %>
|
24
|
+
password:
|
25
|
+
|
26
|
+
# Warning: The database defined as 'test' will be erased and
|
27
|
+
# re-generated from your development database when you run 'rake'.
|
28
|
+
# Do not set this db to the same as development or production.
|
29
|
+
test:
|
30
|
+
adapter: oracle
|
31
|
+
database: <%= app_name %>_test
|
32
|
+
username: <%= app_name %>
|
33
|
+
password:
|
34
|
+
|
35
|
+
production:
|
36
|
+
adapter: oracle
|
37
|
+
database: <%= app_name %>_production
|
38
|
+
username: <%= app_name %>
|
39
|
+
password:
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# PostgreSQL. Versions 7.4 and 8.x are supported.
|
2
|
+
#
|
3
|
+
# Install the ruby-postgres driver:
|
4
|
+
# gem install ruby-postgres
|
5
|
+
# On Mac OS X:
|
6
|
+
# gem install ruby-postgres -- --include=/usr/local/pgsql
|
7
|
+
# On Windows:
|
8
|
+
# gem install ruby-postgres
|
9
|
+
# Choose the win32 build.
|
10
|
+
# Install PostgreSQL and put its /bin directory on your path.
|
11
|
+
development:
|
12
|
+
adapter: postgresql
|
13
|
+
encoding: unicode
|
14
|
+
database: <%= app_name %>_development
|
15
|
+
username: <%= app_name %>
|
16
|
+
password:
|
17
|
+
|
18
|
+
# Connect on a TCP socket. Omitted by default since the client uses a
|
19
|
+
# domain socket that doesn't need configuration. Windows does not have
|
20
|
+
# domain sockets, so uncomment these lines.
|
21
|
+
#host: localhost
|
22
|
+
#port: 5432
|
23
|
+
|
24
|
+
# Schema search path. The server defaults to $user,public
|
25
|
+
#schema_search_path: myapp,sharedapp,public
|
26
|
+
|
27
|
+
# Minimum log levels, in increasing order:
|
28
|
+
# debug5, debug4, debug3, debug2, debug1,
|
29
|
+
# log, notice, warning, error, fatal, and panic
|
30
|
+
# The server defaults to notice.
|
31
|
+
#min_messages: warning
|
32
|
+
|
33
|
+
# Warning: The database defined as 'test' will be erased and
|
34
|
+
# re-generated from your development database when you run 'rake'.
|
35
|
+
# Do not set this db to the same as development or production.
|
36
|
+
test:
|
37
|
+
adapter: postgresql
|
38
|
+
encoding: unicode
|
39
|
+
database: <%= app_name %>_test
|
40
|
+
username: <%= app_name %>
|
41
|
+
password:
|
42
|
+
|
43
|
+
production:
|
44
|
+
adapter: postgresql
|
45
|
+
encoding: unicode
|
46
|
+
database: <%= app_name %>_production
|
47
|
+
username: <%= app_name %>
|
48
|
+
password:
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# SQLite version 2.x
|
2
|
+
# gem install sqlite-ruby
|
3
|
+
development:
|
4
|
+
adapter: sqlite
|
5
|
+
database: db/development.sqlite2
|
6
|
+
|
7
|
+
# Warning: The database defined as 'test' will be erased and
|
8
|
+
# re-generated from your development database when you run 'rake'.
|
9
|
+
# Do not set this db to the same as development or production.
|
10
|
+
test:
|
11
|
+
adapter: sqlite
|
12
|
+
database: db/test.sqlite2
|
13
|
+
|
14
|
+
production:
|
15
|
+
adapter: sqlite
|
16
|
+
database: db/production.sqlite2
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# SQLite version 3.x
|
2
|
+
# gem install sqlite3-ruby (not necessary on OS X Leopard)
|
3
|
+
development:
|
4
|
+
adapter: sqlite3
|
5
|
+
database: db/development.sqlite3
|
6
|
+
timeout: 5000
|
7
|
+
|
8
|
+
# Warning: The database defined as 'test' will be erased and
|
9
|
+
# re-generated from your development database when you run 'rake'.
|
10
|
+
# Do not set this db to the same as development or production.
|
11
|
+
test:
|
12
|
+
adapter: sqlite3
|
13
|
+
database: db/test.sqlite3
|
14
|
+
timeout: 5000
|
15
|
+
|
16
|
+
production:
|
17
|
+
adapter: sqlite3
|
18
|
+
database: db/production.sqlite3
|
19
|
+
timeout: 5000
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Choose the view provider
|
2
|
+
<% if view_provider -%>
|
3
|
+
config.view_provider = :<%= view_provider %>
|
4
|
+
<% else -%>
|
5
|
+
# config.view_provider = :wx
|
6
|
+
<% end -%>
|
7
|
+
|
8
|
+
<% unless database -%>
|
9
|
+
# We don't want ActiveRecord for the ORM, remove it from the default frameworks
|
10
|
+
config.frameworks.delete :active_record
|
11
|
+
<% end -%>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
require "#{File.dirname(__FILE__)}/../config/boot.rb"
|
5
|
+
Reactive.boot
|
6
|
+
|
7
|
+
require 'rubigen'
|
8
|
+
require 'rubigen/scripts/destroy'
|
9
|
+
|
10
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
11
|
+
RubiGen::Base.prepend_sources(Gem.loaded_specs.values.collect{|spec| RubiGen::PathFilteredSource.new(:GemPlugins, spec.full_gem_path, [:reactive, :test_unit]) })
|
12
|
+
RubiGen::Scripts::Destroy.new.run(ARGV)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
require "#{File.dirname(__FILE__)}/../config/boot.rb"
|
5
|
+
Reactive.boot
|
6
|
+
|
7
|
+
require 'rubigen'
|
8
|
+
require 'rubigen/scripts/generate'
|
9
|
+
|
10
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
11
|
+
RubiGen::Base.prepend_sources(Gem.loaded_specs.values.collect{|spec| RubiGen::PathFilteredSource.new(:GemPlugins, spec.full_gem_path, [:reactive, :test_unit]) })
|
12
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
@@ -0,0 +1 @@
|
|
1
|
+
@ruby <%= File.join("script", filename) %> %*
|
data/bin/reactive
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../lib/version'
|
4
|
+
if %w(--version -v).include? ARGV.first
|
5
|
+
puts "Reactive #{Reactive::VERSION::STRING}"
|
6
|
+
exit(0)
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'rubygems'
|
10
|
+
require 'rubigen'
|
11
|
+
|
12
|
+
require 'rubigen/scripts/generate'
|
13
|
+
source = RubiGen::PathSource.new(:application, File.join(File.dirname(__FILE__), "../app_generators"))
|
14
|
+
RubiGen::Base.reset_sources
|
15
|
+
RubiGen::Base.append_sources(source)
|
16
|
+
RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'reactive')
|
@@ -0,0 +1,107 @@
|
|
1
|
+
class CodeStatistics #:nodoc:
|
2
|
+
|
3
|
+
TEST_TYPES = %w(Units Functionals Unit\ tests Functional\ tests Integration\ tests)
|
4
|
+
|
5
|
+
def initialize(*pairs)
|
6
|
+
@pairs = pairs
|
7
|
+
@statistics = calculate_statistics
|
8
|
+
@total = calculate_total if pairs.length > 1
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
print_header
|
13
|
+
@pairs.each { |pair| print_line(pair.first, @statistics[pair.first]) }
|
14
|
+
print_splitter
|
15
|
+
|
16
|
+
if @total
|
17
|
+
print_line("Total", @total)
|
18
|
+
print_splitter
|
19
|
+
end
|
20
|
+
|
21
|
+
print_code_test_stats
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def calculate_statistics
|
26
|
+
@pairs.inject({}) { |stats, pair| stats[pair.first] = calculate_directory_statistics(pair.last); stats }
|
27
|
+
end
|
28
|
+
|
29
|
+
def calculate_directory_statistics(directory, pattern = /.*\.rb$/)
|
30
|
+
stats = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0 }
|
31
|
+
|
32
|
+
Dir.foreach(directory) do |file_name|
|
33
|
+
if File.stat(directory + "/" + file_name).directory? and (/^\./ !~ file_name)
|
34
|
+
newstats = calculate_directory_statistics(directory + "/" + file_name, pattern)
|
35
|
+
stats.each { |k, v| stats[k] += newstats[k] }
|
36
|
+
end
|
37
|
+
|
38
|
+
next unless file_name =~ pattern
|
39
|
+
|
40
|
+
f = File.open(directory + "/" + file_name)
|
41
|
+
|
42
|
+
while line = f.gets
|
43
|
+
stats["lines"] += 1
|
44
|
+
stats["classes"] += 1 if line =~ /class [A-Z]/
|
45
|
+
stats["methods"] += 1 if line =~ /def [a-z]/
|
46
|
+
stats["codelines"] += 1 unless line =~ /^\s*$/ || line =~ /^\s*#/
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
stats
|
51
|
+
end
|
52
|
+
|
53
|
+
def calculate_total
|
54
|
+
total = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0 }
|
55
|
+
@statistics.each_value { |pair| pair.each { |k, v| total[k] += v } }
|
56
|
+
total
|
57
|
+
end
|
58
|
+
|
59
|
+
def calculate_code
|
60
|
+
code_loc = 0
|
61
|
+
@statistics.each { |k, v| code_loc += v['codelines'] unless TEST_TYPES.include? k }
|
62
|
+
code_loc
|
63
|
+
end
|
64
|
+
|
65
|
+
def calculate_tests
|
66
|
+
test_loc = 0
|
67
|
+
@statistics.each { |k, v| test_loc += v['codelines'] if TEST_TYPES.include? k }
|
68
|
+
test_loc
|
69
|
+
end
|
70
|
+
|
71
|
+
def print_header
|
72
|
+
print_splitter
|
73
|
+
puts "| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |"
|
74
|
+
print_splitter
|
75
|
+
end
|
76
|
+
|
77
|
+
def print_splitter
|
78
|
+
puts "+----------------------+-------+-------+---------+---------+-----+-------+"
|
79
|
+
end
|
80
|
+
|
81
|
+
def print_line(name, statistics)
|
82
|
+
m_over_c = (statistics["methods"] / statistics["classes"]) rescue m_over_c = 0
|
83
|
+
loc_over_m = (statistics["codelines"] / statistics["methods"]) - 2 rescue loc_over_m = 0
|
84
|
+
|
85
|
+
start = if TEST_TYPES.include? name
|
86
|
+
"| #{name.ljust(20)} "
|
87
|
+
else
|
88
|
+
"| #{name.ljust(20)} "
|
89
|
+
end
|
90
|
+
|
91
|
+
puts start +
|
92
|
+
"| #{statistics["lines"].to_s.rjust(5)} " +
|
93
|
+
"| #{statistics["codelines"].to_s.rjust(5)} " +
|
94
|
+
"| #{statistics["classes"].to_s.rjust(7)} " +
|
95
|
+
"| #{statistics["methods"].to_s.rjust(7)} " +
|
96
|
+
"| #{m_over_c.to_s.rjust(3)} " +
|
97
|
+
"| #{loc_over_m.to_s.rjust(5)} |"
|
98
|
+
end
|
99
|
+
|
100
|
+
def print_code_test_stats
|
101
|
+
code = calculate_code
|
102
|
+
tests = calculate_tests
|
103
|
+
|
104
|
+
puts " Code LOC: #{code} Test LOC: #{tests} Code to Test Ratio: 1:#{sprintf("%.1f", tests.to_f/code)}"
|
105
|
+
puts ""
|
106
|
+
end
|
107
|
+
end
|