cc-os/plugins/os-backlog/lib/backlog/config.rb

46 lines
1.4 KiB
Ruby
Raw Normal View History

require "yaml"
module Backlog
# The parsed contents of a repo's `.cc-os/config` (YAML). Only the
# `board` key matters to the resolver: an explicit board-name override.
# Never touches the filesystem itself — callers read the file and pass
# its contents (or nil, if absent) in.
class Config
def initialize(contents)
@data = contents.to_s.strip.empty? ? {} : (YAML.safe_load(contents) || {})
rescue Psych::SyntaxError
@data = {}
end
# @return [String, nil] the explicit board name override, if configured
def board
@data["board"]
end
# @return [String, nil] the tracker key (e.g. "forgejo:owner/repo"), if configured
def tracker
@data["tracker"]
end
def configured? = !board.nil?
def tracker_configured? = !tracker.nil?
# @return [Hash] a copy of the parsed config data
def to_h = @data.dup
# Return new YAML contents with `key` set to `value`, preserving every
# other key already present in `contents`. Pure — does not touch the
# filesystem; callers read/write the file themselves.
#
# @param contents [String, nil] existing raw `.cc-os/config` contents
# @param key [String, Symbol] key to set
# @param value [Object] value to set it to
# @return [String] the updated YAML contents
def self.merge(contents, key, value)
data = new(contents).to_h
data[key.to_s] = value
YAML.dump(data)
end
end
end