gem install metric_fu
If you have trouble installing the gem
- try adding metric_fu to your Gemfile and bundling.
- file a ticket on the issues page.
MetricFu is cryptographically signed. To be sure the gem you install hasn't been tampered with:
- Add my public key (if you haven't already) as a trusted certificate
gem cert --add <(curl -Ls https://raw.github.com/metricfu/metric_fu/master/certs/bf4.pem)
gem install metric_fu -P HighSecurity
- This may cause installation to fail if non-signed dependent gems are also being installed.
From your application root. Running via Rake is still supported.
metric_fu
See:
metric_fu --help
for more options- the .metrics file
- Documentation and Compatibility below
- There is also a wiki page of user-maintained usage information
Code and Bug Reports
- Issue Tracker
- See CONTRIBUTING for how to contribute
Questions, Problems, Suggestions, etc.
By default, metric_fu will use the built-in html formatter to generate HTML reports for each metric with pretty graphs.
These reports are generated in metric_fu's output directory (tmp/metric_fu/output
) by default. You can customize the output directory by specifying an out directory at the command line
using a relative path:
metric_fu --out custom_directory # outputs to tmp/metric_fu/custom_directory
or a full path:
metric_fu --out /home/metrics # outputs to /home/metrics
You can specify a different formatter at the command line by referencing a built-in formatter or providing the fully-qualified name of a custom formatter.
metric_fu --format yaml --out custom_report.yml
or
metric_fu --format MyCustomFormatter
You can customize metric_fu's output format with a custom formatter.
To create a custom formatter, you simply need to create a class that takes an options hash and responds to one or more notifications:
class MyCustomFormatter
def initialize(opts={}); end # metric_fu will pass in an output param if provided.
# Should include one or more of...
def start; end # Sent before metric_fu starts metric measurements.
def start_metric(metric); end # Sent before individual metric is measured.
def finish_metric(metric); end # Sent after individual metric measurement is complete.
def finish; end # Sent after metric_fu has completed all measurements.
def display_results; end # Used to open results in browser, etc.
end
See lib/metric_fu/formatter/ for examples.
metric_fu will attempt to require a custom formatter by fully qualified name based on ruby search path. So if you include a custom formatter as a gem in your Gemfile, you should be able to use it out of the box. But you may find in certain cases that you need to add a require to your .metrics configuration file.
For instance, to require a formatter in your app's lib directory:
require './lib/my_custom_formatter.rb'
in your .metrics file add the below to run pre-generated metrics
MetricFu::Configuration.run do |config|
config.configure_metric(:rcov) do |rcov|
rcov.enabled = true
rcov.external = File.expand_path("coverage/rcov/rcov.txt", Dir.pwd)
rcov.activate
end
end
If you want metric_fu to actually run rcov itself (1.8 only), don't specify an external file to read from
To generate the same metrics metric_fu has been generating run from the root of your project before running metric_fu
RAILS_ENV=test rcov $(ruby -e "puts Dir['{spec,test}/**/*_{spec,test}.rb'].join(' ')") --sort coverage --no-html --text-coverage --no-color --profile --exclude-only '.*' --include-file "\Aapp,\Alib" -Ispec > coverage/rcov/rcov.txt
Add to your Gemfile or otherwise install
gem 'simplecov'
# https://github.com/kina/simplecov-rcov-text
gem 'simplecov-rcov-text'
Modify your spec_helper as per the SimpleCov docs and run your tests before running metric_fu
#in your spec_helper
require 'simplecov'
require 'simplecov-rcov-text'
SimpleCov.formatter = SimpleCov::Formatter::RcovTextFormatter
# or
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
SimpleCov::Formatter::HTMLFormatter,
SimpleCov::Formatter::RcovTextFormatter
]
SimpleCov.start
-
It is currently testing on MRI (>= 1.9.3), JRuby (19 mode), and Rubinius (19 mode). Ruby 1.8 is no longer supported.
-
For 1.8.7 support, see version 3.0.0 for partial support, or 2.1.3.7.18.1 (where Semantic Versioning goes to die)
-
MetricFu no longer runs any of the analyzed code. For code coverage, You may still use rcov metrics as documented below
-
The Cane, Flog, and Rails Best Practices metrics are disabled when Ripper is not available
There is some useful-but-out-of-date documentation about configuring metric_fu at http://metricfu.github.io/metric_fu and a change log in the the HISTORY file.
This is the official repository for metric_fu. The original repository by Jake Scruggs at https://github.com/jscruggs/metric_fu has been deprecated.
- Cane, Source
- Churn, Source
- Flog, Source
- Flay, Source
- Reek Source
- Roodi, Source
- Saikuro, Source Code Statistics, Source )
- Rails-only
- Test Coverage
- 1.9: SimpleCov and SimpleCov-Rcov-Text
- 1.8: Rcov
- Hotspots (a meta-metric of the above)
- Github: http://github.com/jscruggs/metric_fu
- Issue Tracker: http://github.com/jscruggs/metric_fu/issues
- Historical Homepage: http://metric-fu.rubyforge.org/
- Jake's Blog: http://jakescruggs.blogspot.com/
- Jake's Post about stepping down: http://jakescruggs.blogspot.com/2012/08/why-i-abandoned-metricfu.html