Sha256: 29e87249e94958e07d802b87c463e2e9e3c1b41297f122e326ff832108c0d1fc

Contents?: true

Size: 914 Bytes

Versions: 2

Compression:

Stored size: 914 Bytes

Contents

require 'speed_gun'

class SpeedGun::Hook
  def self.hooks
    @hooks ||= []
  end

  def self.install!
    hooks.each do |hook|
      hook.available? && hook.install!
    end
  end

  attr_reader :name

  def initialize(name, &block)
    @name = name
    @installed = false
    @available_checker = -> { true }
    @execute = -> { true }
    self.class.hooks.push(self)
    instance_eval(&block)
  end

  def depends(&block)
    @available_checker = block
  end

  def execute(&block)
    @execute = block
  end

  def available?
    @available_checker.is_a?(Proc) && @available_checker.call
  end

  def install!
    return if @installed
    @execute.is_a?(Proc) && @execute.call
    @installed = true
  end
end

module SpeedGun
  def self.hook(name, &block)
    SpeedGun::Hook.new(name, &block)
  end
end

Dir[File.expand_path('../hook/**/*.rb', __FILE__)].each do |hook|
  require hook if File.file?(hook)
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
speed_gun-2.0.1 lib/speed_gun/hook.rb
speed_gun-2.0.0 lib/speed_gun/hook.rb