Class: Puma::StateFile
- Inherits:
-
Object
- Object
- Puma::StateFile
- 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
-
#initialize ⇒ StateFile
constructor
A new instance of StateFile.
- #load(path) ⇒ Object
- #save(path, permission = nil) ⇒ Object
Constructor Details
#initialize ⇒ StateFile
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, = 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 |