# A sample Guardfile
# More info at https://github.com/guard/guard#readme

## Uncomment and set this to only include directories you want to watch
# directories %w(app lib config test spec features)

## Uncomment to clear the screen before every task
# clearing :on

## Guard internally checks for changes in the Guardfile and exits.
## If you want Guard to automatically start up again, run guard in a
## shell loop, e.g.:
##
##  $ while bundle exec guard; do echo "Restarting Guard..."; done
##
## Note: if you are using the `directories` clause above and you are not
## watching the project directory ('.'), then you will want to move
## the Guardfile to a watched dir and symlink it back, e.g.
#
#  $ mkdir config
#  $ mv Guardfile config/
#  $ ln -s config/Guardfile .
#
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"

notification :growl

guard 'shell' do
#  watch(%r{^(tests/(functional|unit|acceptance))/(.+)\.php$}) do |m|
  watch(%r{^.*\.php$}) do |m|
    output = `./bin/codecept run unit --debug --steps`
    last_lines = ''; lines2read = 4;
    output.clone.lines.reverse_each do |line|
      lines2read -= 1;
      last_lines << line
      break if lines2read == 0
    end

    # output
    result = if /OK/ =~ last_lines then :success else :failed end
    message = if result == :success
      last_lines.scan(/(?:[^\[2K]\w+\: \d+)|\d+ \w+/).join(' ')
    else
      last_lines.scan(/(?:[^\[2K]\w+\: \d+)/).join(' ')
    end
    n(message , 'Codeception', result)

    output
  end
end

#guard :codeception do
#  watch(%r{^.*\.php$})
#end

