class Puma::StateFile
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.
Constants
- ALLOWED_FIELDS
Public Class Methods
Public Instance Methods
Source
# File lib/puma/state_file.rb, line 42 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
Source
# File lib/puma/state_file.rb, line 22 def save(path, permission = nil) contents = +"---\n" @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