Class: Puma::StateFile
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/puma/state_file.rb |
Overview
Launcher
uses StateFile
to write a yaml file for use with 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
-
ALLOWED_FIELDS =
# File 'lib/puma/state_file.rb', line 16%w!control_url control_auth_token pid running_from!
-
FIELDS =
Deprecated.
6.0.0
ALLOWED_FIELDS
Class Method Summary
- .new ⇒ StateFile constructor
Instance Method Summary
Constructor Details
.new ⇒ StateFile
# File 'lib/puma/state_file.rb', line 21
def initialize @options = {} end
Instance Method Details
#load(path)
[ GitHub ]# 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)
[ GitHub ]# File 'lib/puma/state_file.rb', line 25
def save(path, = 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 File.write path, contents, mode: 'wb:UTF-8' else File.write path, contents, mode: 'wb:UTF-8', perm: end end