Module: Guard

Extended by:
Commander, Internals::Helpers
Defined in:
lib/guard.rb,
lib/guard/ui.rb,
lib/guard/cli.rb,
lib/guard/dsl.rb,
lib/guard/group.rb,
lib/guard/config.rb,
lib/guard/plugin.rb,
lib/guard/runner.rb,
lib/guard/options.rb,
lib/guard/version.rb,
lib/guard/watcher.rb,
lib/guard/notifier.rb,
lib/guard/terminal.rb,
lib/guard/commander.rb,
lib/guard/guardfile.rb,
lib/guard/jobs/base.rb,
lib/guard/rake_task.rb,
lib/guard/ui/colors.rb,
lib/guard/ui/config.rb,
lib/guard/ui/logger.rb,
lib/guard/dsl_reader.rb,
lib/guard/interactor.rb,
lib/guard/jobs/sleep.rb,
lib/guard/plugin_util.rb,
lib/guard/commands/all.rb,
lib/guard/aruba_adapter.rb,
lib/guard/commands/show.rb,
lib/guard/dsl_describer.rb,
lib/guard/commands/pause.rb,
lib/guard/commands/scope.rb,
lib/guard/deprecated/dsl.rb,
lib/guard/commands/change.rb,
lib/guard/commands/reload.rb,
lib/guard/watcher/pattern.rb,
lib/guard/deprecated/guard.rb,
lib/guard/jobs/pry_wrapper.rb,
lib/guard/deprecated/options.rb,
lib/guard/deprecated/watcher.rb,
lib/guard/guardfile/evaluator.rb,
lib/guard/guardfile/generator.rb,
lib/guard/deprecated/evaluator.rb,
lib/guard/deprecated/guardfile.rb,
lib/guard/commands/notification.rb,
lib/guard/cli/environments/valid.rb,
lib/guard/watcher/pattern/matcher.rb,
lib/guard/cli/environments/bundler.rb,
lib/guard/watcher/pattern/simple_path.rb,
lib/guard/watcher/pattern/match_result.rb,
lib/guard/watcher/pattern/pathname_path.rb,
lib/guard/cli/environments/evaluate_only.rb,
lib/guard/watcher/pattern/deprecated_regexp.rb

Overview

TODO: remove this file in next major version

Defined Under Namespace

Modules: Cli, Commander, Commands, Deprecated, Guardfile, Jobs, UI Classes: ArubaAdapter, CLI, Config, Dsl, DslDescriber, DslReader, Group, Interactor, Notifier, Options, Plugin, PluginUtil, RakeTask, Runner, Terminal, Watcher

Constant Summary collapse

VERSION =
"2.16.1"
UPGRADE_WIKI_URL =
"https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0"

Class Attribute Summary collapse

Class Method Summary collapse

Methods included from Commander

pause, reload, run_all, show, start, stop

Class Attribute Details

.interactorObject (readonly)

Returns the value of attribute interactor


25
26
27
# File 'lib/guard.rb', line 25

def interactor
  @interactor
end

.listenerObject (readonly)

Returns the value of attribute listener


24
25
26
# File 'lib/guard.rb', line 24

def listener
  @listener
end

.queueObject (readonly)

Returns the value of attribute queue


23
24
25
# File 'lib/guard.rb', line 23

def queue
  @queue
end

.stateObject (readonly)

Returns the value of attribute state


22
23
24
# File 'lib/guard.rb', line 22

def state
  @state
end

Class Method Details

.async_queue_add(changes) ⇒ Object

Asynchronously trigger changes

Currently supported args:

@example Old style hash: async_queue_add(modified: ['foo'], added: ['bar'], removed: [])

@example New style signals with args: async_queue_add([:guard_pause, :unpaused ])


88
89
90
91
92
93
94
# File 'lib/guard.rb', line 88

def async_queue_add(changes)
  @queue << changes

  # Putting interactor in background puts guard into foreground
  # so it can handle change notifications
  Thread.new { interactor.background }
end

.init(cmdline_options) ⇒ Object


74
75
76
# File 'lib/guard.rb', line 74

def init(cmdline_options)
  @state = Internals::State.new(cmdline_options)
end

.setup(cmdline_options = {}) ⇒ Guard

Initializes the Guard singleton:

  • Initialize the internal Guard state;
  • Create the interactor
  • Select and initialize the file change listener.

Parameters:

  • options (Hash)

    a customizable set of options

Returns:

  • (Guard)

    the Guard singleton


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/guard.rb', line 45

def setup(cmdline_options = {})
  init(cmdline_options)

  @queue = Internals::Queue.new(Guard)

  _evaluate(state.session.evaluator_options)

  # NOTE: this should be *after* evaluate so :directories can work
  # TODO: move listener setup to session?
  @listener = Listen.send(*state.session.listener_args, &_listener_callback)

  ignores = state.session.guardfile_ignore
  @listener.ignore(ignores) unless ignores.empty?

  ignores = state.session.guardfile_ignore_bang
  @listener.ignore!(ignores) unless ignores.empty?

  Notifier.connect(state.session.notify_options)

  traps = Internals::Traps
  traps.handle("USR1") { async_queue_add(%i(guard_pause paused)) }
  traps.handle("USR2") { async_queue_add(%i(guard_pause unpaused)) }

  @interactor = Interactor.new(state.session.interactor_name == :sleep)
  traps.handle("INT") { @interactor.handle_interrupt }

  self
end