Class: Guard::RailsRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/guard/rails/runner.rb

Constant Summary collapse

MAX_WAIT_COUNT =
10

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ RailsRunner

Returns a new instance of RailsRunner.



9
10
11
12
# File 'lib/guard/rails/runner.rb', line 9

def initialize(options)
  @options = options
  @root = options[:root] ? File.expand_path(options[:root]) : Dir.pwd
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



7
8
9
# File 'lib/guard/rails/runner.rb', line 7

def options
  @options
end

Instance Method Details

#build_commandObject



37
38
39
40
41
42
# File 'lib/guard/rails/runner.rb', line 37

def build_command
  command = build_cli_command if options[:CLI]
  command ||= build_zeus_command if options[:zeus]
  command ||= build_rails_command
  "sh -c 'cd \"#{@root}\" && #{command} &'"
end

#environmentObject



44
45
46
47
48
49
50
51
52
# File 'lib/guard/rails/runner.rb', line 44

def environment
  rails_env = if options[:zeus]
                nil
              else
                options[:environment]
              end

  { "RAILS_ENV" => rails_env }
end

#pidObject



58
59
60
# File 'lib/guard/rails/runner.rb', line 58

def pid
  File.file?(pid_file) ? File.read(pid_file).to_i : nil
end

#pid_fileObject



54
55
56
# File 'lib/guard/rails/runner.rb', line 54

def pid_file
  File.expand_path(options[:pid_file] || File.join(@root, "tmp/pids/#{options[:environment]}.pid"))
end

#restartObject



32
33
34
35
# File 'lib/guard/rails/runner.rb', line 32

def restart
  stop
  start
end

#sleep_timeObject



62
63
64
# File 'lib/guard/rails/runner.rb', line 62

def sleep_time
  options[:timeout].to_f / MAX_WAIT_COUNT.to_f
end

#startObject



14
15
16
17
18
# File 'lib/guard/rails/runner.rb', line 14

def start
  kill_unmanaged_pid! if options[:force_run]
  run_rails_command!
  wait_for_pid
end

#stopObject



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/guard/rails/runner.rb', line 20

def stop
  if File.file?(pid_file)
    pid = File.read(pid_file).strip
    system "kill -SIGINT #{pid}"
    wait_for_no_pid if $?.exitstatus == 0

    # If you lost your pid_file, you are already died.
    system "kill -KILL #{pid} >&2 2>/dev/null"
    FileUtils.rm pid_file, :force => true
  end
end