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!
Class Method Summary
- .new ⇒ StateFile constructor
Instance Method Summary
Constructor Details
.new ⇒ StateFile
# File 'lib/puma/state_file.rb', line 18
def initialize @options = {} end
Instance Method Details
#load(path)
[ GitHub ]# 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
#save(path, permission = nil)
[ GitHub ]# File 'lib/puma/state_file.rb', line 22
def save(path, = 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 File.write path, contents, mode: 'wb:UTF-8' else File.write path, contents, mode: 'wb:UTF-8', perm: end end