lib/attractor/cli.rb in attractor-1.1.0 vs lib/attractor/cli.rb in attractor-1.1.1
- old
+ new
@@ -5,73 +5,83 @@
require 'attractor'
module Attractor
# contains methods implementing the CLI
class CLI < Thor
+ shared_options = [[:file_prefix, aliases: :p],
+ [:watch, aliases: :w, type: :boolean],
+ [:minimum_churn, aliases: :c, type: :numeric, default: 3],
+ [:start_ago, aliases: :s, type: :string, default: '5y'],
+ [:type, aliases: :t]]
+
+ advanced_options = [[:format, aliases: :f, default: 'html'],
+ [:no_open_browser, type: :boolean],
+ [:ci, type: :boolean]]
+
desc 'calc', 'Calculates churn and complexity for all ruby files in current directory'
- option :file_prefix, aliases: :p
- option :watch, aliases: :w, type: :boolean
- option :type, aliases: :t
+ shared_options.each do |shared_option|
+ option(*shared_option)
+ end
def calc
file_prefix = options[:file_prefix]
- calculators = Attractor.calculators_for_type(options[:type], file_prefix)
if options[:watch]
puts 'Listening for file changes...'
- Attractor::ConsoleReporter.new(file_prefix: file_prefix, calculators: calculators).watch
+ Attractor::ConsoleReporter.new(file_prefix: file_prefix, calculators: calculators(options)).watch
else
- Attractor::ConsoleReporter.new(file_prefix: file_prefix, calculators: calculators).report
+ Attractor::ConsoleReporter.new(file_prefix: file_prefix, calculators: calculators(options)).report
end
rescue RuntimeError => e
puts "Runtime error: #{e.message}"
end
desc 'report', 'Generates an HTML report'
- option :format, aliases: :f, default: 'html'
- option :file_prefix, aliases: :p
- option :watch, aliases: :w, type: :boolean
- option :type, aliases: :t
- option :no_open_browser, type: :boolean
- option :ci, type: :boolean
+ (shared_options + advanced_options).each do |option|
+ option(*option)
+ end
def report
file_prefix = options[:file_prefix]
- calculators = Attractor.calculators_for_type(options[:type], file_prefix)
- open_browser = !(options[:no_open_browser] || options[:ci])
+ open_browser = !(options[:no_open_browser] || options[:ci])
if options[:watch]
puts 'Listening for file changes...'
- Attractor::HtmlReporter.new(file_prefix: file_prefix, calculators: calculators, open_browser: open_browser).watch
+ Attractor::HtmlReporter.new(file_prefix: file_prefix, calculators: calculators(options), open_browser: open_browser).watch
else
case options[:format]
when 'html'
- Attractor::HtmlReporter.new(file_prefix: file_prefix, calculators: calculators, open_browser: open_browser).report
+ Attractor::HtmlReporter.new(file_prefix: file_prefix, calculators: calculators(options), open_browser: open_browser).report
else
- Attractor::HtmlReporter.new(file_prefix: file_prefix, calculators: calculators, open_browser: open_browser).report
+ Attractor::HtmlReporter.new(file_prefix: file_prefix, calculators: calculators(options), open_browser: open_browser).report
end
end
rescue RuntimeError => e
puts "Runtime error: #{e.message}"
end
desc 'serve', 'Serves the report on localhost'
- option :format, aliases: :f, default: 'html'
- option :file_prefix, aliases: :p
- option :watch, aliases: :w, type: :boolean
- option :type, aliases: :t
- option :no_open_browser, type: :boolean
- option :ci, type: :boolean
+ (shared_options + advanced_options).each do |option|
+ option(*option)
+ end
def serve
file_prefix = options[:file_prefix]
- open_browser = !(options[:no_open_browser] || options[:ci])
- calculators = Attractor.calculators_for_type(options[:type], file_prefix)
+ open_browser = !(options[:no_open_browser] || options[:ci])
if options[:watch]
puts 'Listening for file changes...'
- Attractor::SinatraReporter.new(file_prefix: file_prefix, calculators: calculators, open_browser: open_browser).watch
+ Attractor::SinatraReporter.new(file_prefix: file_prefix, calculators: calculators(options), open_browser: open_browser).watch
else
case options[:format]
when 'html'
- Attractor::SinatraReporter.new(file_prefix: file_prefix, calculators: calculators, open_browser: open_browser).report
+ Attractor::SinatraReporter.new(file_prefix: file_prefix, calculators: calculators(options), open_browser: open_browser).report
else
- Attractor::SinatraReporter.new(file_prefix: file_prefix, calculators: calculators, open_browser: open_browser).report
+ Attractor::SinatraReporter.new(file_prefix: file_prefix, calculators: calculators(options), open_browser: open_browser).report
end
end
+ end
+
+ private
+
+ def calculators(options)
+ Attractor.calculators_for_type(options[:type],
+ file_prefix: options[:file_prefix],
+ minimum_churn_count: options[:minimum_churn],
+ start_ago: options[:start_ago])
end
end
end