class Aristotle::Utility

Public Class Methods

check_all() click to toggle source
# File lib/aristotle/utility.rb, line 3
def self.check_all
  logic_objects.each do |logic_object|
    puts "Checking #{logic_object[:class_name]}"
    is_everything_covered_for? logic_object
    puts
  end
end

Protected Class Methods

init_logic_objects() click to toggle source
# File lib/aristotle/utility.rb, line 19
def self.init_logic_objects
  @logic_objects ||= []

  Dir[%w(app logic *.logic).join(File::SEPARATOR)].each do |file|
    logic_name = file.split(File::SEPARATOR).last.split('.logic').first
    folder = %W{#{Dir.pwd} app logic}.join(File::SEPARATOR)
    class_name = logic_name.split('_').map(&:capitalize).join('') + 'Logic'

    logic_object = {
        logic_file: folder + File::SEPARATOR + "#{logic_name}.logic",
        class_file: folder + File::SEPARATOR + "#{logic_name}_logic.rb",
        relative_class_file: %W(app logic #{logic_name}_logic.rb).join(File::SEPARATOR),
        class_name: class_name
    }

    begin
      require logic_object[:class_file]
      logic_object[:logic_class] = Object.const_get(class_name)
    rescue LoadError => e
      logic_object[:logic_class] = nil
    rescue
      logic_object[:logic_class] = nil
    end

    @logic_objects << logic_object
  end
end
is_everything_covered_for?(logic_object) click to toggle source
# File lib/aristotle/utility.rb, line 47
def self.is_everything_covered_for?(logic_object)
  logic_class = logic_object[:logic_class]

  if logic_class.nil?
    puts "--> Create file #{logic_object[:relative_class_file]} with the following contents:"
    puts "class #{logic_object[:class_name]} < Aristotle::Logic"
    puts '  # ...'
    puts 'end'
    return
  end

  not_covered = {}
  logic_class.commands.each do |logic_method, commands|
    commands.each do |command|
      unless command.has_action?
        not_covered[logic_method] ||= {actions: [], conditions: []}
        not_covered[logic_method][:actions] << command.action
      end
      unless command.has_condition?
        not_covered[logic_method] ||= {actions: [], conditions: []}
        not_covered[logic_method][:conditions] << command.condition
      end
    end
  end

  if not_covered != {}
    not_covered.each do |request_method, data|
      puts "\n# #{logic_object[:relative_class_file]}"
      puts "class #{logic_object[:class_name]} < Aristotle::Logic"
      puts "  # #{request_method}:\n"
      data[:actions].each do |action|
        puts "  action /#{action}/ do |#{logic_class.logic_name}|\n\n  end\n\n"
      end
      data[:conditions].each do |condition|
        puts "  condition /#{condition}/ do |#{logic_class.logic_name}|\n\n  end\n\n"
      end
      puts "end"
    end
  else
    puts '-> Everything is covered!'
  end

  not_covered == {}
end
logic_objects() click to toggle source
# File lib/aristotle/utility.rb, line 13
def self.logic_objects
  init_logic_objects if @logic_objects.nil? || @logic_objects == {}

  @logic_objects
end