Sha256: 7a38b76398b11772a433c3f3e94d57250f08ab964368da42887bdc50b50949a2

Contents?: true

Size: 1.88 KB

Versions: 11

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true

module Puma

  # 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.
  #
  class StateFile

    ALLOWED_FIELDS = %w!control_url control_auth_token pid running_from!

    # @deprecated 6.0.0
    FIELDS = ALLOWED_FIELDS

    def initialize
      @options = {}
    end

    def save(path, permission = 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 permission
        File.write path, contents, mode: 'wb:UTF-8'
      else
        File.write path, contents, mode: 'wb:UTF-8', perm: permission
      end
    end

    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

    ALLOWED_FIELDS.each do |f|
      define_method f do
        @options[f]
      end

      define_method "#{f}=" do |v|
        @options[f] = v
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
puma-5.6.9-java lib/puma/state_file.rb
puma-5.6.9 lib/puma/state_file.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/puma-5.6.8/lib/puma/state_file.rb
puma-5.6.8-java lib/puma/state_file.rb
puma-5.6.8 lib/puma/state_file.rb
puma-5.6.7-java lib/puma/state_file.rb
puma-5.6.7 lib/puma/state_file.rb
puma-5.6.6-java lib/puma/state_file.rb
puma-5.6.6 lib/puma/state_file.rb
puma-5.6.5-java lib/puma/state_file.rb
puma-5.6.5 lib/puma/state_file.rb