class Renv::Data

Public Class Methods

new(payload = '') click to toggle source
# File lib/renv/data.rb, line 8
def initialize(payload = '')
  @data = _parse(payload)
end

Public Instance Methods

[]=(key, value) click to toggle source
# File lib/renv/data.rb, line 14
def []=(key, value)
  _assert(key =~ /^[A-Z0-9_]+$/, 'Key must be uppercase letters, digits, and underscores')
  @data[key] = value
end
dump() click to toggle source
# File lib/renv/data.rb, line 19
def dump
  result = []
  @data.map { |k,v| "#{k}=#{v}\n" }.join
end
load(payload) click to toggle source
# File lib/renv/data.rb, line 24
def load(payload)
  @data = @data.merge(_parse(payload))
  self
end

Private Instance Methods

_assert(condition, message) click to toggle source
# File lib/renv/data.rb, line 31
def _assert(condition, message)
  return if condition
  $stderr.puts message
  exit 1
end
_parse(payload) click to toggle source
# File lib/renv/data.rb, line 37
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