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!
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.
18 19 20 |
# File 'lib/puma/state_file.rb', line 18 def initialize @options = {} end |
Instance Method Details
#load(path) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# 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) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# 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 |