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

45 lines
1.5 KiB
Ruby
Raw Permalink Normal View History

require_relative "config"
module Backlog
# Pure decision over a project's configured tracker. No filesystem, no
# network: every input (repo path, config contents) is passed in.
#
# Post-ADR-0042 (Planka retired), there is no board inventory to resolve
# against — a project either has a `tracker` key in `.cc-os/config` or it
# doesn't. Decision, exactly one of:
# "use <tracker>" - a tracker key is configured; use it
# "stop-and-discuss" - no tracker configured; ask the human
# (see /os-backlog:route)
class Resolver
Decision = Struct.new(:action, :tracker) do
def to_s
action == :use ? "use #{tracker}" : "stop-and-discuss"
end
end
# @param repo_path [String] absolute path to the repo (kept for callers
# that pass it through; not otherwise used since board heuristics
# were retired with Planka)
# @param config_contents [String, nil] raw contents of .cc-os/config, or nil/absent
def initialize(repo_path:, config_contents:, **)
@repo_path = File.expand_path(repo_path)
@config = Config.new(config_contents)
end
# @return [Decision]
def resolve
return use(@config.tracker) if @config.tracker_configured?
stop_and_discuss
end
# @return [String] "use <tracker>" or "stop-and-discuss"
def resolve_string = resolve.to_s
private
def use(tracker) = Decision.new(:use, tracker)
def stop_and_discuss = Decision.new(:stop_and_discuss, nil)
end
end