require 'guard'
require 'guard/guard'

module Guard
  class RailsAssets < Guard
    def initialize(watchers=[], options={})
      super
      @options = options || {}
    end

    def start
      compile_assets if run_for? :start
    end

    def reload
      compile_assets if run_for? :reload
    end

    def run_all
      compile_assets if run_for? :all
    end

    def run_on_change(paths=[])
      compile_assets if run_for? :change
    end

    def compile_assets
      puts 'Compiling rails assets'
      result = system "rm -rf public/assets && bundle exec rake assets:precompile"   
      if result
        tree = `tree public/assets`
        puts tree
        summary = tree.split("\n").last
        Notifier::notify summary, :title => 'Assets compiled'
      else
        Notifier::notify 'see the details in the terminal', :title => "Can't compile assets", :image => :failed
      end
    end

    private

    def run_for? command
      run_on = @options[:run_on]
      run_on = [:start, :all, :change] if not run_on or run_on.empty? 
      run_on = [run_on] unless run_on.respond_to?(:include?)
      run_on.include?(command)
    end
  end
end