class AbcSize::Calculator
main class
Constants
- SATISFACTORY_ABC_SIZE
Attributes
discount[R]
parameters[R]
path[R]
results[R]
ruby_version[R]
source_code[R]
Public Class Methods
new(source_code: nil, path: nil, parameters: nil)
click to toggle source
# File lib/abc_size/calculator.rb, line 14 def initialize(source_code: nil, path: nil, parameters: nil) @source_code = source_code @path = path @parameters = parameters @discount = @parameters.map { |parameter| ['-d', '--discount'].include?(parameter) }.any?(true) @results = [] end
Public Instance Methods
call()
click to toggle source
# File lib/abc_size/calculator.rb, line 24 def call source = source_code || read_source_code_from_file @ruby_version = return_ruby_version nodes = RuboCop::AST::ProcessedSource.new(source, ruby_version).ast nodes.each_node { |node| results << calculate_result(node) if node.is_a?(RuboCop::AST::DefNode) } print_all_messages # return results for testing purposes results end
Private Instance Methods
calculate_result(node)
click to toggle source
# File lib/abc_size/calculator.rb, line 54 def calculate_result(node) abc_size, abc = RuboCop::Cop::Metrics::Utils::AbcSizeCalculator.calculate( node, discount_repeated_attributes: discount ) [abc_size, abc, node.method_name] end
color(input, satisfactory)
click to toggle source
# File lib/abc_size/calculator.rb, line 63 def color(input, satisfactory) color = satisfactory ? :yellow : :red Rainbow(input).color(color) end
print_all_messages()
click to toggle source
# File lib/abc_size/calculator.rb, line 68 def print_all_messages print_version print_results print_interpretation end
print_interpretation()
click to toggle source
# File lib/abc_size/calculator.rb, line 91 def print_interpretation puts "\n"\ "ABC size: <= 17 satisfactory, 18..30 unsatisfactory, > 30 dangerous\n"\ 'ABC: <assignments, branches (method calls), conditions>' end
print_results()
click to toggle source
# File lib/abc_size/calculator.rb, line 79 def print_results results.each do |result| abc_size, abc, method_name = result satisfactory = abc_size <= SATISFACTORY_ABC_SIZE puts "ABC size: #{color(format('%.2f', abc_size), satisfactory)}, "\ "ABC: #{color(abc, satisfactory)} "\ "for method: #{color(method_name, satisfactory)}" end end
print_version()
click to toggle source
# File lib/abc_size/calculator.rb, line 74 def print_version puts "Processed for Ruby version: #{color(ruby_version, true)}\n"\ "\n" end
read_source_code_from_file()
click to toggle source
# File lib/abc_size/calculator.rb, line 39 def read_source_code_from_file data = File.read(path) raise EmptyFileError, 'File is empty!' if data.empty? data rescue TypeError, Errno::ENOENT, Errno::EISDIR, EmptyFileError => e puts "#{e.message}\n"\ 'Please provide valid path to valid file.' exit end
return_ruby_version()
click to toggle source
# File lib/abc_size/calculator.rb, line 50 def return_ruby_version RubyVersion::Picker.new(parameters).call || RubyVersion::Detector.new.call end