Class: Puma::StateFile

Inherits:
Object
  • Object
show all
Defined in:
lib/puma/state_file.rb

Overview

Puma::Launcher uses StateFile to write a yaml file for use with Puma::ControlCLI.

In previous versions of Puma, YAML was used to read/write the state file. Since Puma is similar to Bundler/RubyGems in that it may load before one's app does, minimizing the dependencies that may be shared with the app is desired.

At present, it only works with numeric and string values. It is still a valid yaml file, and the CI tests parse it with Psych.

Constant Summary collapse

ALLOWED_FIELDS =
%w!control_url control_auth_token pid running_from!
FIELDS =
Deprecated.

6.0.0

ALLOWED_FIELDS

Instance Method Summary collapse

Constructor Details

#initializeStateFile

Returns a new instance of StateFile.



21
22
23
# File 'lib/puma/state_file.rb', line 21

def initialize
  @options = {}
end

Instance Method Details

#load(path) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/puma/state_file.rb', line 45

def load(path)
  File.read(path).lines.each do |line|
    next if line.start_with? '#'
    k,v = line.split ':', 2
    next unless v && ALLOWED_FIELDS.include?(k)
    v = v.strip
    @options[k] =
      case v
      when ''              then nil
      when /\A\d+\z/       then v.to_i
      when /\A\d+\.\d+\z/  then v.to_f
      else                      v.gsub(/\A"|"\z/, '')
      end
  end
end

#save(path, permission = nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/puma/state_file.rb', line 25

def save(path, permission = nil)
  contents = "---\n".dup
  @options.each do |k,v|
    next unless ALLOWED_FIELDS.include? k
    case v
    when Numeric
      contents << "#{k}: #{v}\n"
    when String
      next if v.strip.empty?
      contents << (k == 'running_from' || v.to_s.include?(' ') ?
        "#{k}: \"#{v}\"\n" : "#{k}: #{v}\n")
    end
  end
  if permission
    File.write path, contents, mode: 'wb:UTF-8'
  else
    File.write path, contents, mode: 'wb:UTF-8', perm: permission
  end
end