class Pretentious::Trigger

The trigger class is used for hooking into an existing method in order to record the usage of a target class

Public Class Methods

new(target_class) click to toggle source
# File lib/pretentious/trigger.rb, line 10
def initialize(target_class)
  @target_class = target_class
  @target_class_methods = []
  @target_methods = []
end
output_file(result, klass, output_folder) click to toggle source
# File lib/pretentious/trigger.rb, line 40
def self.output_file(result, klass, output_folder)
  file_writer = FileWriter.new({ output_folder: output_folder })
  file_writer.write klass, result
end

Public Instance Methods

class_method_called(*target_methods) click to toggle source
# File lib/pretentious/trigger.rb, line 21
def class_method_called(*target_methods)
  @target_class_methods = target_methods
  self
end
method_called(*target_methods) click to toggle source
# File lib/pretentious/trigger.rb, line 16
def method_called(*target_methods)
  @target_methods = target_methods
  self
end
minitest_for(*klasses, &results_block) click to toggle source
# File lib/pretentious/trigger.rb, line 33
def minitest_for(*klasses, &results_block)
  @generator = Pretentious::MinitestGenerator
  @spec_classes = klasses
  @results_block = results_block
  install_trigger
end
spec_for(*klasses, &results_block) click to toggle source
# File lib/pretentious/trigger.rb, line 26
def spec_for(*klasses, &results_block)
  @generator = Pretentious::RspecGenerator
  @spec_classes = klasses
  @results_block = results_block
  install_trigger
end

Private Instance Methods

attach_generator(generator, target, method, spec_classes, results_block, options) click to toggle source
# File lib/pretentious/trigger.rb, line 47
def attach_generator(generator, target, method, spec_classes, results_block, options)
  target.send(:define_method, method.to_sym) do |*args, &block|
    result = nil
    Pretentious::Generator.test_generator = generator
    generator_result = Pretentious::Generator.generate_for(*spec_classes) do
      result = send(:"_pretentious_orig_#{method}", *args, &block)
    end

    results_block.call(generator_result, options) if results_block

    result
  end
end
install_trigger() click to toggle source
# File lib/pretentious/trigger.rb, line 61
def install_trigger
  @options = Pretentious::Trigger::Options.new

  default_callback = proc do |result_per_generator, options|
    output_files = []
    result_per_generator.each do |klass, result|
      output_folder = result[:generator].location(options.output_folder)
      filename = Pretentious::Trigger.output_file(result, klass, output_folder)
      output_files << filename
    end
    output_files
  end

  @results_block = default_callback unless @results_block

  @target_methods.each do |method|
    @target_class.class_exec(@target_class, method) do |klass, m|
      unless klass.instance_methods.include? :"_pretentious_orig_#{m}"
        alias_method :"_pretentious_orig_#{m}", :"#{m}"
      end
    end

    attach_generator(@generator, @target_class, method, @spec_classes, @results_block, @options)
  end

  @target_class_methods.each do |method|
    @target_class.singleton_class.class_exec(@target_class, method) do |klass, m|
      unless klass.methods.include? :"_pretentious_orig_#{m}"
        alias_method :"_pretentious_orig_#{m}", :"#{m}"
      end
    end
    attach_generator(@generator, @target_class.singleton_class, method,
                     @spec_classes, @results_block, @options)
  end

  @options
end