Sha256: f8a733ec7c1dc1748ca6acb938078d6b594b17b1b6606c4982ee63f83b484c29

Contents?: true

Size: 1.67 KB

Versions: 1

Compression:

Stored size: 1.67 KB

Contents

require 'guard'
require 'guard/plugin'

module Guard
  class Depend < Plugin
    require 'guard/depend/options'
    require 'guard/depend/runner'

    def initialize(options = {})
      super
      @options = Options.with_defaults(options)
      @runner = Runner.new
    end

    def start
      UI.info 'Guard::Depend is running'
      run_all if @options[:run_on_start]
    end

    def stop
    end

    def reload
    end

    def run_all
      @runner.run(@options[:cmd])
    end

    def run_on_changes(paths = [])
      run_if_outdated(paths)
    end

    private
    def run_if_outdated(paths = [])
      return false if paths.empty?

      outdated = out_of_date?(paths, @options[:output_paths])
      unless outdated
        UI.debug("Output is not outdated with regard to #{paths}")
        return
      end

      @runner.run(@options[:cmd])
    end

    def out_of_date?(input, output)
      output = output.call if output.respond_to?(:call)

      return true if input.nil? || input.empty? || output.nil? || output.empty?

      input = input.max_by {|f| input_mtime(f) }
      output = output.min_by {|f| output_mtime(f) }

      input_time = input_mtime(input)
      output_time = output_mtime(output)

      UI.debug("Newest input file:  #{input_time} #{input}")
      UI.debug("Oldest output file: #{output_time} #{output}")

      return input_time > output_time
    end

    def input_mtime(file)
      return Time.new(9999, 12, 31) unless File.readable?(file)
      File.mtime(file)
    end

    def output_mtime(file)
      return Time.new(0, 1, 1) unless File.readable?(file)
      File.mtime(file)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
guard-depend-0.0.1 lib/guard/depend.rb