masa21kik/csvconv

View on GitHub
Rakefile

Summary

Maintainability
Test Coverage
require "bundler/gem_tasks"
require "rspec/core/rake_task"
require "flay"
require "flay_task"
require "flog"
require "reek/rake/task"
require "rubocop/rake_task"

ruby_source = FileList["lib/**/*.rb", "bin/*", "spec/**/*.rb"]

RSpec::Core::RakeTask.new(:spec)

task default: :spec
task quality: [:rubocop, :flay, :flog, :reek]

Reek::Rake::Task.new do |t|
  t.fail_on_error = false
  t.verbose = false
  t.source_files = ruby_source
end

FlayTask.new do |t|
  t.dirs = ruby_source.map {|e| e[%r{[^/]+}] }.uniq
  t.threshold = 0
  t.verbose = true
end

desc "Analyze for code complexity"
task :flog do
  flog = Flog.new(continue: true)
  flog.flog(*ruby_source)
  threshold = 28

  bad_methods = flog.totals.select do |name, score|
    /##{flog.no_method}$/ !~ name && score > threshold
  end
  bad_methods.sort_by {|a| a[1] }.reverse_each do |name, score|
    printf "%8.1f: %s\n", score, name
  end
  unless bad_methods.empty?
    warn "#{bad_methods.size} methods have a complexity > #{threshold}"
  end
end

RuboCop::RakeTask.new do |task|
  task.patterns = %w[lib/**/*.rb
                     spec/**/*.rb
                     Rakefile
                     Gemfile]
end