Sha256: 8f8a02d975b58951c3a09e5809d8dc40eec0446b7ce46bb69e0791c6cea27ac3

Contents?: true

Size: 945 Bytes

Versions: 1

Compression:

Stored size: 945 Bytes

Contents

require 'renv'
require 'delegate'

module Renv
  class Data
    extend Forwardable

    def initialize(payload = '')
      @data = _parse(payload)
    end

    delegate [:[], :delete] => :@data

    def []=(key, value)
      _assert(key =~ /^[A-Z0-9_]+$/, 'Key must be uppercase letters, digits, and underscores')
      @data[key] = value
    end

    def dump
      result = []
      @data.map { |k,v| "#{k}=#{v}\n" }.join
    end

    def load(payload)
      @data = @data.merge(_parse(payload))
      self
    end

    private

    def _assert(condition, message)
      return if condition
      $stderr.puts message
      exit 1
    end

    def _parse(payload)
      Hash.new.tap do |result|
        payload.strip.split(/[\n\r]+/).each do |line|
          next if line.strip.empty? || line =~ /^#/
          _assert(line.strip =~ /^([^=]+)=(.*)$/, "Cannot parse '#{line}'")
          result[$1] = $2
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
renv-1.0.0 lib/renv/data.rb